From 2784468ac5e8676af3a6c605c0cb8c784e6eb516 Mon Sep 17 00:00:00 2001 From: Mike Stillman Date: Thu, 30 May 2024 15:27:10 -0400 Subject: [PATCH] older c++ version of computeGV, not yet functional --- ComputeGV/Makefile | 13 + ComputeGV/README.md | 44 + ComputeGV/computeGV.cpp | 889 ++++ ComputeGV/computeGV.hpp | 1304 ++++++ ComputeGV/example_input_3fold_hyper.txt | 21 + ComputeGV/example_input_4fold_cicy.txt | 24 + ComputeGV/example_output_3fold_hyper.txt | 5150 ++++++++++++++++++++++ ComputeGV/example_output_4fold_cicy.txt | 382 ++ ComputeGV/mpreal.h | 3263 ++++++++++++++ 9 files changed, 11090 insertions(+) create mode 100644 ComputeGV/Makefile create mode 100644 ComputeGV/README.md create mode 100644 ComputeGV/computeGV.cpp create mode 100644 ComputeGV/computeGV.hpp create mode 100644 ComputeGV/example_input_3fold_hyper.txt create mode 100644 ComputeGV/example_input_4fold_cicy.txt create mode 100644 ComputeGV/example_output_3fold_hyper.txt create mode 100644 ComputeGV/example_output_4fold_cicy.txt create mode 100644 ComputeGV/mpreal.h diff --git a/ComputeGV/Makefile b/ComputeGV/Makefile new file mode 100644 index 0000000..9daf3bc --- /dev/null +++ b/ComputeGV/Makefile @@ -0,0 +1,13 @@ +#CXX = clang++ +#CXXFLAGS = -std=c++17 -march=native -O3 -fPIC +CPPFLAGS += -I`brew --prefix`/include # -I/opt/homebrew/include +CXXFLAGS = -std=c++17 -O3 -fPIC #-mcpu=apple-m1 +LDFLAGS = -L/opt/homebrew/lib -lmpfr -lgmp -pthread +LOADLIBS = -L/opt/homebrew/lib -lmpfr -lgmp -pthread +#CPPFLAGS = -L/usr/local/include + +computeGV: computeGV.o + c++ -o computeGV ${LOADLIBS} computeGV.o + +clean: + rm *.o computeGV diff --git a/ComputeGV/README.md b/ComputeGV/README.md new file mode 100644 index 0000000..4cc3dc0 --- /dev/null +++ b/ComputeGV/README.md @@ -0,0 +1,44 @@ +# GV Invariants + +This folder contains the C++ code used to compute GV invariants. The following dependencies are needed to build it: +- [GMP](https://gmplib.org/) +- [MPFR](https://www.mpfr.org/) +- [MPFR C++](http://www.holoborodko.com/pavel/mpfr/) the mpreal.h header is included in this repo, so it is not necessary to install anything. +- [Clang](https://clang.llvm.org/) ([gcc](https://gcc.gnu.org/) can be used instead, but Clang produces slightly a faster binary) + +To install the dependencies on Ubuntu/Debian-based distros you can use + +```bash +apt-get install libgmp-dev libmpfr-dev clang +``` + +To compile the code you use + +```bash +clang -c -std=c++17 -march=native -O3 -fPIC computeGV.cpp +#g++ -c -std=c++17 -march=native -O3 computeGV.cpp # If using gcc +g++ -o computeGV computeGV.o -lmpfr -lgmp -pthread # I'm not sure why linking with Clang fails +``` + +An example input file is provided. The input data is organized as follows. +- The list of curves. These are points in the Mori cone in the chosen basis. Only the generating curves must be given, as it will check if there are any missing curves below the specified maximum degree. +- The set of curves whose past light cone will be used. Usually one would just input an empty list []. This is useful if one wants to compute the GV invariant of a specific curve with the minimum computation effort. +- The grading vector. This is the vector whose dot product with curves determines the degree of the curves. +- The GLSM charge matrix. This is an h11 by h11+4 matrix whose rows specify the basis. +- The nef-partition of the polytope. If an empty list is given then it assumes an anticanonical hypersurface. +- The nonzero intersection numbers in the format [[i,j,k,K_ijk],...]. For three-folds these are simply triple-itersection numbers between divisors, but for higher-dimensional CYs the first index labels an element of H_{2,2}. +- A vector containing four entries. The first one is the maximum degree, and the second one is the number of decimal digits of precision that will be used in the computations. If the maximum degree is set to a negative number, it will be inferred from the input list of curves. The third integer is the mode: (0) normal, (1) Hilbert and (2) verbatim. The last parameter is the free RAM threshold below which the computation will be terminated. + +Note that the input vectors can be specified with square brackets, curly brackets or parenthesis. + +The compiled binary takes the data from the standard input, so it can be used as follows. + +```bash +./computeGV < example_input_3fold_hyper.txt +``` + +The computed GV invariants are printed to the standard output, whereas the process information is printed to the standard error. So the GV invariants can be saved as follows. + +```bash +./computeGV < example_input_3fold_hyper.txt 1>results.txt +``` diff --git a/ComputeGV/computeGV.cpp b/ComputeGV/computeGV.cpp new file mode 100644 index 0000000..9ee9781 --- /dev/null +++ b/ComputeGV/computeGV.cpp @@ -0,0 +1,889 @@ +/****************************************************************************** +This file is part of CYTools. + +CYTools is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +CYTools is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with CYTools. If not, see . +******************************************************************************/ + +#include "mpreal.h" +#include "computeGV.hpp" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { + + // We start by reading the lattice points corresponding to the curves whose + // GV invariants will be computed. + std::cerr << "Reading input curves..." << std::endl; + IntMatrix input_curves = ReadVectors(std::cin); + if (!input_curves.size()) { + throw std::invalid_argument("Empty curve list."); + } + int h11 = input_curves[0].size(); + + // Read the curves whose light cones will be used + std::cerr << "Reading curves whose past light cone will be computed..."; + std::cerr << std::endl; + std::vector > lightcone_curves = ReadVectors(std::cin); + if (lightcone_curves.size() && lightcone_curves[0].size() != h11) { + throw std::invalid_argument("Dimension mismatch."); + } + + // Now we read the grading vector. The dot product with this vector is what + // determines the degree of the curve. + std::cerr << "Reading grading vector..." << std::endl; + IntVector grading_vec = ReadVector(std::cin); + if (h11 != grading_vec.size()) { + throw std::invalid_argument("Rank of lattice must match size of grading " + "vector."); + } + + // Then we read the GLSM charge matrix + std::cerr << "Reading GLSM charge matrix..." << std::endl; + IntMatrix Q = ReadVectors(std::cin); + if (!Q.size()) { + throw std::invalid_argument("Empty GLSM charge matrix."); + } + + // Then we read the nef-partition + std::cerr << "Reading nef-partition..." << std::endl; + VectorList nef_partition = ReadVectors(std::cin, true); + + // Find the dimension and codimension of the CY + int ambient_dim = Q[0].size() - Q.size(); + int cy_codim = (nef_partition.size() ? nef_partition.size() : 1); + int cy_dim = ambient_dim - cy_codim; + if (cy_dim < 3) { + throw std::invalid_argument("CY must have dimension at least 3."); + } + + // Then we read the intersection numbers + // Note that when dim(CY) > 3 the first index corresponds to a H_{2,2} class + std::cerr << "Reading intersection numbers..." << std::endl; + IntMatrix intnums_list = ReadVectors(std::cin); + if (!intnums_list.size()) { + throw std::invalid_argument("Empty intersection numbers array."); + } + if (intnums_list[0].size() != 4) { + throw std::invalid_argument("Intersection numbers array must have exactly " + "4 columns."); + } + VecToIntDict intnums; + VectorSet beta_pairs; + std::vector tmp_vec_3(3); + int min_h11_ind=0, max_h11_ind=0, min_h22_ind=0, max_h22_ind=0; + for (auto &v : intnums_list) { + tmp_vec_3 = {v[0], v[1], v[2]}; + int intnum = v[3]; + std::sort(tmp_vec_3.begin()+(cy_dim > 3 ? 1 : 0), tmp_vec_3.end()); + if (cy_dim == 3) { + beta_pairs.insert({tmp_vec_3[0],tmp_vec_3[1]}); + beta_pairs.insert({tmp_vec_3[0],tmp_vec_3[2]}); + beta_pairs.insert({tmp_vec_3[1],tmp_vec_3[2]}); + } + else { + beta_pairs.insert({tmp_vec_3[1],tmp_vec_3[2]}); + } + intnums[tmp_vec_3] = intnum; + if (v[2] > max_h11_ind) { + max_h11_ind = v[2]; + } + if (v[1] < min_h11_ind) { + min_h11_ind = v[1]; + } + if (v[0] > max_h22_ind) { + max_h22_ind = v[0]; + } + if (v[0] < min_h22_ind) { + min_h11_ind = v[0]; + } + } + intnums_list.clear(); + // Check some basic things + if (min_h11_ind < 0 || min_h22_ind < 0) { + throw std::invalid_argument("Indices must be non-negative."); + } + if (max_h11_ind >= h11) { + throw std::invalid_argument("Indices cannot exceed h11-1."); + } + int h22 = (cy_dim > 3 ? max_h22_ind+1 : h11); + + // Finally, we read the maximum degree desired, the number of decimal digits, + // the mode used for calculations, and the minimum available memory below + // which the computation will be terminated. + // Modes: + // - 0 Normal: The full set of curves up to the specified degree is + // constructed, and the backward light cone is computed. + // - 1 Hilbert: Only GV invariants of Hilber basis elements are computed. + // - 2 Verbatim: The set of input curves are used exactly as given. + // If the mode has the third bit set then it means that GW invariants will + // be computed instead of GV invariants. + std::cerr << "Reading computation settings..." << std::endl; + std::vector input_settings = ReadVector(std::cin); + if (input_settings.size() != 4) { + throw std::invalid_argument("The input vector must have exactly three " + "entries: maximum degree, number of decimal" + "digits, mode, and minimum memory."); + } + int max_deg = input_settings[0]; + int digits = input_settings[1]; + int mode = input_settings[2]; + int min_mem = input_settings[3]; + input_settings.clear(); + + bool computeGW = mode & 0b100; + mode &= 0b11; + + int min_points = (max_deg >= 0 ? 0 : -max_deg); + max_deg *= (max_deg > 0 ? 1 : 0); + if (mode == 2) { + min_points = 0; + } + + if (mode < 0 || mode > 2) { + throw std::invalid_argument("Mode must be between 0 and 2."); + } + + MPFloat zero_cutoff = 10; + zero_cutoff = pow(zero_cutoff,-digits/2); + + // Set the number of decimal digits + if (digits < 17 || digits > 2000){ + throw std::invalid_argument("Number of digits (" + std::to_string(digits) + + ") was likely wrong. "); + } + int prec = mpfr::digits2bits(digits); + mpfr::mpreal::set_default_prec(prec); + + // Set up variables for multithreading. + int n_threads = std::thread::hardware_concurrency(); + if (!n_threads) { + n_threads = 1; + } + std::vector thread_vec; + std::mutex task_mut, mut0, mut1, mut2; + int curr_task; + + // Now we check for nonpositive degrees + std::cerr << "Checking consistency of input of curves..." << std::endl; + std::unordered_set,VectorHash> curves_set( + input_curves.begin(), + input_curves.end()); + // Add the curves whose light cones will be used (in case they are not + // already included) + for (auto &v : lightcone_curves) { + curves_set.insert(v); + } + std::vector > tmp_all_curves, tmp_new_curves, tmp_check_curves; + std::vector origin(h11, 0); + int tmp_deg, tmp_n_curves; + bool has_nonpos_degs = false; + bool find_max_deg = max_deg == 0; + // We first remove the origin to save some time + auto origin_it = curves_set.find(origin); + if (origin_it != curves_set.end()) { + curves_set.erase(origin_it); + } + // First find the maximum degree in the list, and check for non-positive + // degrees. + std::vector > curves_to_remove; + for (auto &v : curves_set) { + tmp_deg = 0; + for (int i = 0; i < h11; i++) { + tmp_deg += v[i] * grading_vec[i]; + } + if (tmp_deg <= 0) { + has_nonpos_degs = true; + break; + } + else if (tmp_deg > max_deg) { + if (find_max_deg) { + max_deg = tmp_deg; + } + else { + curves_to_remove.push_back(v); + } + } + } + if (has_nonpos_degs) { + throw std::invalid_argument("Non-zero curves with non-positive degrees " + "were found."); + } + for (auto &v : curves_to_remove) { + curves_set.erase(v); + } + curves_to_remove.clear(); + // Remove curves from lightcone_curves if necessary. + for (auto v = lightcone_curves.begin(); v != lightcone_curves.end(); ) { + auto search = curves_set.find(*v); + if (search == curves_set.end()) { + v = lightcone_curves.erase(v); + } + else{ + v++; + } + } + // If the maximum degree was not specified, and there are curves whose past + // light cone will be computed, then we first set the maximum degree to half + // of the maximum degree of these curves + int max_lightcone_deg = 0; + if (find_max_deg) { + for (auto &v : lightcone_curves) { + tmp_deg = 0; + for (int i = 0; i < h11; i++) { + tmp_deg += v[i] * grading_vec[i]; + } + if (tmp_deg > max_lightcone_deg) { + max_lightcone_deg = tmp_deg; + } + } + if (max_lightcone_deg) { + max_deg = std::ceil(float(max_lightcone_deg)/2.); + } + } + // Now we find the Hilbert basis of the Mori cone + VectorSet hilbert_set; + if (mode != 2) { + std::cerr << "Finding Hilbert basis..." << std::endl; + tmp_all_curves = std::vector >(curves_set.begin(), + curves_set.end()); + tmp_n_curves = tmp_all_curves.size(); + hilbert_set = curves_set; + curr_task = 0; + IntMatrix vecs_to_remove; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(RemoveNonGensThr, + std::ref(hilbert_set), std::ref(tmp_all_curves), + std::ref(vecs_to_remove), std::ref(grading_vec), + max_deg, std::ref(curr_task), tmp_n_curves, + std::ref(mut0), std::ref(task_mut))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + tmp_all_curves.clear(); + for (IntVector &v : vecs_to_remove) { + hilbert_set.erase(v); + } + } + + IntMatrix hilbert_basis = std::vector >(hilbert_set.begin(), + hilbert_set.end()); + // Now iterate over possible sums to find missing vectors if in normal mode + if (min_points > 0) { + curves_set.clear(); + curves_set.insert(origin); + max_deg = 1; + } + tmp_check_curves = std::vector >(curves_set.begin(), + curves_set.end()); + tmp_n_curves = tmp_check_curves.size(); + while (mode==0) { + curr_task = 0; + for (int i = 0; i < (n_threads <= 4 ? n_threads : 4); i++) { + thread_vec.push_back(std::thread(CheckCompletenessThr, + std::ref(curves_set), std::ref(tmp_check_curves), + std::ref(tmp_new_curves), std::ref(hilbert_basis), + std::ref(grading_vec), max_deg, std::ref(curr_task), + tmp_n_curves, std::ref(mut0), std::ref(task_mut), + min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + if (tmp_new_curves.size() == 0) { + if (curves_set.size() > min_points) { + tmp_check_curves.clear(); + break; + } + max_deg++; + continue; + } + std::cerr << "Found " << tmp_new_curves.size() << " new vectors" << std::endl; + if (min_points > 0) { + tmp_check_curves.insert(tmp_check_curves.end(), tmp_new_curves.begin(), + tmp_new_curves.end()); + } + else { + tmp_check_curves.clear(); + tmp_check_curves = std::move(tmp_new_curves); + } + tmp_new_curves.clear(); + tmp_n_curves = tmp_check_curves.size(); + } + tmp_check_curves.clear(); + tmp_new_curves.clear(); + // If in Hilbert mode we only keep the Hilbert basis + if (mode==1) { + curves_set.clear(); + curves_set = hilbert_set; + } + // Finally, we add back the origin + curves_set.insert(origin); + // Now we construct the past light cones for the necessary curves + std::unordered_set,VectorHash> lightcone_curves_set; + for (unsigned int i = 0; i < lightcone_curves.size(); i++) { + thread_vec.push_back(std::thread(HalfPastLightConeThr, + std::ref(curves_set), std::ref(lightcone_curves_set), + std::ref(lightcone_curves[i]), std::ref(mut0))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + // Now we fill out the portion of the past light cone that should be filled. + tmp_check_curves = std::vector >(curves_set.begin(), + curves_set.end()); + tmp_n_curves = tmp_check_curves.size(); + while (mode==0) { + curr_task = 0; + for (int i = 0; i < (n_threads <= 4 ? n_threads : 4); i++) { + thread_vec.push_back(std::thread(FillPastLightConeThr, + std::ref(curves_set), std::ref(tmp_check_curves), + std::ref(lightcone_curves_set), + std::ref(tmp_new_curves), std::ref(hilbert_basis), + std::ref(grading_vec), max_deg, std::ref(curr_task), + tmp_n_curves, std::ref(mut0), std::ref(task_mut), + min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + if (tmp_new_curves.size() == 0) { + tmp_check_curves.clear(); + break; + } + std::cerr << "Found new vectors" << std::endl; + tmp_check_curves.clear(); + tmp_check_curves = std::move(tmp_new_curves); + tmp_new_curves.clear(); + tmp_n_curves = tmp_check_curves.size(); + std::cerr << "Found " << tmp_check_curves.size() << " new vectors" << std::endl; + } + tmp_check_curves.clear(); + tmp_new_curves.clear(); + // Now we remove curves that are not in the past light cones of the selected + // curves. + VectorSet final_curves_set; + for (unsigned int i = 0; i < lightcone_curves.size(); i++) { + thread_vec.push_back(std::thread(TrimPastLightConeThr, + std::ref(curves_set), std::ref(final_curves_set), + std::ref(lightcone_curves[i]), std::ref(mut0))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + if (!final_curves_set.size()) { + final_curves_set = std::move(curves_set); + } + curves_set.clear(); + input_curves.clear(); + input_curves.reserve(final_curves_set.size()); + for (auto it = final_curves_set.begin(); it != final_curves_set.end(); ) { + input_curves.push_back(std::move(final_curves_set.extract(it++).value())); + } + curves_set.clear(); + int n_curves = input_curves.size(); + std::cerr << "Using " << n_curves << " curves." << std::endl; + if (find_max_deg && max_lightcone_deg) { + max_deg = max_lightcone_deg; + } + + // Compute the degrees of all monomials + IntVector degs(n_curves); + for (int i = 0; i < n_curves; i++) { + tmp_deg = 0; + for (int j = 0; j < h11; j++) { + tmp_deg += input_curves[i][j] * grading_vec[j]; + } + degs[i] = tmp_deg; + } + std::vector sorted_ind(n_curves); + std::iota(sorted_ind.begin(), sorted_ind.end(), 0); + std::sort(sorted_ind.begin(), sorted_ind.end(), + [°s](int a, int b) { + return degs[a] < degs[b]; + }); + IntMatrix curves; + curves.reserve(n_curves); + IntVector old_degs = degs; + for (int i = 0; i < n_curves; i++) { + curves.push_back(input_curves[sorted_ind[i]]); + degs[i] = old_degs[sorted_ind[i]]; + } + input_curves.clear(); + old_degs.clear(); + + // Construct a monomial/curve dictionary + std::cerr << "Constructing monomial dictionary..." << std::endl; + VecToIntDict curve_dict; + for (int i = 0; i < n_curves; i++) { + curve_dict[curves[i]] = i; + } + + // We store some constants that will be used for polygamma computations + MPFloat neg_em = -mpfr::const_euler(); + MPFloat pi2d6 = mpfr::const_pi()*mpfr::const_pi()/6; + + // Now we compute c and its derivatives + std::cerr << "Computing c..." << std::endl; + Polynomial c0; + std::vector c1(h11); + VecToPolyDict c2; + for (auto &pp : beta_pairs) { + c2[pp] = Polynomial(); + } + int h11pd = h11 + ambient_dim; + std::vector Q0s(cy_codim, IntVector(h11)); + for (int i = 0; i < h11; i++) { + for (int j = 0; j < cy_codim; j++) { + if (!nef_partition.size()) { + Q0s[0][i] = 0; + for (int k = 0; k < h11pd; k++) { + Q0s[0][i] += Q[i][k]; + } + } + else { + Q0s[j][i] = 0; + for (int k = 0; k < nef_partition[j].size(); k++) { + Q0s[j][i] += Q[i][nef_partition[j][k]]; + } + } + } + } + IntVector tmp_vec_h11pd(h11pd); + IntMatrix curves_dot_Q; + for (int i = 0; i < n_curves; i++) { + for (int j = 0; j < h11pd; j++) { + tmp_vec_h11pd[j] = 0; + for (int k = 0; k < h11; k++) { + tmp_vec_h11pd[j] += curves[i][k] * Q[k][j]; + } + } + curves_dot_Q.push_back(tmp_vec_h11pd); + } + IntVector tmp_vec_ncurves(n_curves); + IntMatrix curves_dot_Q0s; + for (int i = 0; i < cy_codim; i++) { + for (int j = 0; j < n_curves; j++) { + tmp_vec_ncurves[j] = 0; + for (int k = 0; k < h11; k++) { + tmp_vec_ncurves[j] += curves[j][k] * Q0s[i][k]; + } + } + curves_dot_Q0s.push_back(tmp_vec_ncurves); + } + std::vector neg0; + std::vector > neg1; + std::vector > neg2; + int k0, k1, k2; + for (int i = 0; i < n_curves; i++) { + k0 = k1 = k2 = -1; + for (int j = 0; j < h11pd; j++) { + if (curves_dot_Q[i][j] >= 0) { + continue; + } + else if (k0 == -1) { + k0 = j; + continue; + } + else if (k1 == -1) { + k1 = j; + continue; + } + k2 = j; + break; + } + if (k2 != -1) { + continue; + } + else if (k1 != -1) { + neg2.push_back({i,k0,k1}); + } + else if (k0 != -1) { + neg1.push_back({i,k0}); + } + else{ + neg0.push_back(i); + } + } + + // 0 negative + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(computeC_0neg, std::ref(c0), std::ref(c1), + std::ref(c2), std::ref(neg0), std::ref(Q), + std::ref(Q0s), std::ref(curves_dot_Q), + std::ref(curves_dot_Q0s), prec, std::ref(mut0), + std::ref(mut1), std::ref(mut2), + h11, h11pd, min_mem, std::ref(curr_task), + std::ref(task_mut), std::ref(beta_pairs), + std::ref(neg_em), std::ref(pi2d6))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + neg0.clear(); + // Start computing c0inv while we compute derivatives + PolyCleanUp(c0, zero_cutoff, true); + Polynomial c0inv; + std::thread c0inv_thr = std::thread(ComputeInvC0Thr, std::ref(c0inv), + std::ref(c0), std::ref(curves), + std::ref(degs), std::ref(curve_dict), + prec); + // 1 negative + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(computeC_1neg, std::ref(c1), std::ref(c2), + std::ref(neg1), std::ref(Q), std::ref(Q0s), + std::ref(curves_dot_Q), std::ref(curves_dot_Q0s), prec, + std::ref(mut1), std::ref(mut2), + h11, h11pd, min_mem, std::ref(curr_task), + std::ref(task_mut), std::ref(beta_pairs), + std::ref(neg_em))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + neg1.clear(); + for (auto &p : c1) { + PolyCleanUp(p, zero_cutoff, true); + } + // 2 negative + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(computeC_2neg, std::ref(c2), + std::ref(neg2), std::ref(Q), std::ref(Q0s), + std::ref(curves_dot_Q), std::ref(curves_dot_Q0s), prec, + std::ref(mut2), h11, h11pd, min_mem, + std::ref(curr_task), std::ref(task_mut), + std::ref(beta_pairs))); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + neg2.clear(); + for (auto &pp : beta_pairs) { + PolyCleanUp(c2[pp], zero_cutoff, true); + } + // Wait for c0inv to be done + c0inv_thr.join(); + c0 = Polynomial(); + + std::cerr << "Computing alpha polynomials..." << std::endl; + std::vector alpha(h11); + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeAlphaThr, std::ref(alpha), + std::ref(c0inv), std::ref(c1), std::ref(curves), + std::ref(degs), std::ref(curve_dict), prec, + std::ref(curr_task), std::ref(task_mut), + std::ref(mut0), min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + c1.clear(); + std::cerr << "Computing beta polynomials..." << std::endl; + VecToPolyDict beta; + VectorList beta_pairs_vec = VectorList(beta_pairs.begin(),beta_pairs.end()); + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeBetaThr, std::ref(beta), + std::ref(c0inv), std::ref(c2), std::ref(curves), + std::ref(degs), std::ref(curve_dict), prec, + std::ref(curr_task), std::ref(beta_pairs_vec), + std::ref(task_mut), std::ref(mut0), min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + c2.clear(); + + // Compute F polynomials (F_ab = beta_ab - alpha_a * alpha_b) + std::cerr << "Computing F polynomials..." << std::endl; + VecToPolyDict F; + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeFThr, std::ref(F), + std::ref(alpha), std::ref(beta), std::ref(curves), + std::ref(degs), std::ref(curve_dict), prec, + std::ref(curr_task), std::ref(beta_pairs_vec), + std::ref(task_mut), std::ref(mut0), min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + beta.clear(); + for (auto &p : F) { + PolyCleanUp(p.second, zero_cutoff); + } + + // Compute instanton corrections + std::cerr << "Computing instanton corrections..." << std::endl; + if (cy_dim == 3) { + h22 = h11; + } + std::vector inst(h22); + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeInstThr, std::ref(inst), + std::ref(F), std::ref(intnums), std::ref(curves), + std::ref(degs), std::ref(curve_dict), + prec, std::ref(curr_task), std::ref(task_mut), + std::ref(mut0), h22, cy_dim, min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + F.clear(); + // Clean up inst + for (auto &p : inst) { + PolyCleanUp(p, zero_cutoff); + } + + // Compute expalpha + std::cerr << "Computing exp(alpha)..." << std::endl; + std::vector expalpha_pos(h11), expalpha_neg(h11); + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeExpAlphaThr, + std::ref(expalpha_pos), std::ref(expalpha_neg), + std::ref(alpha), std::ref(curves), std::ref(degs), + std::ref(curve_dict), prec, std::ref(curr_task), + std::ref(task_mut), std::ref(mut0), min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + alpha.clear(); + + // Compute GV invariants iteratively + std::cerr << "Computing GV..." << std::endl; + std::cout.precision(digits); + Polynomial tmp_poly; + std::vector vec_deg; + MPFloat tmp_GV, tmp_GV_rounded; + int n_previous_levels = (h11 < 4 ? 2 : (h11 < 10 ? 5 : 10)); + std::vector previous_qN(n_previous_levels); + std::vector previous_qN_ind(n_previous_levels); + std::vector qN_to_compute; + std::vector GV_qN_to_compute; + IntToH22GVDict h22GV_qN_to_compute; + IntToPolyDict computed_qN, computed_Li2qN; + for (int i = 1; i < degs[n_curves-1]+1 ; i++) { + // First check if there are any points with the degree of interest + vec_deg.clear(); + qN_to_compute.clear(); + GV_qN_to_compute.clear(); + h22GV_qN_to_compute.clear(); + for (int j = 0; j < n_curves; j++) { + if (degs[j] == i) { + vec_deg.push_back(j); + } + else if (degs[j] > i) { + break; + } + } + if (!vec_deg.size()) { + continue; + } + if (cy_dim == 3) { + for (auto j : vec_deg) { + int kk = 0; + for (int k = 0; k < h11; k++) { + if (curves[j][k]) { + kk = k; + break; + } + } + auto search = inst[kk].coeffs.find(j); + if (search == inst[kk].coeffs.end()) { + continue; + } + tmp_GV = search->second/curves[j][kk]; + if (computeGW) { + if (mpfr::abs(tmp_GV) < zero_cutoff) { + continue; + } + std::cout << "("; + for (int k = 0; k < h11; k++) { + std::cout << curves[j][k] << (k==h11-1 ? "" : ","); + } + std::cout << "), " << tmp_GV << std::endl; + qN_to_compute.push_back(j); + GV_qN_to_compute.push_back(tmp_GV); + } + else { + tmp_GV_rounded = mpfr::round(tmp_GV); + if (abs(tmp_GV-tmp_GV_rounded) > 1e-3) { + std::cerr << "Error: Non-integer GV invariant was found.\n("; + for (int h = 0; h < h11; h++) { + std::cerr << curves[j][h] << (h==h11-1 ? "" : ","); + } + std::cerr << "), " << tmp_GV << std::endl; + throw std::logic_error("Non-integer GV invariant was found. Input " + "may be inconsistent, or the precision " + "needs to be increased."); + } + if (mpfr::abs(tmp_GV_rounded) < 0.5) { + continue; + } + std::cout << "("; + for (int k = 0; k < h11; k++) { + std::cout << curves[j][k] << (k==h11-1 ? "" : ","); + } + std::cout << "), " << tmp_GV_rounded << std::endl; + qN_to_compute.push_back(j); + GV_qN_to_compute.push_back(tmp_GV_rounded); + } + } + } + else { + for (auto j : vec_deg) { + for (int k = 0; k < h22; k++) { + auto search = inst[k].coeffs.find(j); + if (search == inst[k].coeffs.end()) { + continue; + } + tmp_GV = search->second; + if (computeGW) { + if (mpfr::abs(tmp_GV) < zero_cutoff) { + continue; + } + std::cout << "("; + for (int h = 0; h < h11; h++) { + std::cout << curves[j][h] << (h==h11-1 ? "" : ","); + } + std::cout << "), " << k << ", " << tmp_GV << std::endl; + auto search_h22 = h22GV_qN_to_compute.find(j); + if (search_h22 == h22GV_qN_to_compute.end()) { + qN_to_compute.push_back(j); + h22GV_qN_to_compute[j] = {{k,tmp_GV}}; + } + else { + search_h22->second.push_back({k,tmp_GV}); + } + } + else { + tmp_GV_rounded = mpfr::round(tmp_GV); + if (abs(tmp_GV-tmp_GV_rounded) > 1e-3) { + std::cerr << "Error: Non-integer GV invariant was found.\n("; + for (int h = 0; h < h11; h++) { + std::cerr << curves[j][h] << (h==h11-1 ? "" : ","); + } + std::cerr << "), " << k << ", " << tmp_GV << std::endl; + throw std::logic_error("Non-integer GV invariant was found. Input " + "may be inconsistent, or the precision " + "needs to be increased."); + } + if (mpfr::abs(tmp_GV_rounded) < 0.5) { + continue; + } + std::cout << "("; + for (int h = 0; h < h11; h++) { + std::cout << curves[j][h] << (h==h11-1 ? "" : ","); + } + std::cout << "), " << k << ", " << tmp_GV_rounded << std::endl; + auto search_h22 = h22GV_qN_to_compute.find(j); + if (search_h22 == h22GV_qN_to_compute.end()) { + qN_to_compute.push_back(j); + h22GV_qN_to_compute[j] = {{k,tmp_GV_rounded}}; + } + else { + search_h22->second.push_back({k,tmp_GV_rounded}); + } + } + } + } + } + if (!qN_to_compute.size()) { + continue; + } + computed_qN.clear(); + computed_Li2qN.clear(); + // compute qN and Li2(qN) in parallel + curr_task = 0; + for (int i = 0; i < n_threads; i++) { + thread_vec.push_back(std::thread(ComputeLi2qNThr, + std::ref(qN_to_compute), std::ref(computed_qN), + std::ref(computed_Li2qN), std::ref(previous_qN), + std::ref(previous_qN_ind), std::ref(expalpha_pos), + std::ref(expalpha_neg), std::ref(curves), + std::ref(degs), std::ref(curve_dict), prec, + std::ref(curr_task), std::ref(task_mut), + std::ref(mut0), computeGW, min_mem)); + } + for (auto &t : thread_vec) { + t.join(); + } + thread_vec.clear(); + // Now we do the subtraction from the instanton corrections + if (cy_dim == 3) { + for (int j = 0; j < qN_to_compute.size(); j++) { + for (int k = 0; k < h11; k++) { + int jj = qN_to_compute[j]; + if (!curves[jj][k]) { + continue; + } + tmp_poly = computed_Li2qN[jj]; + PolyProdScalarIP(tmp_poly, curves[jj][k]*GV_qN_to_compute[j]); + PolySubIP(inst[k], tmp_poly); + } + } + } + else { + for (int j = 0; j < qN_to_compute.size(); j++) { + int jj = qN_to_compute[j]; + for (int k = 0; k < h22GV_qN_to_compute[jj].size(); k++) { + int jj = qN_to_compute[j]; + int kk = h22GV_qN_to_compute[jj][k].first; + tmp_GV = h22GV_qN_to_compute[jj][k].second; + tmp_poly = computed_Li2qN[jj]; + PolyProdScalarIP(tmp_poly, tmp_GV); + PolySubIP(inst[kk], tmp_poly); + } + } + } + for (int j = 0; j < n_previous_levels-1; j++) { + previous_qN[j] = std::move(previous_qN[j+1]); + previous_qN_ind[j] = std::move(previous_qN_ind[j+1]); + } + if (n_previous_levels > 1) { + previous_qN[n_previous_levels-1] = std::move(computed_qN); + previous_qN_ind[n_previous_levels-1] = std::move(qN_to_compute); + } + } + return 0; +} diff --git a/ComputeGV/computeGV.hpp b/ComputeGV/computeGV.hpp new file mode 100644 index 0000000..9815f55 --- /dev/null +++ b/ComputeGV/computeGV.hpp @@ -0,0 +1,1304 @@ +/****************************************************************************** +This file is part of CYTools. + +CYTools is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +CYTools is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with CYTools. If not, see . +******************************************************************************/ + +#include "mpreal.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// This struct is needed to create sets of vectors +struct VectorHash { + size_t operator()(const std::vector& v) const { + size_t seed = v.size(); + size_t x; + for(auto c : v) { + x = c; + x = ((x >> 16) ^ x) + 0xdf3b45d9f3b; + x = ((x << 16) ^ x) + 0xdf3b45d9f3b; + seed ^= x + 0x779b99e3779b9 + (seed << 12) + (seed >> 4); + } + return seed; + } +}; + +// Define new types for convenience. +typedef mpfr::mpreal MPFloat; +typedef std::vector IntVector; +typedef std::vector > IntMatrix; +typedef std::vector > VectorList; +typedef std::unordered_set,VectorHash> VectorSet; +typedef std::unordered_map > > IntToH22GVDict; +typedef std::unordered_map,int,VectorHash> VecToIntDict; + +// Define a polynomial struct +struct Polynomial { + std::unordered_map coeffs; + std::vector nonzero; +}; + +typedef std::unordered_map IntToPolyDict; +typedef std::unordered_map,Polynomial,VectorHash> VecToPolyDict; + +// Returns available RAM +unsigned long long GetAvailableSystemMemory() +{ +#ifdef __linux__ + long pages = sysconf(_SC_AVPHYS_PAGES); + long page_size = sysconf(_SC_PAGE_SIZE); + return pages * page_size; +#elif __APPLE__ + // While I think of a better solution + return 1000000; +#else + return 1000000; +#endif +} + +// Compute factorials with multiple precision +MPFloat mpfactorial(int z) { + MPFloat res = z; + if (z < 0) { + throw std::invalid_argument("Input must be non-negative."); + } + else if (z == 0) { + res = 1; + } + for (int i = z-1; i > 1; i--){ + res *= i; + } + return res; +} + +// Compute digamma for integers with multiple precision +MPFloat mpdigamma(int z, const MPFloat &neg_em) { + if (z <= 0) { + throw std::invalid_argument("Digamma is infinite or complex."); + } + MPFloat res = neg_em; + MPFloat tmpVar; + for (int i = 1; i < z; i++){ + tmpVar = i; + res += 1/tmpVar; + } + return res; +} + +// Compute trigamma for integers with multiple precision +MPFloat mptrigamma(int z, const MPFloat &pi2d6) { + if (z <= 0) { + throw std::invalid_argument("Trigamma is infinite or complex."); + } + MPFloat res = pi2d6; + MPFloat tmpVar; + for (int i = 1; i < z; i++){ + tmpVar = i; + res -= 1/(tmpVar*tmpVar); + } + return res; +} + +// Parse a vector from std::cin +std::vector ReadVector(std::istream &ist) { + char c; + int i; + std::vector vec; + ist >> std::ws >> c; + if (c == '(' || c == '[' || c == '{') { + while (ist >> std::ws >> c) { + if (c == ')' || c == ']' || c == '}') { + break; + } + else if (isspace(c)) { + continue; + } + else if (c == ',') { + continue; + } + else if(isdigit(c) || c == '-') { + ist.putback(c); + ist >> i; + vec.push_back(i); + } + else { + throw std::invalid_argument("Failed to parse input as integer."); + } + } + } + else { + throw std::invalid_argument("Missing vector opening bracket."); + } + ist.clear(std::ios::goodbit); + return vec; +} + +// Parse a vector of vectors from std::cin +std::vector > ReadVectors(std::istream &ist, + bool allow_diff_lengths=false) { + char c; + unsigned int vec_size = 0; + std::vector > vecs; + std::vector tmp_vec; + ist >> std::ws >> c; + if (c == '(' || c == '[' || c == '{') { + while (ist >> std::ws >> c) { + if (c == ')' || c == ']' || c == '}') { + break; + } + else if (isspace(c)) { + continue; + } + else if (c == ',') { + continue; + } + else if (c == '(' || c == '[' || c == '{') { + ist.putback(c); + tmp_vec = ReadVector(ist); + if (!tmp_vec.size()){ + throw std::invalid_argument("Read vector with zero size."); + } + if (!vec_size) { + vec_size = tmp_vec.size(); + } + else if (!allow_diff_lengths && vec_size != tmp_vec.size()){ + throw std::invalid_argument("All vectors must be the same size."); + } + vecs.push_back(tmp_vec); + } + else { + throw std::invalid_argument("Missing vector opening bracket."); + } + } + } + else{ + throw std::invalid_argument("Missing matrix opening bracket."); + } + ist.clear(std::ios::goodbit); + return vecs; +} + +// Completes a given list of curves by making sure that all possible sums are +// in the list up to the specified maximum degree. +void CheckCompletenessThr(VectorSet &vset, const IntMatrix &check_vecs, + IntMatrix &new_vecs, + const IntMatrix &hilbert_basis, + IntVector &grading_vec, int max_deg, + int &curr_task, int n_curves, std::mutex &m, + std::mutex &task_mut, int min_mem) { + int h11 = check_vecs[0].size(); + int tmp_deg; + std::vector tmp_vec(h11); + while (true) { + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + task_mut.lock(); + int i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= n_curves) { + break; + } + for (unsigned int j = 0; j < hilbert_basis.size(); j++) { + tmp_deg = 0; + for (int k = 0; k < h11; k++) { + tmp_vec[k] = check_vecs[i][k] + hilbert_basis[j][k]; + tmp_deg += tmp_vec[k] * grading_vec[k]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > max_deg) { + continue; + } + // Search in the set and add if missing + m.lock(); + auto search = vset.find(tmp_vec); + if (search != vset.end()){ + m.unlock(); + continue; + } + vset.insert(tmp_vec); + new_vecs.push_back(tmp_vec); + m.unlock(); + } + } +} + +// Removes curves that are not in the Hilbert basis. This is done by checking +// that curves are not sums of up to 5 other curves. +void RemoveNonGensThr(const VectorSet &vset, const IntMatrix &vecs, + IntMatrix &vecs_to_remove, const IntVector &grading_vec, + int max_deg, int &curr_task, int n_curves, std::mutex &m, + std::mutex &task_mut) { + int h11 = vecs[0].size(); + int tmp_deg; + std::vector tmp_vec(h11); + while (true) { + task_mut.lock(); + int i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= n_curves) { + break; + } + for (int j = i; j < n_curves; j++) { + tmp_deg = 0; + for (int k = 0; k < h11; k++) { + tmp_vec[k] = vecs[i][k] + vecs[j][k]; + tmp_deg += tmp_vec[k] * grading_vec[k]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > max_deg) { + continue; + } + // Search in the set and erase if found + auto search2 = vset.find(tmp_vec); + if (search2 != vset.end()) { + m.lock(); + vecs_to_remove.push_back(tmp_vec); + m.unlock(); + } + for (unsigned int k = j; k < vecs.size(); k++) { + tmp_deg = 0; + for (int kk = 0; kk < h11; kk++) { + tmp_vec[kk] = vecs[i][kk] + vecs[j][kk] + vecs[k][kk]; + tmp_deg += tmp_vec[kk] * grading_vec[kk]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > max_deg) { + continue; + } + // Search in the set and erase if found + auto search3 = vset.find(tmp_vec); + if (search3 != vset.end()) { + m.lock(); + vecs_to_remove.push_back(tmp_vec); + m.unlock(); + } + for (unsigned int l = k; l < vecs.size(); l++) { + tmp_deg = 0; + for (int kk = 0; kk < h11; kk++) { + tmp_vec[kk] = (vecs[i][kk] + vecs[j][kk] + vecs[k][kk] + + vecs[l][kk]); + tmp_deg += tmp_vec[kk] * grading_vec[kk]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > max_deg) { + continue; + } + // Search in the set and erase if found + auto search4 = vset.find(tmp_vec); + if (search4 != vset.end()) { + m.lock(); + vecs_to_remove.push_back(tmp_vec); + m.unlock(); + } + for (unsigned int ll = l; ll < vecs.size(); ll++) { + tmp_deg = 0; + for (int kk = 0; kk < h11; kk++) { + tmp_vec[kk] = (vecs[i][kk] + vecs[j][kk] + vecs[k][kk] + + vecs[l][kk] + vecs[ll][kk]); + tmp_deg += tmp_vec[kk] * grading_vec[kk]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > max_deg) { + continue; + } + // Search in the set and erase if found + auto search5 = vset.find(tmp_vec); + if (search5 != vset.end()) { + m.lock(); + vecs_to_remove.push_back(tmp_vec); + m.unlock(); + } + } + } + } + } + } +} + +// Fills out the relevant part of the past light cone +void FillPastLightConeThr(VectorSet &vset, const IntMatrix &check_vecs, + const VectorSet &pset, IntMatrix &new_vecs, + const IntMatrix &hilbert_basis, + IntVector &grading_vec, int max_deg, int &curr_task, + int n_curves, std::mutex &m, std::mutex &task_mut, + int min_mem) { + int h11 = check_vecs[0].size(); + int tmp_deg; + std::vector tmp_vec(h11); + while (true) { + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + task_mut.lock(); + int i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= n_curves) { + break; + } + for (unsigned int j = 0; j < hilbert_basis.size(); j++) { + tmp_deg = 0; + for (int k = 0; k < h11; k++) { + tmp_vec[k] = check_vecs[i][k] + hilbert_basis[j][k]; + tmp_deg += tmp_vec[k] * grading_vec[k]; + } + // Discard if the vector exceeds the maximum degree + if (tmp_deg > 2*max_deg) { + continue; + } + // Discard if the vector is not in the past light cone + auto search = pset.find(tmp_vec); + if (search == pset.end()) { + continue; + } + // Search in the set and add if missing + m.lock(); + search = vset.find(tmp_vec); + if (search != vset.end()){ + m.unlock(); + continue; + } + vset.insert(tmp_vec); + new_vecs.push_back(tmp_vec); + m.unlock(); + } + } +} + +// Computes half of the past light cone. I.e. it takes the cone that was +// computed and flips it and sets the apex to be the relevant curve. +void HalfPastLightConeThr(VectorSet &vset, VectorSet &f_vset, + std::vector &vec, std::mutex &m) { + int h11 = vec.size(); + std::vector tmp_vec(h11); + for (auto &vec2 : vset) { + for (int i = 0; i < h11; i++) { + tmp_vec[i] = vec[i] - vec2[i]; + } + auto search = f_vset.find(tmp_vec); + if (search != vset.end()){ + continue; + } + m.lock(); + f_vset.insert(tmp_vec); + m.unlock(); + } +} + +// Trims the remaining curves that are not in the past light cone +void TrimPastLightConeThr(VectorSet &vset, VectorSet &f_vset, + std::vector &vec, std::mutex &m) { + int h11 = vec.size(); + std::vector tmp_vec(h11); + for (auto &vec2 : vset) { + for (int i = 0; i < h11; i++) { + tmp_vec[i] = vec[i] - vec2[i]; + } + // Search in the original and final set and add if missing + auto search = vset.find(tmp_vec); + if (search == vset.end()){ + continue; + } + search = f_vset.find(tmp_vec); + if (search != vset.end()){ + continue; + } + m.lock(); + f_vset.insert(tmp_vec); + m.unlock(); + } +} + +// Prints polynomials +void PolyPrint(const Polynomial &p, char coord_name = 'z') { + for (unsigned int i = 0; i < p.nonzero.size(); i++) { + std::cerr << (i ? " + " : ""); + std::cerr << p.coeffs.at(p.nonzero[i]) << "*" << coord_name << "^{n_" << p.nonzero[i] << "}"; + } + std::cerr << std::endl; +} +void PolyPrint(const Polynomial &p, const IntMatrix &curves, + char coord_name = 'z') { + int h11 = curves[0].size(); + for (unsigned int i = 0; i < p.nonzero.size(); i++) { + std::cerr << (i ? " + " : ""); + std::cerr << p.coeffs.at(i); + for (int j = 0; j < h11; j++) { + if (!curves[i][j]) { + continue; + } + std::cerr << "*" << coord_name << "_" << i; + if (curves[i][j] != 1) { + std::cerr << "^" << curves[i][j]; + } + } + } + std::cerr << std::endl; +} + +// Computes the product of two polynomials +Polynomial PolyProd(const Polynomial &p1, const Polynomial &p2, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict) { + Polynomial res; + int d1, d2, ind; + int h11 = curves[0].size(); + int max_deg = degs[degs.size()-1]; + IntVector tmp_vec_h11(h11); + VecToIntDict::const_iterator search; + std::unordered_map::const_iterator search2; + const Polynomial *pshort; + const Polynomial *plong; + if (p1.nonzero.size() < p2.nonzero.size()) { + pshort = &p1; + plong = &p2; + } + else { + pshort = &p2; + plong = &p1; + } + for (auto &i : pshort->nonzero) { + d1 = degs[i]; + for (auto &j : plong->nonzero) { + d2 = degs[j]; + if (d1+d2 > max_deg) { + break; + } + for (int k = 0; k < h11; k++) { + tmp_vec_h11[k] = curves[i][k] + curves[j][k]; + } + search = curve_dict.find(tmp_vec_h11); + if (search == curve_dict.end()) { + continue; + } + ind = search->second; + search2 = res.coeffs.find(ind); + if (search2 == res.coeffs.end()) { + res.coeffs[ind] = pshort->coeffs.at(i) * plong->coeffs.at(j); + res.nonzero.push_back(ind); + } + else { + res.coeffs[ind] += pshort->coeffs.at(i) * plong->coeffs.at(j); + } + } + } + std::sort(res.nonzero.begin(), res.nonzero.end()); + return res; +} + +// Finds the degree of the monomial with the smallest degree (with non-zero +// coefficient) +int PolyMinDeg(const Polynomial &p, const IntVector °s) { + for (auto &i : p.nonzero) { + return degs[i]; + } + return degs[degs.size()-1] + 1; +} + +// Truncates a polytop to a certain degree +Polynomial PolyTrunc(const Polynomial &p, int n, const IntVector °s) { + Polynomial res; + for (auto &i : p.nonzero) { + if (degs[i] > n) { + break; + } + res.nonzero.push_back(i); + res.coeffs[i] = p.coeffs.at(i); + } + return res; +} + +// Computes the product of a polynomial with a scalar in place +void PolyProdScalarIP(Polynomial &p, int f) { + for (auto &c : p.coeffs) { + c.second *= f; + } +} +void PolyProdScalarIP(Polynomial &p, const MPFloat &f) { + for (auto &c : p.coeffs) { + c.second *= f; + } +} + +// Computes the division of a polynomial by a scalar in place +void PolyDivIP(Polynomial &p, int d) { + for (auto &c : p.coeffs) { + c.second /= d; + } +} +void PolyDivIP(Polynomial &p, const MPFloat &d) { + for (auto &c : p.coeffs) { + c.second /= d; + } +} + +// Computes the sum of polynomials in place +void PolySumIP(Polynomial &p1, const Polynomial &p2) { + bool resort = false; + std::unordered_map::const_iterator search; + for (auto &c : p2.coeffs) { + search = p1.coeffs.find(c.first); + if (search == p1.coeffs.end()) { + p1.coeffs[c.first] = c.second; + p1.nonzero.push_back(c.first); + resort = true; + } + else { + p1.coeffs[c.first] += c.second; + } + } + if (resort) { + std::sort(p1.nonzero.begin(), p1.nonzero.end()); + } +} + +// Computes the difference of polynomials in place +void PolySubIP(Polynomial &p1, const Polynomial &p2) { + bool resort = false; + std::unordered_map::const_iterator search; + for (auto &c : p2.coeffs) { + search = p1.coeffs.find(c.first); + if (search == p1.coeffs.end()) { + p1.coeffs[c.first] = -c.second; + p1.nonzero.push_back(c.first); + resort = true; + } + else { + p1.coeffs[c.first] -= c.second; + } + } + if (resort) { + std::sort(p1.nonzero.begin(), p1.nonzero.end()); + } +} + +// Computes the sum of polynomials in place, with an additional factor +void PolySumFactIP(Polynomial &p1, const Polynomial &p2, int f) { + bool resort = false; + std::unordered_map::const_iterator search; + for (auto &c : p2.coeffs) { + search = p1.coeffs.find(c.first); + if (search == p1.coeffs.end()) { + p1.coeffs[c.first] = c.second * f; + p1.nonzero.push_back(c.first); + resort = true; + } + else { + p1.coeffs[c.first] += c.second * f; + } + } + if (resort) { + std::sort(p1.nonzero.begin(), p1.nonzero.end()); + } +} + +// Computes the sum of polynomials in place, with an additional division +void PolySumDivIP(Polynomial &p1, const Polynomial &p2, int d) { + bool resort = false; + std::unordered_map::const_iterator search; + for (auto &c : p2.coeffs) { + search = p1.coeffs.find(c.first); + if (search == p1.coeffs.end()) { + p1.coeffs[c.first] = c.second / d; + p1.nonzero.push_back(c.first); + resort = true; + } + else { + p1.coeffs[c.first] += c.second / d; + } + } + if (resort) { + std::sort(p1.nonzero.begin(), p1.nonzero.end()); + } +} +void PolySumDivIP(Polynomial &p1, const Polynomial &p2, const MPFloat &d) { + bool resort = false; + std::unordered_map::const_iterator search; + for (auto &c : p2.coeffs) { + search = p1.coeffs.find(c.first); + if (search == p1.coeffs.end()) { + p1.coeffs[c.first] = c.second / d; + p1.nonzero.push_back(c.first); + resort = true; + } + else { + p1.coeffs[c.first] += c.second / d; + } + } + if (resort) { + std::sort(p1.nonzero.begin(), p1.nonzero.end()); + } +} + +// Computes the inverse of a polynomial +Polynomial PolyInv(const Polynomial &p, const IntMatrix &curves, + const IntVector °s, const VecToIntDict &curve_dict) { + Polynomial res; + res.nonzero.push_back(0); + res.coeffs[0] = 1; + if (p.nonzero[0] != 0 || !p.coeffs.at(0)) { + throw std::invalid_argument("Polynomial is not invertible."); + } + int max_deg = degs[degs.size()-1]; + Polynomial p0 = p; + p0.nonzero.erase(p0.nonzero.begin()); + p0.coeffs.erase(0); + PolyDivIP(p0, p.coeffs.at(0)); + Polynomial tmp_poly = res; + int min_deg = PolyMinDeg(p0, degs); + for (int i = 1; i < 1+max_deg/min_deg; i++) { + tmp_poly = PolyProd(tmp_poly, p0, curves, degs, curve_dict); + if (i&1) { + PolySumFactIP(res, tmp_poly, -1); + } + else { + PolySumIP(res, tmp_poly); + } + } + PolyDivIP(res, p.coeffs.at(0)); + return res; +} + +// Computes the nonnegative power of a polynomial +Polynomial PolyPow(const Polynomial &p, unsigned int n, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict) { + Polynomial res; + res.nonzero.push_back(0); + res.coeffs[0] = 1; + if (n == 0) { + return res; + } + else if (n == 1) { + res = p; + return res; + } + int max_deg = degs[degs.size()-1]; + Polynomial tmp_poly = PolyTrunc(p, max_deg-(n-1)*PolyMinDeg(p, degs), degs); + while (true) { + if (n & 1) { + res = PolyProd(res, tmp_poly, curves, degs, curve_dict); + } + n >>= 1; + if (!n) { + break; + } + tmp_poly = PolyProd(tmp_poly, tmp_poly, curves, degs, curve_dict); + } + return res; +} + +// Computes the exponential of a polynomial (and its negative) +void PolyExp(Polynomial &res_pos, Polynomial &res_neg, const Polynomial &p, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict) { + bool has_const = (p.nonzero.size() > 0 && p.nonzero[0] == 0); + res_pos = Polynomial(); + res_pos.nonzero.push_back(0); + res_pos.coeffs[0] = 1; + res_neg = res_pos; + Polynomial p0 = p; + if (has_const) { + p0.nonzero.erase(p0.nonzero.begin()); + p0.coeffs.erase(0); + } + Polynomial tmp_poly = res_pos; + int min_deg = PolyMinDeg(p0, degs); + int max_deg = degs[degs.size()-1]; + MPFloat tmp_var; + for (int i = 1; i < 1+max_deg/min_deg; i++) { + tmp_poly = PolyProd(tmp_poly, p0, curves, degs, curve_dict); + tmp_var = mpfactorial(i); + PolySumDivIP(res_pos, tmp_poly, tmp_var); + if (i&1) { + tmp_var *= -1; + } + PolySumDivIP(res_neg, tmp_poly, tmp_var); + } + if (has_const) { + tmp_var = exp(p.coeffs.at(0)); + PolyProdScalarIP(res_pos, tmp_var); + PolyProdScalarIP(res_neg, tmp_var); + } +} + +// Computes the dilogarithm of a polynomial +Polynomial PolyLi2(const Polynomial &p, const IntMatrix &curves, + const IntVector °s, const VecToIntDict &curve_dict) { + if ((p.nonzero.size() > 0 && p.nonzero[0] == 0) + || p.coeffs.find(0) != p.coeffs.end()) { + std::cout << "hi" << std::endl; + PolyPrint(p); + throw std::invalid_argument("This type of polynomials are not " + "supported."); + } + Polynomial res = p; + Polynomial tmp_poly = p; + int min_deg = PolyMinDeg(p, degs); + int max_deg = degs[degs.size()-1]; + for (int i = 2; i < 1+max_deg/min_deg; i++) { + tmp_poly = PolyProd(tmp_poly, p, curves, degs, curve_dict); + PolySumDivIP(res, tmp_poly, i*i); + } + return res; +} + +// Removes coefficients with a very small magnitude +void PolyCleanUp(Polynomial &p, MPFloat &cutoff, bool force_resort=false) { + std::vector new_nonzero; + for (auto &i : p.nonzero) { + if (abs(p.coeffs[i]) < cutoff) { + p.coeffs.erase(i); + } + else { + new_nonzero.push_back(i); + } + } + if (force_resort) { + std::sort(new_nonzero.begin(), new_nonzero.end()); + } + p.nonzero = new_nonzero; +} + +// Computes c for curves with zero negative entries in the dot product with Q +void computeC_0neg(Polynomial &c0, std::vector &c1, + VecToPolyDict &c2, const std::vector &neg0, + const IntMatrix &Q, const IntMatrix &Q0s, + const IntMatrix &curves_dot_Q, + const IntMatrix &curves_dot_Q0s, int prec, + std::mutex &c0mutex, std::mutex &c1mutex, + std::mutex &c2mutex, int h11, int h11pd, int min_mem, + int &curr_task, std::mutex &task_mut, VectorSet &beta_pairs, + const MPFloat &neg_em, const MPFloat &pi2d6) { + mpfr::mpreal::set_default_prec(prec); + std::vector A(h11); + MPFloat tmp_num, c0fact, tmp_final; + int i, i_ind, a, b; + while (true) { + task_mut.lock(); + i_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (i_ind >= neg0.size()) { + break; + } + i = neg0[i_ind]; + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + c0fact = mpfactorial(curves_dot_Q0s[0][i]); + for (int j = 1; j < Q0s.size(); j++){ + c0fact *= mpfactorial(curves_dot_Q0s[j][i]); + } + for (int j = 0; j < h11pd; j++) { + c0fact /= mpfactorial(curves_dot_Q[i][j]); + } + c0mutex.lock(); + c0.coeffs[i] = c0fact; + c0.nonzero.push_back(i); + c0mutex.unlock(); + for (int a = 0; a < h11; a++) { + A[a] = Q0s[0][a]*mpdigamma(curves_dot_Q0s[0][i]+1, neg_em); + for (int j = 1; j < Q0s.size(); j++){ + A[a] += Q0s[j][a]*mpdigamma(curves_dot_Q0s[j][i]+1, neg_em); + } + for (int j = 0; j < h11pd; j++) { + A[a] -= Q[a][j]*mpdigamma(curves_dot_Q[i][j]+1, neg_em); + } + tmp_final = c0fact*A[a]; + c1mutex.lock(); + c1[a].coeffs[i] = tmp_final; + c1[a].nonzero.push_back(i); + c1mutex.unlock(); + } + for (auto &pp : beta_pairs) { + a = pp[0]; + b = pp[1]; + tmp_num = Q0s[0][a]*Q0s[0][b]*mptrigamma(curves_dot_Q0s[0][i]+1, pi2d6); + for (int j = 1; j < Q0s.size(); j++){ + tmp_num += (Q0s[j][a]*Q0s[j][b] + *mptrigamma(curves_dot_Q0s[j][i]+1, pi2d6)); + } + for (int j = 0; j < h11pd; j++) { + tmp_num -= Q[a][j]*Q[b][j]*mptrigamma(curves_dot_Q[i][j]+1, pi2d6); + } + tmp_num += A[a]*A[b]; + tmp_final = c0fact*tmp_num; + c2mutex.lock(); + c2[{a,b}].coeffs[i] = tmp_final; + c2[{a,b}].nonzero.push_back(i); + c2mutex.unlock(); + } + } + mpfr_free_cache(); +} + +// Computes c for curves with one negative entry in the dot product with Q +void computeC_1neg(std::vector &c1, VecToPolyDict &c2, + const std::vector > &neg1, + const IntMatrix &Q, const IntMatrix &Q0s, + const IntMatrix &curves_dot_Q, + const IntMatrix &curves_dot_Q0s, int prec, + std::mutex &c1mutex, std::mutex &c2mutex, int h11, + int h11pd, int min_mem, int &curr_task, + std::mutex &task_mut, VectorSet &beta_pairs, + const MPFloat &neg_em) { + mpfr::mpreal::set_default_prec(prec); + std::vector A(h11); + MPFloat tmp_fact, tmp_final; + int i, k, m, sn; + int i_ind, a, b; + while (true) { + task_mut.lock(); + i_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (i_ind >= neg1.size()) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + i = std::get<0>(neg1[i_ind]); + k = std::get<1>(neg1[i_ind]); + m = curves_dot_Q[i][k]; + sn = (m&1 ? 1 : -1); + tmp_fact = mpfactorial(curves_dot_Q0s[0][i]); + for (int j = 1; j < Q0s.size(); j++){ + tmp_fact *= mpfactorial(curves_dot_Q0s[j][i]); + } + tmp_fact *= mpfactorial(-m-1); + for (int j = 0; j < h11pd; j++) { + if (j == k) { + continue; + } + tmp_fact /= mpfactorial(curves_dot_Q[i][j]); + } + for (int a = 0; a < h11; a++) { + A[a] = Q0s[0][a]*mpdigamma(curves_dot_Q0s[0][i]+1, neg_em); + for (int j = 1; j < Q0s.size(); j++){ + A[a] += Q0s[j][a]*mpdigamma(curves_dot_Q0s[j][i]+1, neg_em); + } + for (int j = 0; j < h11pd; j++) { + A[a] -= Q[a][j]*mpdigamma((j==k ? -m : curves_dot_Q[i][j]+1), neg_em); + } + tmp_final = (sn*Q[a][k])*tmp_fact; + c1mutex.lock(); + c1[a].coeffs[i] = tmp_final; + c1[a].nonzero.push_back(i); + c1mutex.unlock(); + } + for (auto &pp : beta_pairs) { + a = pp[0]; + b = pp[1]; + tmp_final = (sn*(Q[a][k]*A[b]+Q[b][k]*A[a]))*tmp_fact; + c2mutex.lock(); + c2[{a,b}].coeffs[i] = tmp_final; + c2[{a,b}].nonzero.push_back(i); + c2mutex.unlock(); + } + } + mpfr_free_cache(); +} + +// Computes c for curves with two negative entries in the dot product with Q +void computeC_2neg(VecToPolyDict &c2, + const std::vector > &neg2, + const IntMatrix &Q, const IntMatrix &Q0s, + const IntMatrix &curves_dot_Q, + const IntMatrix &curves_dot_Q0s, int prec, + std::mutex &c2mutex, int h11, int h11pd, int min_mem, + int &curr_task, std::mutex &task_mut, + VectorSet &beta_pairs) { + mpfr::mpreal::set_default_prec(prec); + std::vector A(h11); + MPFloat c0fact, tmp_num; + int i, k0, k1, m0, m1; + int i_ind, a, b; + while (true) { + task_mut.lock(); + i_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (i_ind >= neg2.size()) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + i = std::get<0>(neg2[i_ind]); + k0 = std::get<1>(neg2[i_ind]); + k1 = std::get<2>(neg2[i_ind]); + m0 = curves_dot_Q[i][k0]; + m1 = curves_dot_Q[i][k1]; + c0fact = ((m0+m1)&1 ? -1 : 1); + c0fact *= mpfactorial(curves_dot_Q0s[0][i]); + for (int j = 1; j < Q0s.size(); j++){ + c0fact *= mpfactorial(curves_dot_Q0s[j][i]); + } + c0fact *= mpfactorial(-m0-1); + c0fact *= mpfactorial(-m1-1); + for (int j = 0; j < h11pd; j++) { + if (j == k0 || j== k1) { + continue; + } + c0fact /= mpfactorial(curves_dot_Q[i][j]); + } + for (auto &pp : beta_pairs) { + a = pp[0]; + b = pp[1]; + tmp_num = c0fact*(Q[a][k0]*Q[b][k1]+Q[a][k1]*Q[b][k0]); + c2mutex.lock(); + c2[{a,b}].coeffs[i] = tmp_num; + c2[{a,b}].nonzero.push_back(i); + c2mutex.unlock(); + } + } + mpfr_free_cache(); +} + +// Computes the inverse of c0 +void ComputeInvC0Thr(Polynomial &c0inv, const Polynomial &c0, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec) { + mpfr::mpreal::set_default_prec(prec); + c0inv = PolyInv(c0, curves, degs, curve_dict); + mpfr_free_cache(); +} + +// Computes the beta polynomials +void ComputeAlphaThr(std::vector &alpha, + const Polynomial &c0inv, + const std::vector &c1, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, int &curr_task, + std::mutex &task_mut, std::mutex &m, int min_mem) { + mpfr::mpreal::set_default_prec(prec); + Polynomial tmp_poly; + int i; + while (true) { + task_mut.lock(); + i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= c1.size()) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + tmp_poly = PolyProd(c0inv, c1.at(i), curves, degs, curve_dict); + m.lock(); + alpha[i] = std::move(tmp_poly); + m.unlock(); + } + mpfr_free_cache(); +} + +// Computes the alpha or beta polynomials +void ComputeBetaThr(VecToPolyDict &beta, + const Polynomial &c0inv, + const VecToPolyDict &c2, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, int &curr_task, + const VectorList &beta_pairs_vec, + std::mutex &task_mut, std::mutex &m, int min_mem) { + mpfr::mpreal::set_default_prec(prec); + Polynomial tmp_poly; + int p_ind; + std::vector pp; + while (true) { + task_mut.lock(); + p_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (p_ind >= beta_pairs_vec.size()) { + break; + } + pp = beta_pairs_vec[p_ind]; + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + tmp_poly = PolyProd(c0inv, c2.at(pp), curves, degs, curve_dict); + if (tmp_poly.nonzero.size() > 0 && tmp_poly.nonzero[0] == 0) { + tmp_poly.nonzero.erase(tmp_poly.nonzero.begin()); + tmp_poly.coeffs.erase(0); + } + m.lock(); + beta[pp] = std::move(tmp_poly); + m.unlock(); + } + mpfr_free_cache(); +} + +// Computes F polynomials +void ComputeFThr(VecToPolyDict &F, + const std::vector &alpha, + const VecToPolyDict &beta, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, int &curr_task, + const VectorList &beta_pairs_vec, + std::mutex &task_mut, std::mutex &m, int min_mem) { + mpfr::mpreal::set_default_prec(prec); + int h11 = alpha.size(); + Polynomial tmp_poly; + MPFloat tmp_num; + int a, b, p_ind; + while (true) { + task_mut.lock(); + p_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (p_ind >= beta_pairs_vec.size()) { + break; + } + a = beta_pairs_vec[p_ind][0]; + b = beta_pairs_vec[p_ind][1]; + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + tmp_poly = PolyProd(alpha.at(a), alpha.at(b), curves, degs, curve_dict); + PolySubIP(tmp_poly, beta.at({a,b})); + PolyProdScalarIP(tmp_poly, -1); + + m.lock(); + F[{a,b}] = tmp_poly; + m.unlock(); + } + mpfr_free_cache(); +} + +// Computes instanton corrections +void ComputeInstThr(std::vector &inst, + const VecToPolyDict &F, + const VecToIntDict &intnums, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, int &curr_task, + std::mutex &task_mut, std::mutex &m, int h22, int cy_dim, + int min_mem) { + mpfr::mpreal::set_default_prec(prec); + std::vector tmp_vec(3); + int intnum, i; + Polynomial tmp_poly; + MPFloat tmp_num; + VecToIntDict::const_iterator search; + int h11 = curves[0].size(); + while (true) { + task_mut.lock(); + i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= h22) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + for (int a = 0; a < h11; a++){ + for (int b = a; b < h11; b++){ + tmp_vec = {i,a,b}; + if (cy_dim > 3) { + if (a>b) { + tmp_vec = {i,b,a}; + } + } + else { + std::sort(tmp_vec.begin(), tmp_vec.end()); + } + search = intnums.find(tmp_vec); + if (search == intnums.end()) { + continue; + } + intnum = search->second; + tmp_poly = F.at({a,b}); + if (a!=b) { + PolyProdScalarIP(tmp_poly, intnum); + } + else { + tmp_num = intnum; + tmp_num /= 2; + PolyProdScalarIP(tmp_poly, tmp_num); + } + m.lock(); + PolySumIP(inst[i], tmp_poly); + m.unlock(); + } + } + } + mpfr_free_cache(); +} + +// Computes the exponentials of alpha polynomials +void ComputeExpAlphaThr(std::vector &expalpha_pos, + std::vector &expalpha_neg, + const std::vector &alpha, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, + int &curr_task, std::mutex &task_mut, std::mutex &m, + int min_mem) { + mpfr::mpreal::set_default_prec(prec); + Polynomial tmp_poly_pos, tmp_poly_neg; + MPFloat tmp_num; + int h11 = alpha.size(); + int i; + while (true) { + task_mut.lock(); + i = curr_task; + curr_task++; + task_mut.unlock(); + if (i >= h11) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + tmp_poly_pos.nonzero.clear(); + tmp_poly_pos.coeffs.clear(); + tmp_poly_neg.nonzero.clear(); + tmp_poly_neg.coeffs.clear(); + PolyExp(tmp_poly_pos, tmp_poly_neg, alpha.at(i), curves, degs, curve_dict); + m.lock(); + expalpha_pos[i] = std::move(tmp_poly_pos); + expalpha_neg[i] = std::move(tmp_poly_neg); + m.unlock(); + } + mpfr_free_cache(); +} + +// Computes qN for generator curves +Polynomial ComputeqN(const Polynomial &closest_curve, + const IntVector &closest_curve_diff, + const std::vector &expalpha_pos, + const std::vector &expalpha_neg, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict) { + int h11 = curves[0].size(); + Polynomial res = closest_curve; + Polynomial tmp_poly; + for (int i = 0; i < h11; i++) { + if (!closest_curve_diff[i]) { + continue; + } + else if (closest_curve_diff[i] > 0) { + tmp_poly = PolyPow(expalpha_pos.at(i), closest_curve_diff[i], curves, degs, curve_dict); + } + else { + tmp_poly = PolyPow(expalpha_neg.at(i), -closest_curve_diff[i], curves, degs, curve_dict); + } + res = PolyProd(res, tmp_poly, curves, degs, curve_dict); + } + return res; +} + +// Computes qN and Li2(qN) +void ComputeLi2qNThr(const std::vector &qN_to_compute, + IntToPolyDict &computed_qN, IntToPolyDict &computed_Li2qN, + const std::vector &previous_qN, + const std::vector &previous_qN_ind, + const std::vector &expalpha_pos, + const std::vector &expalpha_neg, + const IntMatrix &curves, const IntVector °s, + const VecToIntDict &curve_dict, int prec, int &curr_task, + std::mutex &task_mut, std::mutex &m, bool computeGW, + int min_mem) { + mpfr::mpreal::set_default_prec(prec); + int h11 = curves[0].size(); + Polynomial closest_curve, tmp_qN, tmp_Li2qN, tmp_poly; + IntVector closest_curve_diff(h11), tmp_curve_diff(h11); + double closest_dist, tmp_dist; + VecToIntDict::const_iterator search; + int i, i_ind; + while (true) { + task_mut.lock(); + i_ind = curr_task; + curr_task++; + task_mut.unlock(); + if (i_ind >= qN_to_compute.size()) { + break; + } + if (GetAvailableSystemMemory() < min_mem) { + throw std::runtime_error("Memory is running low. " + "Exitting to prevent crash..."); + } + i = qN_to_compute[i_ind]; + closest_curve = Polynomial(); + closest_curve.nonzero.push_back(i); + closest_curve.coeffs[i] = 1; + closest_curve_diff = curves[i]; + closest_dist = 0; + for (int j = 0; j < h11; j++) { + if (closest_curve_diff[j]) { + closest_dist += std::log2(std::abs(closest_curve_diff[j]))+1; + } + } + // Now we check to see if there is a better starting curve + for (int j = 0; j < previous_qN_ind.size(); j++) { + for (auto k : previous_qN_ind[j]) { + tmp_dist = 0; + for (int h = 0; h < h11; h++) { + tmp_curve_diff[h] = curves[i][h] - curves[k][h]; + if (tmp_curve_diff[h]) { + tmp_dist += std::log2(std::abs(tmp_curve_diff[h]))+1; + } + } + if (tmp_dist < closest_dist) { + search = curve_dict.find(tmp_curve_diff); + if (search == curve_dict.end()) { + continue; + } + tmp_poly = Polynomial(); + tmp_poly.nonzero.push_back(search->second); + tmp_poly.coeffs[search->second] = 1; + closest_curve = PolyProd(previous_qN[j].at(k), tmp_poly, curves, degs, curve_dict); + closest_dist = tmp_dist; + closest_curve_diff = tmp_curve_diff; + } + } + } + // Now we compute qN and Li2(qN) + tmp_qN = ComputeqN(closest_curve, closest_curve_diff, expalpha_pos, + expalpha_neg, curves, degs, curve_dict); + tmp_Li2qN = (computeGW ? tmp_qN : PolyLi2(tmp_qN, curves, degs, curve_dict)); + m.lock(); + computed_qN[i] = std::move(tmp_qN); + computed_Li2qN[i] = std::move(tmp_Li2qN); + m.unlock(); + } + mpfr_free_cache(); +} diff --git a/ComputeGV/example_input_3fold_hyper.txt b/ComputeGV/example_input_3fold_hyper.txt new file mode 100644 index 0000000..4fc196d --- /dev/null +++ b/ComputeGV/example_input_3fold_hyper.txt @@ -0,0 +1,21 @@ +[[0,0], + [0,1], + [1,0], + [2,0], + [0,2], + [1,1]] + +[] + +[1,1] + +[[1, 1, 0, 0, 1, -3], + [0, 0, 2, 3, 0, 1]] + +[] + +[[0,0,1,1], + [0,1,1,3], + [1,1,1,9]] + +[50,300,0,100000] diff --git a/ComputeGV/example_input_4fold_cicy.txt b/ComputeGV/example_input_4fold_cicy.txt new file mode 100644 index 0000000..1df25f7 --- /dev/null +++ b/ComputeGV/example_input_4fold_cicy.txt @@ -0,0 +1,24 @@ +[[ 0, 0, 0, -2, 3, 0], + [ 1, 0, -4, 0, 0, 0], + [ 0, 0, 1, 1, 0, 0], + [ 0, 1, 0, 0, 1, -2], + [ 0, -2, 0, 1, 0, 2], + [ 0, 0, 0, 0, -2, 1]] + +[] + +[73, -30, 18, -17, -11, -21] + +[[ 1, 1, 1, 1, 0, 0, 8, 12, 4, 0, 0, 0], +[ 0, 0, 0, 0, 1, 0, -4, -6, -3, 0, 0, 0], +[ 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0], +[ 0, 0, 0, 0, 0, 0, -2, -3, -2, 1, 0, 0], +[ 0, 0, 0, 0, 0, 0, -2, -2, -1, 0, 1, 0], +[ 0, 0, 0, 0, 0, 0, -3, -4, -2, 0, 0, 1]] + +[[0,1,2,3], + [4,5,6,7,8,9,10,11]] + +[[0, 0, 2, 1], [0, 1, 1, -8], [0, 1, 3, 4], [0, 1, 5, 8], [0, 2, 2, -4], [0, 3, 3, -8], [0, 4, 4, -16], [0, 4, 5, 8], [0, 5, 5, -16], [1, 0, 1, -8], [1, 0, 3, 4], [1, 0, 5, 8], [1, 1, 3, 16], [1, 1, 5, -32], [1, 3, 3, -16], [1, 5, 5, 64], [2, 0, 0, 1], [2, 0, 2, -4], [2, 2, 2, 16], [3, 0, 1, 4], [3, 0, 3, -8], [3, 1, 1, 16], [3, 1, 3, -16], [4, 0, 4, -16], [4, 0, 5, 8], [4, 4, 4, -128], [4, 4, 5, 32], [5, 0, 1, 8], [5, 0, 4, 8], [5, 0, 5, -16], [5, 1, 1, -32], [5, 1, 5, 64], [5, 4, 4, 32], [5, 5, 5, -128], [6, 0, 0, -8], [6, 0, 3, 16], [6, 0, 5, -32], [6, 1, 1, -128], [6, 1, 3, 64], [6, 1, 5, 128], [6, 3, 3, -64], [6, 5, 5, -256], [7, 0, 0, 4], [7, 0, 1, 16], [7, 0, 3, -16], [7, 1, 1, 64], [7, 1, 3, -64], [7, 3, 3, 64], [8, 0, 0, 8], [8, 0, 1, -32], [8, 0, 5, 64], [8, 1, 1, 128], [8, 1, 5, -256], [8, 5, 5, 512], [9, 0, 0, -4], [9, 0, 2, 16], [9, 2, 2, -64], [10, 0, 0, -8], [10, 0, 1, -16], [10, 1, 1, -64], [10, 1, 3, 64], [10, 3, 3, -128], [11, 0, 0, -16], [11, 0, 4, -128], [11, 0, 5, 32], [11, 4, 4, -768], [11, 4, 5, 128], [12, 0, 0, 8], [12, 0, 4, 32], [12, 4, 4, 128], [13, 0, 0, -16], [13, 0, 1, 64], [13, 0, 5, -128], [13, 1, 1, -256], [13, 1, 5, 512], [13, 5, 5, -1024]] + +[10,300,0,1000000] diff --git a/ComputeGV/example_output_3fold_hyper.txt b/ComputeGV/example_output_3fold_hyper.txt new file mode 100644 index 0000000..9046b05 --- /dev/null +++ b/ComputeGV/example_output_3fold_hyper.txt @@ -0,0 +1,5150 @@ +(0,1),540 +(1,0),3 +(0,2),540 +(2,0),-6 +(1,1),-1080 +(3,0),27 +(2,1),2700 +(1,2),143370 +(0,3),540 +(4,0),-192 +(0,4),540 +(1,3),204071184 +(3,1),-17280 +(2,2),-574560 +(2,3),74810520 +(0,5),540 +(3,2),5051970 +(5,0),1695 +(4,1),154440 +(1,4),21772947555 +(5,1),-1640520 +(2,4),-49933059660 +(6,0),-17064 +(3,3),-913383000 +(4,2),-57879900 +(1,5),1076518252152 +(0,6),540 +(6,1),19369800 +(0,7),540 +(7,0),188454 +(3,4),224108858700 +(1,6),33381348217290 +(4,3),13593850920 +(5,2),751684050 +(2,5),7772494870800 +(1,7),746807207168880 +(7,1),-245635200 +(6,2),-10500261120 +(4,4),-2953943334360 +(5,3),-218032516800 +(0,8),540 +(2,6),31128163315047072 +(3,5),-42712135606368 +(8,0),-2228160 +(7,2),153827405370 +(2,7),8211715737128556480 +(5,4),51350781706785 +(9,0),27748899 +(4,5),603778002921828 +(1,8),13066023094376184 +(8,1),3279587940 +(3,6),4047949393968960 +(0,9),540 +(6,3),3630383423100 +(8,2),-2330291414880 +(10,0),-360012150 +(2,8),1028507105335081958010 +(6,4),-967920854160960 +(5,5),-11035406089270080 +(9,1),-45523225800 +(4,6),-90433961251273800 +(7,3),-61789428573120 +(3,7),-16612333123572659520 +(1,9),188271614342884440 +(0,10),540 +(9,2),36188361900000 +(0,11),540 +(8,3),1066731732480960 +(6,5),224651517028866252 +(4,7),50057390316302661600 +(3,8),557857099229413942980 +(5,6),2000248139674298880 +(2,9),80800208902667906592120 +(1,10),2315358756135507708 +(11,0),4827935937 +(10,1),651397306320 +(7,4),18707398902511245 +(12,0),-66537713520 +(9,3),-18598995628773120 +(8,4),-364076788969451700 +(7,5),-4765797079033190400 +(5,7),-541531457497667187360 +(10,2),-572844561276960 +(6,6),-45689218327425589920 +(0,12),540 +(11,1),-9551232737280 +(1,11),24938116106611476240 +(4,8),-4857031791273654662400 +(3,9),12062915300688221340874800 +(2,10),4514936832424642664588256 +(2,11),193184014251718654753245120 +(8,5),102291970780203585984 +(7,6),1064787653240073455400 +(5,8),105945679633991227534665 +(9,4),7088681855967798870 +(12,1),142880428296900 +(3,10),5149144917498862220233916106 +(0,13),540 +(13,0),938273463465 +(1,12),239864130530818426395 +(10,3),326633529521223360 +(4,9),-829083736989100822406880 +(6,7),10071417619296745378920 +(11,2),9206650970707050 +(13,1),-2173470795349560 +(4,10),-10175779437823098081549363600 +(7,7),-230224103349955979141880 +(11,3),-5767847554823697600 +(6,8),-2166961512505754757323718 +(1,13),2091565178888639510880 +(8,6),-24962209515122044200840 +(14,0),-13491638200194 +(10,4),-137749013892786806640 +(2,12),6647845545470135457545077620 +(3,11),1063193518943850079971623540160 +(5,9),-7097825755762445566096920 +(0,14),540 +(9,5),-2193463789605823093920 +(12,2),-149806141399335600 +(13,2),2462647192097168430 +(9,6),583134606404938803525030 +(14,1),33534886051955700 +(12,3),102289349588924124000 +(2,13),190555378771971459587990398560 +(11,4),2669314326268289267835 +(7,8),49644406496056785000793335 +(1,14),16733370446909690729670 +(4,11),-1300310651440925498778075902520 +(0,15),540 +(5,10),25260945106904593043483247120 +(6,9),316826046244406834708610600 +(10,5),46748387806415756219700 +(8,7),5628496088993331019557960 +(3,12),139672156489451598949772737333455 +(15,0),197287568723655 +(16,0),-2927443754647296 +(15,1),-523757485609142400 +(1,15),124026972470930675651040 +(2,14),4671163488721300138111133121120 +(0,16),540 +(10,6),-13504324946173912984809600 +(4,12),6708560970518985899636274859705872 +(13,3),-1820292368405831668800 +(12,4),-51571957560719651568000 +(8,8),-1230872836972548630804446520 +(6,10),-189247686143652352290308577984 +(7,9),-9100803469297106365286903040 +(11,5),-988460058939822134561952 +(9,7),-139916995340871196899579600 +(14,2),-40833591391324569600 +(3,13),13147658112962574676655205326847360 +(5,11),3155174527940025675029269364160 +(2,15),99946320377015309427475258694400 +(15,2),682067677050647619660 +(16,1),8267132845519168680 +(3,14),949911547436412814815191972182933236 +(9,8),31690328098766196454675634205 +(12,5),20727884278150701962051412 +(10,7),3470207643103998788039614320 +(0,17),540 +(17,0),44000514720961743 +(13,4),993480452377597398701025 +(1,16),858503832049518071060565 +(8,9),248078691028927076066143887600 +(6,11),14437371120137155715296739869440 +(7,10),2687571433443238857695982455280 +(14,3),32484327382659210734520 +(4,13),4055613453233639516291941765192800060 +(11,6),309291312980371657871175570 +(5,12),-990494703822296855403360091407870 +(0,18),540 +(10,8),-825231600826440952730311387530 +(6,12),5103461134648481215811582278776420 +(13,5),-431197402274287256256734592 +(5,13),-8112116276792337530868059495048833440 +(9,9),-6755815760931720195757705868400 +(18,0),-668908727886779298 +(1,17),5586810292745834331047400 +(11,7),-85228310320281367471289790720 +(3,15),55132319170179986076164379783852968472 +(8,10),-57215330764695270521031220215084 +(17,1),-131704780564065240000 +(7,11),-518772202753792534191572116299840 +(12,6),-7000541859157428488697243900 +(16,2),-11465564719810615835220 +(15,3),-581062605376542532041960 +(14,4),-19085847698711273064318900 +(2,16),1897208497644432088056194666759472 +(4,14),1176543505829701555830720113298477900480 +(12,7),2066753547423272700195772050000 +(18,1),2115438258042886701420 +(2,17),32375511150384903008217414360179220 +(6,13),19751032415687768545067545970094391440 +(11,8),21430206136805131665934405589295 +(17,2),193806585081001299749580 +(7,12),12429219827211815747986277489758710 +(16,3),10414281615340595147681400 +(15,4),365729076819903945140504865 +(3,16),2655998574836953417451071052791649286420 +(10,9),184531942217050943102322314469120 +(1,18),34374513379322985423239256 +(8,11),12709021541834379687431249352164400 +(19,0),10272581487272296287 +(9,10),1466251192851844759269952211802126 +(14,5),8903352599445338538213312288 +(13,6),156610317678608989392066739980 +(0,19),540 +(5,14),-2369609642087035263816888485632660072650 +(4,15),219065923474054324841157756232694990817312 +(4,16),29450284198996252949045678758192446175937280 +(14,6),-3464780667693687558351565692480 +(5,15),4391955925538650226112016795323199166780400 +(7,13),-121683626989138377508059428410957095360 +(9,11),-324493504607345501684669455434967200 +(19,1),-34226244150882738030720 +(13,7),-49441406809591989047879356838400 +(1,19),200936918857531210488106560 +(18,2),-3291979971880738512859680 +(15,5),-182579087054087775450436682880 +(20,0),-159199764298612184400 +(17,3),-186968230482778336458720000 +(16,4),-6991883091785349637436719800 +(2,18),502137498199786091695488750166898400 +(12,8),-551121221403978573766480403947200 +(8,12),-1658945180332995707393923185620139240 +(3,17),108866764014279630759204593699836626708960 +(6,14),7098499608264084670064030006090009628480 +(10,10),-40253670839027985836581502913576960 +(11,9),-5029031809782699578356429321194240 +(0,20),540 +(20,1),557375049485830223578440 +(8,13),1208210063446398911497154227139335651080 +(2,19),7143592190675671690580146494245054400 +(10,11),8820259573838905795175529605642905560 +(17,4),133383317030242859830765753305 +(16,5),3720750092945148952027656882252 +(21,0),2487530242483764790347 +(14,7),1166892416517994501889389850484300 +(3,18),3871144038076704341475439023260523329084550 +(1,20),1120587512506711615759142637 +(7,14),-17959835556605778797818388041307363274660 +(15,6),75861224516054456650740193860690 +(5,16),3612821685207607213944229605997404651908761425 +(11,10),1129021145781649111393041096397560078 +(6,15),-161699189106177550541585659930823120247072 +(12,9),136006472122126760324341785183933780 +(9,12),58302176597023226710285867572298208025 +(4,17),3054704444679676385883255327029394448146926208 +(0,21),540 +(19,2),56159215647212633982741000 +(13,8),13991472846597188071756359957479670 +(18,3),3361538932890719619366964440 +(7,15),4666074446060211080170514254883188575245760 +(22,0),-39158371654739463558960 +(4,18),255323122936886618802731253817906752956899762920 +(19,3),-60514414845096079538391971520 +(18,4),-2539572788494506915664115265000 +(20,2),-961741438071197414265034200 +(0,22),540 +(10,12),-1775627925480562993269460672663392262020 +(2,20),93946131890642915051488135288700720184 +(8,14),-65029894451685116406624137309388375147072 +(9,13),-19017926510224610992947403179786039705960 +(14,8),-350239258646301444656656398071996250 +(5,17),1363074025789982556900083559069097225625421215280 +(11,11),-249230952529565551441086507347163150360 +(16,6),-1645122186121063215799070713295280 +(21,1),-9130272849850045047451560 +(6,16),-7367840646232724630316394370840172086683350390 +(1,21),5983731296580774253923236160 +(3,19),121298127138292867904807135025436284428915136 +(17,5),-75394114075450880466127232894856 +(15,7),-27186233298186152256215054364838080 +(13,9),-3636529179004049098814944371836896800 +(12,10),-31730673034922384743690054356082649052 +(5,18),330305070747168554792609486535126536654070123149640 +(8,15),-48406960647035426704918459841628657540476328 +(1,22),30691762029291515695134700500 +(13,10),885757238878787425048720250954022981750 +(2,21),1149761483473647910582597692828526341840 +(19,4),48266210985019525923895972787850 +(21,2),16527155426747745174916843230 +(12,11),7160287310816157521564929879603714392600 +(20,3),1090593441148830090723380255040 +(10,13),429158115071859312933267180060877977704160 +(16,7),625712545953229737526082074186296840 +(9,14),3549788428119465345670080270320531633945010 +(7,16),18730289046111068693363038298319140186100945570 +(18,5),1519831414754829170854422627382164 +(6,17),-3369850191362794504117198964592764962192008700800 +(4,19),17739148010974314943635586743434116483451225389920 +(23,0),620615857972940208374907 +(22,1),150357965403404060194990500 +(11,12),52715594855705890919455789446641069306205 +(3,20),3392580161995795550532679094337895750580987688 +(0,23),540 +(17,6),35363107929517482092501660220796050 +(15,8),8643506711373314001376498572724588680 +(14,9),95932986356105470988275173888555792360 +(23,1),-2488094110762795780971765120 +(2,22),13170768370078304969242216797781984597920 +(6,18),3015261764974818245060439410656572459062689181341152 +(10,14),-97416508079133324965123596357247670664818240 +(5,19),58074869614858944479106582332461232211148925851286880 +(13,11),-206205224871834124276695847721593771256640 +(9,15),141077108112950923069151478031497685275044832 +(3,21),85613916077963107298418622758091944540336992880 +(16,8),-210381717385936673715456873130172433588 +(20,4),-915826982369874526882629405783720 +(24,0),-9897185221769372984645184 +(17,7),-14238648653472090207951488235307173600 +(22,2),-284901189007504695154050170880 +(11,13),-11648533554416155815866047872483882740877120 +(1,23),151640762240168710045805087280 +(0,24),540 +(14,10),-24452325814834253020691161524420307187712 +(15,9),-2494657704156214658022949810063611591360 +(4,20),1048765666001596875328536920668049061921859570928280 +(21,3),-19674084277746278476701624921600 +(19,5),-30493352172560812641412161374761632 +(7,17),10649123859550492532430626078794902030107916459840 +(12,12),-1562581648217643280797319466588607295369080 +(8,16),-112660574509366572434854109650175562206667896160 +(18,6),-754043951453970432176606168088261120 +(11,14),2647074441594741517751097712092763823090398440 +(22,3),355227790373863846845446200277880 +(10,15),10152717633634536865260244613308794202531611720 +(18,7),320620948474857798211695411854037797160 +(7,18),1332614447508795239650427995075795430117838035508990 +(21,4),17351175176449905805296073047467370 +(23,2),4925166504498765232006804465140 +(1,24),723500399810435025756677520555 +(17,8),5053604284123185814477688677877692368390 +(12,13),340222026548179285606904723764173442827152100 +(8,17),-40669043392916637579427776674064371215377465969540 +(19,6),15959943220425406037987572256444140050 +(16,9),63936533130672246387724017698144779856940 +(24,1),41354535393040994751934470240 +(6,19),3449836491663275465338860166848242851912403516165024160 +(14,11),5904309934295510802063024043574006849913600 +(0,25),540 +(20,5),609180107115136158531012250768239540 +(25,0),158734225973203052602236750 +(2,23),141930783322669621539905338135891996007040 +(13,12),46315422034282863670349146205963057490782910 +(4,21),53743228599425265700767244994748842733474385008015660 +(3,22),1967265670030763330824889599564060492634741913330 +(5,20),7914453038949456188189183302662692988720024861899947545 +(15,10),666127892119822765271358077184318094419720 +(9,16),934156406161859964429851539772767186345547343435 +(3,23),41484701247523703261822973623538407495251562003520 +(10,16),-10355627408528684453004632485098816462022308913890 +(4,22),2422882986962133342730602905069581293098049645343088832 +(1,25),3340861317787174970731954675992 +(24,2),-85362848723875240412499993576300 +(26,0),-2559204521376651083783356392 +(19,7),-7149741968203631589410098860475980720000 +(5,21),872271552901939465006709525947776895498712506376703939720 +(25,1),-690138665519323126802512860360 +(6,20),1626516850825245907278058566217553336552181058681234124832 +(8,18),-787388168328025008733865691446378490957252109136280 +(18,8),-119895066382998112699233216842034615923670 +(13,13),-10197467866172463069967868661125618225049901200 +(12,14),-75665855461370060602643653961610437583264405240 +(20,6),-335522747518733313171048003489317817360 +(17,9),-1615508860578073332499212817103095299309360 +(21,5),-12122054494060621159218481324336131984 +(23,3),-6418896748020868310074584959310720 +(15,11),-167336500669136909866346456265134196991907520 +(7,19),-7112198926283786533286473726164115579781186096039006400 +(14,12),-1367699914965421641098498153592248673654390300 +(9,17),158074949677608681628198377278629318952626208447184 +(0,26),540 +(11,15),-450716023739623335826021344481650897586223562624 +(16,10),-17890164975834670869407347418246636405461032 +(2,24),1445194367846676492864014572083611119509930 +(22,4),-328277447521244817387948973877379120 +(15,12),40082402982356432884814458238543881090371212505 +(14,13),307666453670368945289150871437586906492370990140 +(0,27),540 +(25,2),1483005963272146504833863477049480 +(9,18),-41555832297545526912395190070061565195736368949487700 +(4,23),97284968977300447561391805181222473458741752193508785280 +(11,16),167366405521593025472595740888571326626912062156540 +(18,9),40265017553791966004649912293200770472610100 +(5,22),80115720294647796168146813259795031559301552573877270963680 +(8,19),18940081415052702220979672470794095505442963450997348496 +(7,20),-4520546736186730639678418981931017830437249865630607060385 +(3,24),808286956574129826015935151011092771846899053655444 +(19,8),2811603154894547690563325213573313525128895 +(6,21),488076870232242127461968891547854595758290944538849838742840 +(2,25),13959174839985645721390975616708096390468040 +(17,10),473572411972872874494057525500131852258929450 +(27,0),41461261457856900864186692088 +(1,26),14960420237251729833140245959450 +(23,4),6202916642199070369698695597614385250 +(10,17),297378709047137126557657510884742430615675907636360 +(16,11),4683137278520152714648672043307134280533009880 +(12,15),15073256067784332831637657782788326801677848244468 +(24,3),116070258450595985171830581109622100 +(13,14),2250378028343639177773659219280616488413436092930 +(22,5),240346729519401687273516445144151339232 +(26,1),11560226226242511062080594295460 +(21,6),7009867677240280095817334998908889569600 +(20,7),158011230974592772811402266544917214986440 +(24,4),-117067098534737369817735006759627783480 +(25,3),-2100193909950360006698043253076472960 +(9,19),-119907803816542669055078335158138264942468177503116450560 +(5,23),6272091852425682227544764931634732974501267724184316103096800 +(2,26),128347927764686779639092316024005573747108480 +(27,1),-194307267983436676516188548966400 +(28,0),-674729283377640184540584195696 +(21,7),-3463244848239391854013503949846790185156320 +(12,16),-3837512465433296590600790483229826739333962930284624 +(14,14),-68348142181542399101204768259464673834210074535840 +(13,15),-475214805189098850268659603689579217549856357093248 +(10,18),573078497773693427760155070087473627756364109943719200 +(26,2),-25820176947387256282433865286312800 +(17,11),-129275673027556849863114315266412098864590430640 +(3,25),14637576387868550672441085180513643363328506732994880 +(23,5),-4749605656441364038131485890728328396800 +(19,9),-990596592927435927759875104217764115105241600 +(22,6),-145616889549566353329445467639668036227200 +(0,28),540 +(20,8),-65222905564842990388891858715772201347037600 +(11,17),-29697115228729294469252544836748026326427258258101440 +(15,13),-9260482530473986418641092356805702765102154583040 +(7,21),1909174371593412681060161737526311072041870372262988680647312 +(1,27),65084567788670972917506233927520 +(16,12),-1162430293465964969300801530663042596093486693720 +(8,20),14796698746268966805046326656205643983524723288943501821712 +(18,10),-12358170723237734526761824956844607068783987968 +(6,22),106417257583978169275026069071543536007969112228987445321954560 +(4,24),3515237184011722413290638343104089821557541446927659980160 +(15,14),2091097574320382051458737225189822269401768340954340 +(29,0),11026273910669759302300879471290 +(20,9),24073080222305979096461230878919809438871890060 +(1,28),275530800838772858875549762530717 +(26,3),38023350965147754690704058302969076000 +(9,20),-65241089736803165138095252168109014656178898781860671601661 +(14,15),14826225357783752432067694170681796015842740763294000 +(2,27),1126848346376584777364661079879287778904513280 +(7,22),3411764002191368117714942106457087704096709108492836935849440470 +(25,4),2206961911834652870744844780746800868205 +(22,7),75326722378307729561443805081953149831732360 +(23,6),3009001516436814208979240289634837568409510 +(11,18),-3898313720868446552222885407822832386203842783014227198 +(27,2),450447272012990731111230656819105550 +(6,23),18040261228749044907079993966119927413923031337241831729844778072 +(19,10),318058111823023246683889817955522055815636640212 +(24,5),93572115404605425681705403736680994973984 +(16,13),276719822807198949619507633662425398087040867553780 +(18,11),3518505017310554330299116176189761616754431596440 +(3,26),247664066814392260728084655630972053885465407142793680 +(5,24),425997344187771169984801831513079289794473081534438451915702670 +(4,25),115315759758451049769417620424714250743110068026128004481656 +(13,16),107216952455500854405708558470948121290715941318738640 +(0,29),540 +(10,19),983509923577980309910559401123509583447775078348462591760 +(21,8),1497839746557129418753126460907713510363530524 +(17,12),33299626957602301393055005148745723416411759852505 +(28,1),3276379476237381556768092484981200 +(12,17),886593294387609096123473874892355309348771995753154700 +(8,21),3692685464608447946104332261126048943928606085954255711523080 +(18,12),-941315714488177375643796001100139548475922578964140 +(30,0),-180890938432341452514484895407110 +(17,13),-8185562980650611044580361459417130077015727945883520 +(11,19),-9356600602528316044499799799078790775158684267155539782400 +(6,24),2480775753504993773124522543418084704201733107082900654234607651010 +(23,7),-1626799359406086988915120652239253780005751040 +(9,21),-11128373231388808475305121261840145623207497985085609183627360 +(19,11),-94423606583869219703891502201476769248801340758400 +(7,23),1975057974193178261768534037541965777000399565686480604594063979520 +(22,8),-34076526845776228113050154082797156498621614100 +(14,16),-3248903300450128216536468960811038742404195307413281130 +(20,10),-8077788907576024066132410032483436895888775433900 +(24,6),-61875185284872173729359301461688476239301800 +(0,30),540 +(27,3),-688766220136452789711481338758046712680 +(1,29),1136748787618503512535635397457800 +(13,17),-25024499163251517827723890948197769438946924060235922200 +(29,1),-55409375608982761127196627381618720 +(16,14),-63900418149063007920147461398227047863372573824021000 +(2,28),9473365661284294034234474130090583207985969580 +(25,5),-1838252431729891539412352394599409093339120 +(12,18),-58402096305177674576207411716481325167665873959100511640 +(21,9),-578298120690517135372737512876850389331152035320 +(4,26),3460601613458344945808064494625236842598891779486981952829600 +(28,2),-7872842861922318953037886976362835580 +(5,25),25462247843871859270115861953848342510825581016927898774876444440 +(3,27),3933257314475730075995296066132405261227336302060554680 +(15,15),-462419719937961999223959495804822476067555807027528000 +(8,22),-6951043587546895746559702757976001478257680065919547226247757800 +(26,4),-41563226634595257173004607480207259609340 +(10,20),358295365146779896106865542467336415862144087580956073575360 +(24,7),34903055918778968806504888794523059733623081000 +(14,17),736243847126908587628918687672718708252676473555165564040 +(7,24),711859119645873478925226427295690053475123659372416905022620913070140 +(19,12),26246347389873310909136598249596191802125195203882375 +(22,9),13742604772342574565998617201515256689636639695520 +(16,15),14409167518556949143372329775151994804005273228747831456 +(3,28),58874020435511137012566633389118180280018279307889823140 +(29,2),137836315111588537389771653735320095750 +(0,31),540 +(18,13),239282163287987262416555879379376790092549525819899600 +(2,29),76454260706475183303609815772444522487441171680 +(5,26),1355201091574363863422806287505202485701922033558575840926779991400 +(6,25),285019418920640713881858111778837679022974727806535530813725519799424 +(1,30),4576660374970732546830986330606568 +(30,1),939653741776743946724341286578823280 +(31,0),2978396256465124800656183234502036 +(9,22),18884708285699950451250733558817414420024304507274840560442864932 +(20,11),2499303011447215503054979277057339982397301300693040 +(25,6),1266633750846253299740047865277346032229115160 +(13,18),3867082030296369390806995915194522464128651430451200560050 +(15,16),101424592623911598831504252750169230444920506370634005910 +(4,27),95636062078533842468431918669844123273646798093801601904436840 +(28,3),12482580409687978787417384444176890779400 +(21,10),202577742478362919955588404721740171931990889689604 +(17,14),1940425958291283880132385249965954397412535110133711230 +(27,4),782002624338747340228577613699769050338940 +(12,19),108036542343469042617340276608848013208513787170666175165040 +(8,23),-5928102013282971988901251616141342517823148421766798618098885966840 +(11,20),-1774591868834746812941195190123994615411911562534678738438221 +(23,8),768517620784098079189491709115024627516993022900 +(10,21),5979408184888874718922710378135594444021022185994272910093200 +(26,5),36018320291207043582972770698594052392178436 +(6,26),27967883902576954778700963196109242096538881853230837701759301808755200 +(7,25),185930081663454212150648478016959570436845202262405310229947783500996160 +(10,22),-130143377213972231072782912575396858544871652980378666159898495360 +(26,6),-25820658196692363295219849552368661644292586880 +(28,4),-14700054325706364604610297209719865716086400 +(18,14),-58374684944621930832406029351299267303434216720680939552 +(14,18),-143039763504247678013269245812561747410755183455660346508800 +(5,27),64869460593586999943164066913525656529551654021496045817019308868320 +(29,3),-226324153542312334176194400506873755804800 +(31,1),-15976012821027869025880128353246832000 +(8,24),753493144687308214033701032296729160120236833773836829263227679666896 +(4,28),2448090718393458004225277983535934854904496111121811522935107440 +(25,7),-744289557738537405440855267274308925847174748640 +(15,17),-22566515312209892292819862452565754073856427907024329459520 +(32,0),-49206809307725736140239614298487808 +(3,29),833636839486519404210620840836116252843992590858733247648 +(20,12),-721808469432252541360077219550649438087136961585913280 +(30,2),-2417062501935078113726575947667537505280 +(13,19),-1717377859798920660806984118397256730798166311796175200081056 +(27,5),-704015186032146715056585055199940458363917920 +(17,15),-447207366157124709517490127439496472211432784924870718528 +(22,10),-5019896176271632913345204530189401736802292050448192 +(2,30),593678332020837241537635990161593883313309090240 +(24,8),-17191846709444798242266779065905918218828650431360 +(23,9),-323281979280558836990332053546888345533623518297600 +(1,31),18003643722011949650286628328647920 +(21,11),-65279324834707969625473093915366755439772514114849600 +(0,32),540 +(9,23),19970111248790729596258976709411744555766899223210992697721151246480 +(16,16),-3197494943962245148297761225738211981986565506483367548600 +(12,20),-258169833380920720427526268411691842320410357592154383186144 +(11,21),483282857642520353591670998229177459914246990805196517248237440 +(19,13),-6905660466994903141065199640964868556240597240481163200 +(24,9),7533035358484166210654282533907630637103060016364420 +(29,4),276099835500941970057790129288949281879827495 +(10,23),-96110948319825749647410693288777440189316517218826401167272530696960 +(0,33),540 +(1,32),69277659302008969817031766248627195 +(9,24),7329774700972284630665563276157660371503147389773269094031688367219770 +(18,15),13783574521532833577996768240839774488624573999720420213420 +(19,14),1736581391287217391197152712390838950562282491120977444110 +(4,29),58345414378552232992741203491093543822039716064037085881723962160 +(3,30),11203447427405714939606052724652979396009018256416856243962 +(28,5),13729461975896792664702575645350284598980882012 +(27,6),524315430631661929955985628622980686883777902000 +(30,3),4105218754137204140519381024165125099045320 +(14,19),38821653017488247334017220445198280214029868295398113998262760 +(11,22),1138955696519198315495921424811033827426542156269201042476352801230 +(25,8),381682048229710633148950490429612227202356658425245 +(17,16),100907948976466824305975946628523693158310244018550999496220 +(13,20),284676922304648561174599325849451215653917262643699615441433318 +(2,31),4444844880264214992576843685673543108814292723200 +(8,25),3398780000623130468638376379412663785284408688250117276590316085525035572 +(31,2),42448004102862084249311762358065978183250 +(6,27),2384462317666061133425190737865117066909744878497228407382014571683520920 +(22,11),1683412894953685905332478078578931283845462221298428820 +(15,18),4745659334218250556058536571832542046586920409019917876144390 +(21,12),19583294128569411502232015602196440146581374352960992785 +(32,1),272278293346792778189342772275711022600 +(16,17),708995632755020851116450849800890267200613975507036610295420 +(7,26),37806674700294551085188864161913688899629831042491262391239159819694047470 +(20,13),196668603379271802410101028952765250459318548626342886900 +(23,10),122996093334442327724819581776830503859659911799153008 +(26,7),15781737892001206376698314490387625521902807662280 +(12,21),-7765004930384790792112388932479300362613791569299013495255225620 +(33,0),815555903633318634479506213684642017 +(5,28),2816380098407968940230903496236026161132760489552697059792363437119575 +(4,30),1300625322393715747489934744962758508556423069248810926640518264576 +(26,8),-8414176927151274777335041165403136409471773284704842 +(8,26),2416853401430415676253910785116431239684337384268838128364464427536061296140 +(3,31),143334021626526345454319304547187204941803478160882694991680 +(25,9),-173979095768030294802065496485467893005869132558666320 +(28,6),-10608210433859833017911064059307303172622046355320 +(12,22),-10903926355631517689259752226459504519260992128451397654224338176160 +(29,5),-267179761448538860448636773098212066597971417208 +(22,12),-524348715853352656505310856792513672687134033906490578660 +(5,29),111723323323115854215094066580556601329906529282760723274479966874922680 +(9,25),-6542413782053830627353545910031326624741540868355677148537612767358260704 +(27,7),-332866736463812028485969073249817303222855866075840 +(16,18),-153640541619919762088762011658695267544430942360395115066583704 +(33,1),-4650894946375587748334138724489569736960 +(17,17),-22528168689134223371558376979292873281377028443718574925775440 +(34,0),-13557668306203677451070295358775142618 +(6,28),179086979529274364028483417932295785207759364409225209694351563886552755744 +(10,24),-28396200067423862630525279405917413205495829872120830685726583869272060 +(13,21),74188524586122170054393941497548837309876838534478575242120055840 +(15,19),-1095503027405764798199282218239727743645867793935022538798160960 +(32,2),-746499394102232918849677853227864143030000 +(7,27),6249209826507779800682110652988260620745805536594023056399970972677057654720 +(1,33),261036580082111343519690084332290992 +(20,14),-51033782773827669628788015048908460546432981562746740926560 +(21,13),-5526536401452737695437651357939598422610968543855370536000 +(24,10),-2981695366426737273133311746662743225772617212653933044 +(11,23),603751280079035444208732922578508141322400589325662409997889314637056 +(0,34),540 +(14,20),-9124480633282231012409888732419388164970478069892196417500060044 +(19,15),-420940880062723971945083663424293130006642629047384281854208 +(2,32),32147184487177693528642961105759753141668576756950 +(23,11),-42886603430104988291847137481938163672800141046803021760 +(18,16),-3172549334324280224640159138211641027608480516193872198960490 +(30,4),-5181700427017672649782766990732609951821147380 +(31,3),-74491566253537725861960106410044177358388800 +(25,10),71561628243952709602099580447088845233607726893662572850 +(3,32),1750453363346238630209851605908933959941595390364685307880580 +(6,29),11984778690467195447315078984314553881295423241011320305151014915285966722400 +(31,4),97175745537063623364776186940673138372538930430 +(18,17),717694526414948216254317566177271815708046151060647614328601920 +(12,23),-4012948072427834186805964507135197792202910464604131229012964408784560 +(32,3),1352169944827398255097914829144976268230732640 +(24,11),1080020121067466615690846037057816241043828131081043859600 +(26,9),3984800499903645222976290619305500263826497368960627540 +(20,15),12718033900486644114011794557653851766899449492668225919683520 +(17,18),4957974134340754301118529432284486475831730477784780628235708190 +(22,13),153255040094791524533820992143655314337052465967363774153620 +(15,20),263351338101110264087416694258378127827141497618689562247581674525 +(1,34),964060335649199774275783290570567960 +(29,6),213904527789900854977948855722886451997023789831160 +(16,19),33958187528541574771139495270470733119568623017582952308712884120 +(28,7),6986207445899223632430219730754946236864061227023320 +(33,2),13145166407940621320586617221822226540076780 +(13,22),111785691338463010097494149342423344361967740526584387460999428940080 +(35,0),226018084155759869626795531600533625590 +(23,12),13862030348961112937017386376064131775112731563356229915965 +(14,21),117787015453360655744658914088425515023905539907987210231576024640 +(30,5),5189094606429524561972862838712452325040402011700 +(7,28),864867714290702177427858959896449105414419658369727136392995340697798669417160 +(34,1),79612206898121031544627851134269804362240 +(19,16),99066888326737784781163370040417182017056344021410072507049475 +(8,27),1027214929762933643044246436361830028218746899604191237084461011851831824747280 +(2,33),224991312834113518149451107738561897776541905210340 +(27,8),184269647236076951264155233520337308549230800383481910 +(5,30),4075518191968319634536924940194997590025759816168137517097633252870226490 +(21,14),1480756734534309014045622688732300183044018228085940498055240 +(11,24),102427718619236026317645100972875556669395527526958811108667688195573710 +(0,35),540 +(4,31),27230075064837760573005320257871594493067807788375936927538968750240 +(10,25),17030524457182395340712605093750847662753372746120739314898600854599174880 +(9,26),-7650586538617396017269413482201208158049821919479100461322420174341349455720 +(23,13),-4195110766015378561326080143341247840052563933343993731560000 +(15,21),-34541695133611968505352161004460557430652184256916121279043620854560 +(35,1),-1365489506575501376830223358718494885732480 +(14,22),-1302882922846057639128892354569337060959910300060783546449798365102592 +(8,28),313989837010324979106346949776742755143555279901845072044788434348818806317205440 +(28,8),-4010630750637819881764484835567029120504739970229480160 +(21,15),-379787021619700121635029147678870457583434694079902351264014848 +(36,0),-3777973377340923983639283132834163200960 +(19,17),-22800932454658281895347786049525228465458809090215168900089341856 +(22,14),-42412451107159567117362313129692357705678893293078780972776000 +(17,19),-1089200035603187916192867822126128289110899819796401392887816910720 +(2,34),1526226732357751694966605231291523797917073124495520 +(27,9),-90557488804153925857731181803385905696452298817909983360 +(6,30),721528600419347970163133603876336845757039714801408006536610257952646320292000 +(30,6),-4299527933412753012225808396588749002318494785150240 +(29,7),-145951008839430172416351730739757037148799718405363200 +(31,5),-100593889231920423704907835439565649292181625566720 +(13,23),23185171769149186594898304839262176527564058818446526515071448128660160 +(0,36),540 +(10,26),26349021354922945015550074723021228507074051401827167085181438712221030154240 +(24,12),-362017949545426767704285479478503753303452349814936931058500 +(9,27),-679726539241302574371857222045216675115204698130767096559338019187377287717184 +(11,25),-133403768192803866738439153114984396566558630396097735647464987816568009984 +(32,4),-1821132753519782345653017889791141564987753781980 +(25,11),-26901835479654916655280334506783089545865574049506852764160 +(12,24),-36081263874627966801104429946095802692795238706040045168321576505147840 +(5,31),137487301212566103792986367590181431879297720594476559360434746108276010080 +(3,33),20456483447641235890721551755528780630172264934044882435476240 +(4,32),537407077848151254474758834455280433336921588667182344610659935710528 +(34,2),-231756726610277515954215666266457116646720000 +(1,35),3492928759057606680863156720806598352 +(20,16),-3066085057534105579320967251832858286503723103411937271299398160 +(16,20),-7864290080493714461741176937399200387209508047847612363838062560924 +(26,10),-1701364527487613576646616662799846215115645850763660218496 +(18,18),-160026383545603102601962752383921249123813082376577670376043153280 +(33,3),-24552630670687983400224102335691222005870077440 +(7,29),102421269287628582494901425234990211995854117487910678328957461099686937886257600 +(32,5),1946671857430280318131513471649021519541434050994868 +(36,1),23464603038869172123406520090249957099952780 +(19,18),5157808049952716010870623279363805805912344490674130589241510930390 +(12,25),1305539154017169846445435952942233659176138863210712847090679919313451980912 +(37,0),63309435134609849193825869751427815771165 +(3,34),229283896240082308747072686769102020015789328550520416801776632 +(30,7),3035945433768239474692477394955301525725679453620764400 +(35,2),4090689728340588749994049021216135304378626650 +(7,30),10554976743832563977487714468018582430142644985719903877560975476310873285477394820 +(20,17),719940188675555119326929237436347317564696725862370722222974798780 +(4,33),10031568224917603322309285602312902726247652824200720194430201261555840 +(10,27),12838564748989119687907810083191825326356638693176226667631082969538391531749360 +(23,14),1199245013827605260802848318683719855961128328499477136295907046 +(21,16),93922025413665664400800734646274014055912147618267950972296286350 +(26,11),663170323637680820390012996882295896721158726855332154460360 +(24,13),113398044959569439380458713388837639173173921107630367094910840 +(11,26),-135542218809711662947901950674509647556591231100017159570655658422416572166790 +(0,37),540 +(15,22),19852673565741279263990703033285708055064559478128342245987802771503430 +(18,19),35360011176500308341341872452540983994408759110933879081326376887776 +(22,15),11203346879867752417663931002317930979353859527439819289799172488 +(31,6),86164934436629561090516763408136923350547290890644030 +(2,35),10049447088937266804616568051776108959982584597735360 +(28,9),2042956300219535443312804436170584252696651810160790163000 +(9,28),3310389266643002646239044130902341437668342859299922414327699200213767351133945065 +(1,36),12425611477969581872044736989655341515 +(5,32),4310844248727271729931145593260897589610219548753407543458042709005558682500 +(27,10),40091714689593390331079524355509589709845253874181378668098 +(13,24),-6547792789069384160267876229306163755943135898750301629846652616519672548 +(33,4),34106772071238381009220997174158141926662982873600 +(25,12),9344691483987186065208081901941509827609022154249844357450830 +(29,8),86787488276596305211004559890451021618383784993377994465 +(34,3),445961789388026233965439242606938141103205560600 +(8,29),74659259170751929123801021538769004344249122202019163829195953871911714478399163440 +(17,20),245276731382142530290080449501500340907195064887969446561504318331747 +(6,31),39399808353444241849891555378012036359820880801831203071850073055569827325117040 +(14,23),-30445302951743239434907664245191540376253713304207643574936992948982800 +(16,21),1460860809808378780590649546440567967352470697783035653738024388905600 +(0,38),540 +(4,34),177649744373260294518636319613616005800279191824474521601400021726309180 +(37,1),-403932572440165172662817397815379153610530000 +(20,18),-165579443344973262990721708608502346933971208145895773914454506617200 +(17,21),-51048734232984242901364761089967704470623244270875793304221774100234760 +(18,20),-7872229917214595704177654027067464457245682836917838278968026561177752 +(14,24),115511938894457422607275952585976050771040462595274865299395074140411864070 +(13,25),-13464622241733933572907607885603960150776512002832941096818922292251954062000 +(33,5),-37609704305638670963370869714042568748489186311679872 +(5,33),126191349771311881099515453112126644968377401046986786147767439653821050740040 +(27,11),-16188410372510459389021424408019945738411424606903676310072960 +(7,31),959424887509629902348497742144180016334858796744716165115083701074213264220581002560 +(15,23),-3018966445254938882964458683104264044067986684497948759088170551355354560 +(24,14),-33482395654201781253332519352547114653206968315914532328144086560 +(11,27),-56042812054339933722143881771583624074253549055961970483149364629611858134490240 +(25,13),-3028265675638036898698889876527377010907183025140399243141557800 +(16,22),-431477373984871283942718162890626284019816306448750708933184104993686080 +(38,0),-1063440647220254159080460659017613615615278 +(22,16),-2845022643912841021030197722932877320145066608767277854328987400490 +(6,32),1965316775187260766921394503523812265714569725627199200054277256581021848549014530 +(8,30),14446023867248642171620728044275111007400265009336903409444547773001516584746083651072 +(35,3),-8102543273917971123846798553890765088341595255680 +(19,19),-1151748016342133323550038013254006952259819422273629236946788911654040 +(31,7),-62895229092787037783450631108180354732102945233867691840 +(2,36),64316964774563586972923338320933402530469650465757168 +(28,10),-936863591931423463179856685256748476909090278526249812070648 +(21,17),-22543505361043644659392329268872136658466319715945418180165913111920 +(26,12),-238544098920481230415060280788280470525521108516510507970395540 +(10,28),-5440689240716037025049956145710306473934317409224708327433250532789774594924024120 +(12,26),930038390323459392272412669260923672717767388378794957958704837606925463281200 +(1,37),43433302658547130062825101041754368920 +(9,29),2954214666445189719694491062591804893365347979365496378091490361321523661313516626160 +(36,2),-72281926613593212507441355588242371612760928140 +(3,35),2469900683607657032985076517810923778782608874991117327007670848 +(32,6),-1721978780497611206695905329237410180476384162403481400 +(30,8),-1867849231696774502410450103327831976639044241805640464680 +(34,4),-638367344902762379037377722450531171965912498155700 +(29,9),-45772354771728432624902937155053550159644863100316678096640 +(23,15),-326394095485816625128286276206542536436224677655605805418084032448 +(33,6),34322915904244916062387009296339313472898036062587294200 +(38,1),6965201817925427293659342706691821409884432440 +(32,7),1298028064160998343936592359217110902153525104967011152640 +(5,34),3462698812941214755221287666097270733256532431403664978986497809347467576496250 +(36,3),147252002723003965114158059626723463739751584584100 +(27,12),6025253203910234633781547048220365944118395629532256185960863775 +(4,35),2992907356566420864817892898122201455588115773119767095713353576934770232 +(25,14),923322439460363163861110136152449599148421673299230548188064435630 +(30,9),1018906969848680882516988213153317496634027772996821121429580 +(22,17),699048423083828868943555463690650774396321015698535487880642001074240 +(10,29),-9690896456551722964662572676028540048165104651659358325921256851905264540251008946400 +(37,2),1278513700616446432704704346473439281313738461520 +(26,13),79931106576797553073370003273879039429162897459406547898723346120 +(34,5),725494578881971848595730478911012523615171603143235612 +(15,24),-1330293397529381920604618454917400672681077026870742436575576074464633669675 +(23,16),85173918011472840304113128869176408046299188019614017134596798059320 +(9,30),1466688879501288758307793379616873032142906824989847860036713969124144625695749812462424 +(14,25),141275395699145604938543397138557432068117829325482636596073300837026228293456 +(16,23),103382305941679286996929046454720720334468551253019156072109819632577148560 +(19,20),256426754018896045346466249897578474348301185435102217961137376579729215 +(3,36),25619904794018047865309683129254009636011779666519670585200043415 +(0,39),540 +(18,21),1704326146066814330973753605370195760256800530687064580492950364540695500 +(8,31),2343968046202515236268370078722166427658841966422848016143390173898289831781785283892400 +(29,10),21720597965853841507734725985446773900516068780326594358363402 +(35,4),11941151836966419448450773888521630989493583850990590 +(2,37),400604535706711275060654862840596964467677357841580320 +(39,0),17903558192552851448872886964421154685792966 +(11,28),11071147001859666311598688535746844595121821970455977565699283443276766148209385391 +(20,19),37470879074124091328831493301367165059520426000309556592140739349974680 +(21,18),5282199637690462053791039970978762197668028259823749971730445148380992 +(12,27),272412453128178179443277787982008189027592231845100635731978010570893050173484200 +(28,11),391516539985060647931151431257701815101228077941562875376235360 +(6,33),90108113062822656325520879905806446601320747929307916429263886497728009793062170192 +(31,8),39995270571207522143901636625390583287045250219118768694755 +(24,15),9391119660607399882703848016555872371749514177803821744460411252544 +(17,22),12103768776482432836109811079142664050191450132578301060783448984324677500 +(13,26),-7016844824109529490195191365137576620320849829462204689393116016669380533732380 +(1,38),149285141509194287694491784585926390316 +(7,32),77781008655588650325855444594597906109224367439484176693570342967068498024523589993170 +(36,4),-223244436931357664245421238105161556937937752919916840 +(25,15),-266890326063321831041769428948664181169902187735110217442507047330400 +(0,40),540 +(27,13),-2086336804838737356875347875137101021113360365751689961282334036800 +(31,9),-22543263057218288209812169290141525166911303792768301937172480 +(21,19),-1214086514046997206259411387786171503405870675939893106786292504754296320 +(33,7),-26692545444104374017970588109495710091407669593087164553840 +(38,2),-22635975572602839987534988551607604416669533438720 +(12,28),-115306154859776411880190672727440423435425590480631166578696695068377713042847324480 +(28,12),-150664958305844434210060189717534631728479875708310726903842424000 +(3,37),256349083922674270100415362424860343783987340946712870786336593280 +(26,14),-25158318662890350071647370306934767958858167647702955035415627043840 +(39,1),-120295484990259616613307239712935602543583752320 +(10,30),-2607734202797449061517050324702284961170784142601472601065858617120927564320598447800480 +(20,20),-8400391702417860049615874854078647345184567930152432666185959341681243840 +(32,8),-852290880578357174798574855475200116411907010181491377160440 +(16,24),5960449002011409388125570874721490101218702999012682834675581660636346925720 +(2,38),2431198777536867866454394958139387017213502941267629440 +(24,16),-2519510586003526445260687587365062134645646391600494749433863349347840 +(5,35),89392046649074485717083090566119808098455880903925793752613323357836148478299280 +(1,39),504881895259127879819474383903258197360 +(30,10),-499845232842303148169556843715489005852841517445552113330277120 +(4,36),48090011791940427167837618640227573633647335485465512422896942808387365880 +(40,0),-302062523072910703988971010001175955570501760 +(22,18),-167155504634863262622499850929165457435658035105605996446893153337085440 +(7,33),5676692722734266879517261497822925198391797726662349564352026443171298037725079596532800 +(35,5),-13974400165801804977832479185297038717790904425103427200 +(13,27),-1152668712623569481709303974434093449355876297992657820442606954592149304412300320 +(14,26),52395074489630076502692718912714423890159965712495563749350974593449852157553280 +(18,22),-380172078682686714123222243246616019392001302101610099608066803114438468160 +(34,6),-682441416304473461281552014761075423069171732793795740160 +(29,11),-9386007557026771301373444839803964674530224753117859181324372800 +(11,29),33790108818524198715356343637329441944010383763283735168568252783241450939409819682400 +(15,25),-1515946292487072816375932394545059680195637889696204060520219282651425003165280 +(19,21),-56391114649985720091009630009729894233724588699116615374092781801536093600 +(9,31),516438273627717769281735193249341442206096147108507044263113608737886099043433570428800400 +(8,32),325952352065189246310291542363784410996022522111841598608842072095275016754054811000773120 +(6,34),3818271354576911949352853367884426526459542480232145569909399462988051055026012117440 +(37,3),-2676763348395761112004795589097397799020086892573440 +(17,23),-3014589434163453260711761239580757320602398553982968688116012038557741235760 +(23,17),-21446447642395473397753858791357327375896584120866735110857667175134400 +(25,16),73635493538633117002883635878584256437643516010015382653685908001788170 +(18,23),90367558414338644287310083859601859658909193536658663623722963158105621675120 +(33,8),18080031800100908577816407032038271111354863780828868401018825 +(23,18),5240486880936530678113332232469492425372444241376146903762306019216934380 +(37,4),4171442622112707520619444709407918314180413018227550750 +(11,30),21006847171556123319952486395561450022145334981007722107890409430857076725829032435719218 +(35,6),13537288106916086600402736854079506489332915867466155544640 +(3,38),2478270448611678037698728658803527778781525313798357643212190870340 +(8,33),39500933859641370725552613920135161444676654718803390186742977800316312960224799236719398640 +(17,24),296419031858084134520500408512652618618784300115836579590814276819180427664305 +(14,27),47258652734884356667904882386237453482930455085356686764557384934031742729068800 +(28,13),53878255579879209116395407351768604928416408787826215572015099903920 +(10,31),3013670166371823595061563018091757753218719917219452447119295433247032655708842305419968000 +(13,28),1379695480044407520911642876316703398430344149380192338175294438403687984355930804225 +(27,14),677612961367216982998460985740207486374025989706642044783361303055150 +(2,39),14391670653332294755673569619384961085407886364274137280 +(22,19),39092987257001076766580167739736422453680720369275272225009284948967374200 +(32,9),495908138251531976605487106226993988011883374445271390653642580 +(24,17),650614497803410935436094786781119796768414439834112991703812460123891788 +(4,37),738684109607319202931074793752552325443370483567725800944404851977650707060 +(20,21),1865382742979223620840567163349983603489841696552984632243740832374082879000 +(39,2),401133407679151733181622437477931347404177604963750 +(26,15),7493659862908503574440227345764984016226776521155439911944070438283632 +(31,10),11422170345087356746028837345115301919452809748924269149648334030 +(9,32),140996717287889011782884237419929456193728682571668646249405551393336750069885965739203530322 +(15,26),-336087008022928544912560243488936758667955769827410917444640087505491044515141050 +(40,1),2080751985584275471089456836137918593325567852260 +(38,3),48669969605637860420289649685285960718179004868945200 +(41,0),5106690764469570577206648176363663604737853402 +(5,36),2178295730961027300581319820332857520949707969624541266194005357126371368579442765 +(36,5),268801418435746248893829829828556760858313779912903141012 +(7,34),375953607599954470238482767925802182665602113223115494824010954239868729129352146164099230 +(1,40),1681180943585017647205653411744474989760 +(0,41),540 +(34,7),547046656022274558013360973223288188004878127026779497166800 +(16,25),17596281391598685234408598679812029696013138063631322332661745699951333425227208 +(29,12),3731626380965304750473789626550466229855461705465528050058275615625 +(12,29),-183843829284308047202855362217448696261308504861340555865930686379562337617960646360000 +(30,11),223152491321506887781142454994182892184859649302327068976312791280 +(19,22),12428937617422451952004944381379906748919740913922059057005799174942691031202 +(21,20),275219015418556838558795282869344011575548880714702935815711473745653824339 +(6,35),150264689005310459625273720708436370215050419401522575588273637667748695615155184244288 +(27,15),-207939341788379762636749828665663066425063070981410103458711477047722336 +(1,41),5514997680705889681128936245819400611760 +(42,0),-86501704597629887114646803780516980941022860870 +(14,28),-16114690450012304231998380718232263963564451168737134312842092782378687552191050564140 +(30,12),-91588637340870414431376954833727483949162782786041665001105147117760 +(4,38),10870106491097549305866941281313604920999997047583030470752232938519455218880 +(23,19),-1248978133913108702824478570675270852416596691850990569943953975201938062400 +(9,33),31320576682013457887359444719781380996460399767048169622098897775377942062783229518987271816200 +(34,8),-381902902729569638926506797708564223230162355391282474992650850 +(20,22),-412024106513121133494648074100319513357349163973803428629413311698982420709000 +(28,14),-18048597457284896563790634842224345608349658071010771389887405829402668 +(21,21),-61712325133800107480516420603028851015313449608094032735584007760754205524360 +(6,36),5516056516372953533643453883071405345344541644924974503284849171028942211150174929159300 +(2,40),83181709785836879076842523373714361015986233313874947206 +(0,42),540 +(16,26),825348681029917156347734548093449066315465103262818757764026121033838843359070400 +(33,9),-10849946335159370623283984849539608651917746759125747075868836600 +(13,29),1358435855272086459877496423365372176784063564248095430253561398443041505277548454938184 +(40,2),-7114651001796276637721414192175046444797327979518600 +(37,5),-5163702488517028449589934756089562430412612354031044972152 +(10,32),3574347982677949515819458568032595165796218625030347717056859732658804285792534717460126725710 +(8,34),4227545443095765278596541957225107618924305224158082116946097808648629630528404249191156920408 +(35,7),-11175552497813956348599552574416941668458334274896857626633160 +(22,20),-8986012758233761107154343053050041972984359020224873975411427130019372906676 +(11,31),-2975983282156353025721691621715876816196854236676029369004931994551138080758522224578128960 +(24,18),-162626427572307550516029869654080704126814728037265908445663134112226659700 +(17,25),-253416075129161178705405389961593663467879020974059880776196107758482773002399936 +(3,39),23183710734359195003791821285056627890054551845341067399361431689440 +(15,27),98260375532437352059482223824500492824231803936063897208385848081782719966598093000 +(7,35),22750016028148828514986532485754672021064103092139079004147014448404241265753672631917778616 +(41,1),-36042416611425008752914244854069774184540386047880 +(18,24),-15598198027798829340681753723385748942170223250218024325424481400720634423530210 +(12,30),-98916613785573240601491532527391354472829540292839406059230815273322804780665274194789632 +(26,16),-2126450208839160105640605136194043320966398079153135443644243652157476790 +(19,23),-2841296701719549347586699512411155857318839298005052599067499263928158507343680 +(39,3),-885132906957418062397721300981592057438356493582496920 +(38,4),-77906649396290568365729686059237177675841044604070875500 +(31,11),-5263869431235605648324377333920487742176849169455576550707247088960 +(32,10),-259286009732052557623003583331601680856433962986067675107354868020 +(25,17),-19511177438322044799460354355394901238998306631155220358234909726610218720 +(36,6),-267940589445982023079745104476473996210085250444349270447520 +(5,37),50254603587317989778247171922181998796421323438704828592748195110056608957213428040 +(29,13),-1377252504276129778808924335851449546510164377198263994554714240864880 +(4,39),153545554045977221137477961716486855980860231392758616027204909247692003095360 +(12,31),-2734454893870104231420826905848603197611581888625343687760752759614970498631331884264160240 +(0,43),540 +(11,32),-11951953915157222826610853725675028377184176669359647294959659892114297218812369137522721853285 +(26,17),578346869248951963799884199870423498242423144810021714188091865847001954140 +(15,28),183391307481186859012168401720744216388899809601257083450076068877938289030585813646645 +(2,41),469873547378672603128485212934996680163781736555529851640 +(39,4),1454306658111760390467356551690246340947297778764335923805 +(9,34),5839335523981254626705916234935035142333953069726963237461116160760193570678205380801172089346810 +(1,42),17832879785145149015700092580243251811090 +(28,15),5704484946436402431801932028184664325061671980178791762940075653173178184 +(18,25),5179855176722356022831425686197982371589046268058166044117072711914661043432459116 +(35,8),8034351686366204299922282585909067540761272175561377592453011860 +(43,0),1467953723939003006952338038390958081033742210819 +(41,2),126291597027724852838832972325392456116258730405618270 +(37,6),5292208968190686840583363793369767045036980365686934188868850 +(10,33),2069665807450092527062831056691921775272746303817555301281202442693974560550849743727887482501960 +(13,30),554933465621499702526771720481420968570056631640046641081326622631378745554743933303826030 +(5,38),1100706178572394129103566133933855724473572255811606548859550171589991368900526852790 +(30,13),34864955827123294177412319911038044722530494868205631624834983048813940 +(14,29),-11194371605998382915455365851886198475390044285216651712903370540873797638444347916614160 +(23,20),291706263468612976789027287036795491814677923493028740921653574105240495650284 +(27,16),60687677120302355224669539261897961689001792276391486232954347450258431875 +(8,35),403953297809439789588332564411415740329354460394176918747342231275449740061284022673697888532672 +(20,23),92387830912927720459038480619797277010173099044031393980216865489856670594989040 +(38,5),99072150249428817438418781008990616783340091970557278751776 +(3,40),210156375088762384856094635306728432748741642418779239006939368336396 +(42,1),625172264124532141453162827889322683357698362625000 +(7,36),1265478052817091268145911681683116336000458307049629892705829399891175998904606722430838115260 +(32,11),123245540312286914169374171688687956814913447799238428817539210410800 +(25,18),4992729735824342782943197508546867368380565804244174401943241026627751156330 +(22,21),2037984051530371723036073984026920078815319562398406033678315127415065387259180 +(21,22),13723309012580532162155293086715761570568320305326940110764772877018938199434560 +(36,7),227614147039084159532449465449268695215381162783048139312101400 +(29,14),475620118544293421777091734534397216313618974751165125373064712222320970 +(34,9),236170132056843127100217523406010157455702473949487470256655510580 +(6,37),189621783372321794151328460894193166577965512317748561771811189027435691975629714974592980 +(31,12),2228643334402555376873117844185293144875407528869066554120773552315745 +(17,26),34731633398366640487582946142753280472043040650084040616940343184815607882717319000 +(19,24),579854049429466491694294987394243661419917538401870692165028690779624761788243470 +(16,27),-1842905993140022978082644724233642719421379940324881955161976572391823586721006053840 +(24,19),39547354938761589461368245938312222046894396905905540960510680554008906549440 +(40,3),16100772034496204551296498275365881192237390129714498480 +(33,10),5849018682925792876011915609054318749067906286307726792778230298552 +(3,41),1848389623828201868238516148387577663923161172328639560214927295110400 +(1,43),56867950628271842618884080989299611914064 +(2,42),2596299694785636082197815651468003340698164092138952513920 +(10,34),830866460737292567577608970648114537348308206658178271383841744368132261668569668435840759384319680 +(43,1),-10857991697956505735224972922193881887862130764021760 +(23,21),-67039430910357925347852098330771615009392123554471583241806853402805839266744320 +(8,36),34777722102602674391873395795503332496921403335955565583359383870351514294231343280680375725881080 +(19,25),-142185417392398735557734810843684085923547707115045539179180061064802733207589763200 +(38,6),-104321611313255622364917711626247658856468878928128331639662080 +(9,35),934123416488102170851393514961283133982684489548854884697987404474601564321958173222170182071287280 +(12,32),41535009544850979843127584696572672325704900862696480274418392417512071678516095453376575880880 +(18,26),-1270431959201654951420119510268259962351828782757230490788188370272394400721290683680 +(31,13),-874454637352415758516577844027523106921773949878440914700670039276508160 +(4,40),2085749873443779046064273461672601559115147929114049764556640705873114978937216 +(28,16),-1712121591802310189417430111152051787056145987565842333029204615175053253600 +(37,7),-4622582424767894315677821126392011720501740875610554570305953120 +(44,0),-24955461860862194528922856316406271721834715796608 +(41,3),-292934589465388923296586431572494236096237626631175264000 +(5,39),22945655982724287566909974983879039020041235973265254944800383247441546398267548120160 +(26,18),-151591183170516650374255190342767636527219566542714776628994782669995019322880 +(0,44),540 +(39,5),-1898584461176409961404198892678587372119017022887585390798848 +(42,2),-2243539607263052835071683174107325967929700769804688800 +(36,8),-168378540119360916239766405322174588027409799104967660809826061920 +(6,38),6126042814751581343596545799479803554098569172967262063319335955476108369009753922980948160 +(13,31),-51487000550796986721331680326857076322793583980478829562284743490809811382792347413792616960 +(22,22),-457342140736659364515043232090022631336889765579508228027840699411600085801545120 +(35,9),-5115791959457584714330081436120415157698928106732581504490317378560 +(16,28),-2044030743666455197476259909934517524508940761352354692148270960304178889126788522507552 +(27,17),-16945435865377072275839962637892218820807226131194586117353165083251934325760 +(24,20),-9399590451817507445255533761361001099999078534064562013023455856662741163512180 +(30,14),-12405801975368168798382233539394758939516567150818607690642846200975614400 +(34,10),-131161210019802873844569402582418130201644519174955691432808374301344 +(32,12),-53787614071318673166695969247469804190315255822038070986160389874427840 +(40,4),-27135667522861798833907917735387571551200795940696023547120 +(17,27),23837117431714123800180485213577390579063428814198870802128958141236543322549131811200 +(33,11),-2865289932596966554513337700027301000036961447498797783707220039923360 +(29,15),-154774935888354468216225800879424445982530354735643290076894363621038078848 +(20,24),-19937311491885095446229983608487469682203714286166386105357203021829627868236492960 +(7,37),65052441583065340774341146388742940641830834836683829954535284896972427666171146979354912702400 +(15,29),94337438125976248880865686688866301274079848273902592576158176147517566779041536893998720 +(21,23),-3059977048209693330207951626334558912485679562409594292925530633225549640332663264 +(25,19),-1240038137975632220411948257259340529168185673496430485517394403921561748238080 +(11,33),-5264997544318423304041258845033966577327885505810303033448452231048727072357567651915726894641520 +(14,30),-3211704297989893802256399410980168870059167146298228437701044696230382038969161214244970048 +(43,2),39885503778135315434733181830291727807794820587235887630 +(24,21),2192672101038382912087709203641026140190348400210108894799891731345739410947030760 +(44,1),188815248727002287041406438350942388208618501371811300 +(14,31),1185616618655189995013653430991567240243461629846561051925606386946580468717148781916058974480 +(28,17),490834149532005587352827321763954484596572747903702932066609197370871632188060 +(15,30),14954078442505489537218592181218499043213613710958770665642066663390395148188441995019541610 +(12,33),32798370747309849016242661614857273202844470616621329814135500887198502721955009316981334870279740 +(40,5),36343056505901931649117880097410297213919493974975204497334240 +(6,39),186598775166408621364203268843902455162117168396009401327377304036494993918564768452151217560 +(34,11),66169015138145896522597283156052879991915338386441431971267744698527200 +(38,7),93624507572442088915107216055988345263387975306150949903856124800 +(9,36),130382408662679235061142612790325003837502189909947834916054926571901692349394342885505051471592569550 +(42,3),5330595073449751130634387698224277358706663466617071263700 +(16,29),-761354680498956862234432420986394434321776176474618372763769837196440262703128887746506620 +(27,18),4551319981400246180520410248322583881800563343363205067597548966623145564870040 +(31,14),320425419924922433219328158839670233780822829915386069843019551980029106390 +(18,27),-188418615331939028476347214869149073319795566821784353740501846783336006771753662731760 +(2,43),14044598399527282476602244110182410395732808838262282025600 +(4,41),27292562611525944133333997757301935642045243190310472229018029031745270614916520 +(10,35),257036568959454891846634890194931185203975605027037215127445447313057142897933289212725701104550766720 +(7,38),3105025632947911523048772056098290885222958619357838256207945873534565953487748536463196277903940 +(3,42),15792964847975953868728669528627136108422888853475795429231822420079470 +(41,4),506101043299118546427255445935700049734273825680547767298605 +(37,8),3515989177805910017975762865844946972602255445881977208231610912895 +(39,6),2052551533501177332560264248989778455178526457926053482210617100 +(0,45),540 +(45,0),424961772585328351618475165212677491695835610255510 +(25,20),300303397650838110070355001610123626211209523102882138490131851460125991048086900 +(20,25),4490387154694345097890923038760587579101443260327936256990947348363455015566891020040 +(22,23),102204984211879524308167079585606732153826415169165813282820826704967026446901431040 +(21,24),673138880627882472827057549931186880609272470760872952100147080104410528829411143035 +(29,16),47762841914913008190291970401429004736774483617045342509730960717607981652495 +(33,12),1288081273837013575374452467488655724012183385248698896055741106017893690 +(32,13),21739361644824149844104586176599697817726546977724119066584702617211808940 +(8,37),2718797464188580110899010005973644649341242989621253132930985795146498014068416483158732389422475640 +(23,22),15209900118912540194545886443554872055368513068886666560620533644526106905735203410 +(19,26),37036710628320260935190477277648559838110107616802777685060397251776014029744318878940 +(36,9),110306726551843195002818902190231880716974505427845525256330905118120 +(13,32),-237653441000946965530810799941745634638590703400388842878397271564628465791945409248211560765830 +(17,28),22619003933645912400103233576726891287663712163593362808738676495273270040884415068743300 +(35,10),2924698267795279322707169641924732992308517432162443444870721720320220 +(30,15),4154920000480619616849556236481395060974795762053417395430839086064768017100 +(5,40),456323446212497159348060020778217900414655138259883832846059360059901905338662985149045 +(26,19),38483377428294198205176182649466874030386433776702440055837433010297963977028360 +(1,44),178934919054038019211121592249068890710795 +(11,34),2315182998766358410700772955337842503967716800919238667042267440512207072654627281003240266950055650 +(42,4),-9435277872135023835184635805327772342515994507732042853978420 +(1,45),555780619894030135895808599480741035761768 +(44,2),-709583091055846390017326349426721433263627736548020136500 +(9,37),16089817593359327146711066936884091444891440638140706450626506785220764398955343420931790668162564483488 +(12,34),1879568529228764319907663040540031220993870003824456680821353220745382909599095365775624041955044000 +(39,7),-1891356777902431805100848830800196207431943672713008818648233432000 +(14,32),1888611696961838581436515420148863140029940133844842305225632496586457873800380134336443159530120 +(8,38),194302200955211267320964559583837160432121928581176511986243808299878496202079157484375541913040553440 +(28,18),-135121532815614690971743725846576501721399746538182409482556058214446216264953560 +(11,35),4234120648772887426206766581225475848688387384068190397411606711256795305066636741290882805172065055936 +(33,13),-535916915688847657531348943795503832358237788714504972525069771330842470840 +(27,19),-1181649832524409169278338229111024061721457465797110667297697419349912452980158080 +(25,21),-71206338889891373086889171743992483191703899027816476286873881988619288666477690000 +(2,44),74435899004214004027069567358383915838842338486160548690600 +(23,23),-3421982940991892870136514645744718303467333589032893784772153484639502464732595311480 +(21,25),-148870897487173970232232070467188781734669777974276072527949493535680005853620906596776 +(29,17),-14058022092932371688066633795154804278441668397876219650194632490382647890226504 +(43,3),-97019161878062501555610651095494478574144776908488218333760 +(22,24),-22676797129142604793747728610539310826881397190751608095643408549897961687920342345360 +(0,46),540 +(3,43),131233970529420435491956395504484861619352960183174318305310630347345280 +(7,39),138198217441969334486372027847334675588411786341559086369776438516282050288799213880266019223222080 +(24,22),-503781995691113620211975409038642848770883433309934202950501483419712207356924373000 +(32,14),-8198814769002158016943977722280881694521646971343880252793552134043432244120 +(41,5),-694943664170345864493233900712250278495941653978438448059959120 +(18,28),-260353222981564568458173825812575632708572212314656817445469082306519358218264975726424740 +(15,31),-17525159996191103534438359638706856121922053727109759053571168883843217302657239666214375650880 +(46,0),-7248245018797938238848613223834821720683204406436862 +(10,36),64598969399262471291891934522917814876111162468087472563616135950239418721858655293996070703278165944940 +(19,27),-1997872614443088951880950118456496769245774515555179379308442086964819768012856178059520 +(5,41),8676016410414486055327132991364908320213276997268816740414781259062831549739245068391960 +(17,29),5258041757546503642208640092974010201882995396665493621837718537280229028486066246186878080 +(35,11),-1518366541891591457138555772514280230475676723145415660914442154706910400 +(13,33),-163208218819112691891167480749587433147796036404748499458585257339198173399099622019294064347058360 +(34,12),-30618908589155000332018165833089607573587897332507979780749106122621818600 +(6,40),5374737646282269701103630279928949084710216444310549365530163487677922601370742472375060588660 +(20,26),-1103070113957702243559171403018217905193139817247412737044384705446768012385173350569200 +(31,15),-110402250404769508738919571820078143074893350426846200556718926910750173421248 +(26,20),-9505026678100289180155632490449326461078168812941922911192526519369412130709857196 +(37,9),-2368072593276551747427962203875216604224584474244976962386297959716120 +(40,6),-40312227456002292184225910266877294017569735856908203316233450160 +(36,10),-64868714786122681415803770239475709468986633305725890142302015231851820 +(38,8),-73166735163082928742159533671953955139150553276410189903337876355020 +(4,42),344561897734287388298156967763565187920814198543177181220633066924831057152551600 +(30,16),-1317994258437095015444057656602047386953511897480015176630308246420543522889090 +(45,1),-3287289272585435584889572949883103682507294007107386320 +(16,30),5140939920277948838135841424303030735100553247050980076535825412109622032132067146443077992 +(45,2),12632348547463297270883128709913257448786350641243419775410 +(42,5),13275049863083352584948271527659034384226196908336893230781207604 +(37,10),1431478159574087683662811172956822492332533076917958278132518378623498552 +(22,25),5013951119197984290908371264849520176487995682045181546034957815491289002997073552471776 +(6,41),146791619076800764999908764860101798543792141292243370414660495529656445178204879637360888496000 +(23,24),764470557086195772430461801021028493464164406449449681525882901342600531913389188969757 +(3,44),1061703087895935114779193373591736501330161185794320131570617283132060924 +(36,11),34631546390960970695704910502298527716473119422748597228873084814288258200 +(20,27),169283836082444888302703756789352881029487307613266176441386731675224417871966798594944520 +(18,29),-17453046631960666411642250538537670051536638335600914730154457011615034576006694564605773520 +(19,28),3526068878791547959092332701819490881689507871753203215283756739695587352623219795424787155 +(8,39),12768962616674072209102122753444657819818599959708953409591021529224897128199138704833826905921835251728 +(27,20),297888741695035818803164449030205925913962231905042957458369437351824893043415766207 +(38,9),50627591493890139129203874879932711461606202459394755077734818932442400 +(24,23),114430880005539807028239244248457614337996193826349167474704457920080919627883031812120 +(30,17),398229098009878503063588278982558438567114866120629244770047069830227474238919960 +(32,15),2904830752569012422925449902786000495530943003712172607605465193202682732847488 +(2,45),386804818403695591027374546568614564392529312822934446773760 +(12,35),-14149643662418309734763111652081725956519504371383513169027941092863481255353822803538571596677882790048 +(43,4),175833192751019089675713884031923052838572631925032795161375000 +(25,22),16591974007854619040447535923271500237131708228148755705213348347216126022322705498340 +(47,0),123818187777884752630825284148944305289873373616148522 +(14,33),1004218036806165251275480078250281474512668688665112059984436763341965375676810731325875020124704860 +(28,19),35892972835752742596144251430553314133473300643784548006515184773591960866798898240 +(26,21),2293551467054954168549644848224432291711771189470888992433622243185063238306351430780 +(33,14),207909990278747231875165140127868943053647650289457562591048786818294474337420 +(17,30),-1589029528767504000232939820979703350651475314603876704197914488248656974594542025229183736080 +(9,38),1774525931420229625510144089131028980612744933565186288601634439113670537771536582593755027220421150025600 +(4,43),4203082623058225233774583234488660292309693533792055926002115185176859869619191800 +(15,32),-16827350067097511531611762691095187581723623025723448803715029269501375620808724303367901534616065 +(10,37),13627370769786737412583439530859556412092958575890215214680803632653255443225580797494546643205258366117680 +(34,13),13105696745850158245811304982350054460542781157038608499283609259169187531040 +(1,46),1704828272634317467665537678932098773801420 +(35,12),722732903391013406802853045990630052578394209986272977880656209817219759005 +(11,36),2879951007159498197195440551887650338034815447255340803588666560753650402061277654661603126777521561512145 +(39,8),1517608797919525554089461478600375394698077836225903234837377261479770 +(13,34),-30382219587487216220664996788412286286553236012340559760245295423126154893110175781082542287737788936 +(21,26),34678010602343036484190122888539754121443116948300989086891896557495363659429967049847150 +(41,6),790387440099137881082475599502179254278828215451562783774116820230 +(16,31),227251968072933903243906468442242911780719404495430319718417565214704890298615272813298490843160 +(7,40),5757541518210410033766566899368832091511910089713304812358971066696182059658939069006216122151747950 +(0,47),540 +(46,1),57296652247900577126981636863211782590623342367368869260 +(44,3),1766087273356079723511969563241311209505587948388762671775400 +(5,42),158017741494932385835616648002402150877450184225079938113644254995200754711090628783918330 +(31,16),35988116735799332539328998169574009002018606507449888906319715129026786482795845 +(29,18),3967112590913942843050230217175566893638582622569029491578560813619104630552409370 +(40,7),38114625852871039650980446786793112101555844193245793555393161819240 +(5,43),2762037614135862524322845187830652543644376896887814522280365920001523764275901857849338240 +(44,4),-3275542070586615326818871133118213106590782366415577665037475840 +(29,19),-1078491372909914902808701559115410931213688021676589566921712484156554949318731648000 +(15,33),-6746058744750981695702806488832190062633287283542695511087836462352622270101424421002190082837676800 +(30,18),-115201380591030419348254558528757635950523006465597527030221068629586852996050499200 +(25,23),-3812580118731467326485804050236036266409484275789929687813202127569960292067613409834640 +(41,7),-766294123376248991029963780003565045821147979609269870844487496512960 +(13,35),47653245652421296322341143396757741272605145339197358267386877020023372242868247173314907489491388705152 +(42,6),-15471723998194414740591159171156692619760012860566782937614218604800 +(27,21),-73217177052157410174111481278496977590448613588158916397368417619156735046913226530800 +(8,40),775644979520453242355803290778006703043161126473618485567538253103591743490775205821943731682233323448056 +(20,28),-66517721719560482942612722363052792870141724805603543420468271551140786673203866311955129760 +(16,32),154830432629378280156868229650128927859241709115485209197409205376049053446669943932333305747936160 +(0,48),540 +(31,17),-11160612230163852218167181246726591861222308726958065245644636954396993412471117120 +(17,31),-2760433485120304033095549759591648889387024650801616706692352704963810474139946171437002520524560 +(24,24),-25764675344481357718351972777211739382223172468995752964634717328353601977168242573491800 +(40,8),-31380175797136732911872876315497699353535581151507090478797178294615880 +(38,10),-31436776465768682056248610924738725597818680678569217499128832132547013440 +(21,27),-6848146523463069915597457504823688137330744762245495167541017368201110224024909165537280800 +(12,36),-8901810529784562865834888150850610042959438615885682650028824804104897805844827398348123753516738046232144 +(43,5),-253338635722354887805076182208944857541804139805832049498259392544 +(14,34),99119001599271790877840802706675780985221998831775318123330786085215330421812332179004127012333084800 +(11,37),1310552377910746001786197383549321845677731680438388206377854422525414180775778834593816430387904337775052160 +(3,45),8370802832487439752607225759717263074060763268772565530518457834267896128 +(28,20),-9240899225360414073777055892197048366884108703471027020332322295993392638043419756544 +(2,46),1972135683903141959995873064222757531265529366953814374979040 +(26,22),-542687185796150567730388092172017207928237222710176889790974020839796478720231858702720 +(10,38),2468386626246552878266324502196324375688253025166245493498528667870624232482817046687224781547423231992743360 +(9,39),176489615251934957557695114841307217732918382811912695696583425501761064823991833236753119157807719354301200 +(32,16),-972714527100259191872031856212203013249855061469104352632323368191138060638161844 +(46,2),-225032059606366303124333782242395139941393906635656134138880 +(37,11),-785360197711255463232753655870527861592197056513241773554128474130386297600 +(45,3),-32154069427801122329109899355751335725472656704202913372784320 +(1,47),5166598012007659316315955181947367793747520 +(18,30),31072269030332700318272894958328008258667417971892895385433758252613467073099336617078039180480 +(47,1),-999746051508122963244448341426640429057055287365515385600 +(34,14),-5227221656658212479018818045568429105211645578283117621035946534698150131867840 +(33,15),-75711662119009733307978037929210836124340157722375485758918475614364519270552384 +(39,9),-1078120784020975659281595288075464094897003640459179987692276209839309120 +(22,26),-1135050301511494162456106597145767309743964495389326345688046034001158664978834605286888320 +(36,12),-16945500143914584924896806831452191617591895564565442891717917053788914236160 +(4,44),49606751710746987649369640365436033144046567745720609118487175725310894933821956880 +(6,42),3810852535820596769012429660355036337963249644989982690004110759936044360712185665261815201901920 +(23,25),-169796433447965456990803098371095183805706768370860417363491529520070199736830440911163136 +(48,0),-2118245717090787042607398189230364677158437513937639680 +(7,41),225307317647564919944475050477738491530372298877711473275699559459382163999045604546712782257470045760 +(19,29),-429111525394296466439226371313474814687425948140319083424126700714257882159275303899920338880 +(35,13),-318050834729406320947296475432536501978719774522451195930307049367999042786240 +(26,23),126347084202190378440258206847945444314168846112829322039695955274427087593392623636748352 +(42,7),15372084026570684136612722991876350203581103376135602417599936516591600 +(16,33),43513094366514044616043938099624202274637829419055556554082690512590134579704575762347823519640251276 +(14,35),-286208756751571604650110440406281939109104286557773051827870744639432010675818432821420471091980570898888 +(34,15),1955558022803685138466965075356404055695898074497589531846906585948880702532160632 +(12,37),930506882835977721859466611698593140292357778468914720416697647518849839780682168762924135014373112104058560 +(20,29),16797865077298365128896580755884654952425170414760237921857090137764571843650460870217608618860 +(3,46),64379125541099582648081828695117516515222726282160089502720076452430659320 +(28,21),2315272357406558970800098429339018049628888930896225942435197003512076789916840081943180 +(31,18),3309536510005795123902907427489299020647246508484609277270112561401880933020938689570 +(18,31),32114392449733463929805779827511772013129810307677297756376557046103381679032126074248448920202080 +(17,32),-1404389420589044071394556381577589432943880292442013535580982938962071319005630619782072842189050910 +(13,36),49249482506313276394561904263717542250812460688368738824916520702100076969799915184504111746824849717806945 +(6,43),94257854415447802347690673320142806549814815604508156932242691564161125740095697534458955366292352 +(49,0),36289588104946935767133811111928177636086045599347515491 +(7,42),8307852312625412625366473393142794747891132476861162545012680570777334033398945026751718913997632703370 +(9,40),15950758964808315798960119571935787554564244298634284246621096517067840160757100970385807986802870814872225340 +(43,6),302388572837423849237737389979609899496567243987903836037158217662930 +(27,22),17610890566229726929353677973338215058965518299488899679100349174778307854682565926915580 +(24,25),5759340016454895899836036183871507409454937953277301584403420998262884428514971571961593640 +(35,14),130347102315583717212920370979701500445335626915921035296178085021354376716471230 +(48,1),17462213386235091729484211856284262919662848523703349991360 +(22,27),243167840553649991234801099557716109947464985148111120057224807602115770672363552660544127320 +(19,30),-434158476518635554726692212026597267490563315343323250411880512182784357115744757894395320828578 +(21,28),1756256258837826091349134495500791885738518488445093672585780555556874428508887906307148305876 +(36,13),7662310687609956296879886150353094111076168114323832746934968302545166327421120 +(37,12),394781883664824698002433629017133502915087820482360313497613101374557602224245 +(2,47),9871866285681938946317436936126608362410732013619629644652800 +(15,34),409555122365812070592135327468373961751724397767226930596780911501537105266348145552816725193159619260 +(39,10),687221005208219023664955957975535309249353823945582190896720797985421701998 +(1,48),15475468626790252573756299641258958032997690 +(45,4),60997021278677885077266880714261363507730624707105830560754473355 +(41,8),646941230179495964452289398813595196056674406123826179530987951616184474 +(30,19),32057760604379396822695286989377375400394850048122070491846216725331395846202578313280 +(0,49),540 +(38,11),17712819892822248914603924666420382788121136656618343906837756915371136054200 +(25,24),866540749908341567215373394271541179014850526504547830404728148456730160153291028485995760 +(4,45),567207162426552133701489825366113368286467891719874613697857697271153089130683474720 +(5,44),46412594708505430921761960468908343496742637147639589871715104664153952685385520135902494475 +(23,26),38009360981230437219076184820816857369824126794227427151337025114225972687945824668820729370 +(47,2),4011176776357660814113289085524030240930020241589822257117910 +(33,16),26034652217640703675185065599432669488192333698727790825215801610780854144474215700 +(40,9),22872729874405527005735847939292235341861846400091074273469464779453603740 +(8,41),43752665018437501033670281956809149768666678784175555497453335976731137229363014077560762624221412951951560 +(46,3),585498061631908544632708998045018263898694482398797714746460800 +(10,39),390468353551279006553901761308803347888426754821000103831036593377566530824116741834491798404506657656242180320 +(29,20),283695053877385366722786924460192096193351473307414842040295014280855181531994478019368 +(32,17),309546529729645231426443312579534872215984441773576893177410752478511207767113713280 +(11,38),455062037777516313251964735984255241710604031657631339228592877941084468099876063680071058704881417133714413608 +(44,5),4830191314736066190972641514748778377788245565248106267501002577168 +(15,35),2472781412580831752029551742690442971799703572681129532559214964543781082004458924018929918986290758368000 +(30,20),-8618582529465378706915735343226324429741661823429520340843720266110535131762980744792680 +(28,22),-566609615393325419016292187083534991391870625320397569374698213498735373390646980964093360 +(25,25),-195224395772321693776477516306880018250372795516089408529125729102237918316432113833909930080 +(8,42),2301320798972956642538643506505001063673024960186428009384998441546426872158813028127949476373954946327660220 +(31,19),-942784539369454158695408160133753120421017135661162240582488195969574811828849510909120 +(29,21),-72497743127287491535248185280005210185555925841449048877066662709980526025179457377427560 +(23,27),-8360342350944521690327470239109331283004631925922239305275651310212583669994383729665809652800 +(16,34),-15213790123615520125422892474179981202916427797847656330792990714537233098699875665024238301435743353140 +(27,23),-4159476456292478966450886450943363384232366201946157565181564863553014399556531623431692480 +(34,16),-690265976619322270489604708815002505313309123430236760328034136506036114334447434400 +(19,31),-363522242595671348459994290246093006641743298924032062887566524045933926248986375158287851169009600 +(17,33),-214937126969667218753302855476163932345422540975091419539569670775445610083202374422559599579938200960 +(36,14),-3224948262823404388062335033753733298479731162591938327914837427235867197180078920 +(0,50),540 +(5,45),750962469702063138076075628452064549728213138232796024767864285757728128047867334062966450360 +(1,49),45830808785218452725079121345922561791096080 +(6,44),2225924612809255341663684720802255648732997241949771249556103056581693221806943360261148886074113600 +(10,40),54662341374512202088719068574786926341988790495156365913962002102462004750354604598932818369841119519225802162030 +(35,15),-50073293123249707037513773236691557724247225673551252988128893465481907506414214720 +(37,13),-183313435252026598461821194335751406019576954480839772199366823524816423770748200 +(44,6),-5901336615106569236248830763191546145449865701771057080318562393773880 +(9,41),1318657753783709774095140188325181269494265979090419771906354550348620522579800855684248508547203935190916087000 +(21,29),-484834728519218378188887433147479367903989781256660413354702988531923272713695049473243241977320 +(33,17),-8499414976570182474826999907751263493336634815760331542154319129493852223498819000880 +(38,12),-9141462753834602073877523033857146602861511309851001038730881164669965328477560 +(24,26),-1287090439058850193394362885051352497987987325033956505708423653530954616632588348272481579300 +(2,48),48545126160931990803851841509122555408591270829143881447079050 +(41,9),-483521678776223355690913779989891640537027922110679600304520290067859096920 +(18,32),11975503830047806076106947584270004641976888672741391650814977417973295760501864470036264356267074040 +(47,3),-10662954157461458375934290014155668946311454084004210800440582400 +(48,2),-71540962332329562392381585339153973642474711167291329413939000 +(20,30),4364512928425010735170770933208271670995318326217883219784218303362872083397656051860777968165800 +(43,7),-307714504515261823518891239754758017949688939652441189306720362710809920 +(50,0),-622553461319504987781764138617331663370255585592560090000 +(13,37),10671347986995006723156840977484139308599194569050561925055709279177039572217252942656672734460738374750787920 +(45,5),-92011596776823613575097927336535645359179322508629281360458137164000 +(42,8),-13299899271191817448625452926617317371707693668141715034996486216635992890 +(39,11),-397411706301735673328474174249678566903470146260747224319902769302257630603520 +(32,18),-94083222223577608820949981149295461556314568070158367074742622763694640588755754626020 +(14,36),-255882656726333787753060390636487293167152418783100932178597839617444347888601586122567379994410441186684820 +(12,38),4835573113837560347987031346661710053872364485917485077834987921097661374117770845139824458724785622550506460400 +(46,4),-1135491103905576520639427843827039020884871662645583817165129038480 +(11,39),127966398461101604468493724051585825559974642724484242771386518275575814290601092276090198157223066612846929885760 +(22,28),-55350387308044681336675298365767200811089225862269144948216925324333741828366600346832505167340 +(7,43),289488901070672685144257112704721192273288868717966509631367088044123398840722674515705650185438465351040 +(49,1),-305308780176981178212857187241231099327002011007548098722480 +(3,47),483414371808018945032664444401203050961450158109241435040562425027038962560 +(26,24),-29033655771928086842415823469230521698267107509887014191382396146302842086303207674120364150 +(40,10),-14957344985661821212678828504275617421133388404064639104285618373955832651980 +(4,46),6290590201902358080439575736447093754945877420088765267076620585619824426075343752320 +(18,33),-166187994491047734441076219806354749611099727016680726130433115389466980321896433407520770319397785500 +(4,47),67745190227699625422505991932297972020054261691521864661762953360013462642697464870720 +(13,38),-15666058933072835687376588446393891454933968338423033531180766865311913622494852703954344593719040884131612512790 +(20,31),4150316703836912642598462466213001591194769771501159003344501077661260145123474855911423508506148920 +(6,45),50287145356752145001508470420271260174750208515565576604229405538997251710779303022780356176230905680 +(3,48),3546916834069247938668706970476836846673268086344288894623007323719116592485 +(50,1),5343085446818245984588498985697160624106308567097709493673640 +(14,37),-81162694328680332413117731152272554179082017518978096240814375776200310864014125407613883225569044956491629712 +(23,28),1854248481343165076666316579801173509428943040870626244253709618162770850360189410524916401817210 +(25,26),43777681119321962260964976648511968278168976790692398178240347733835206666833143221361761912960 +(42,9),10186689585826748042244019739094687814311225797013269891506170472175758399860 +(47,4),21130737066262288481491918835478465067205871061811773468811338170405 +(24,27),285735415603363226780125412731148012950607087858872708389263053798817641528474311369011770216320 +(16,35),-23913850980198510693045695168141161219594202275129621933284269028775864309599237891474381942790033059271104 +(49,2),1276681332995788988977934536506666906147532811187521009625219000 +(2,49),234653862289966992239396056049369813431050640924995707517341520 +(37,14),79192382839790514562820872604934199486459550327601304929337916177799326338284002850 +(44,7),6147276222732361109684533316271262794737639332641551606459215302234750000 +(39,12),210451164179578442095116863556797730190545735186521226844729923914922563716440675 +(33,18),2647358728498518460888686303309897325163320994558832067786871572817648717252000686892190 +(36,15),1271524332314492354681802123223080283246065695316775643578863766427551067240484799884 +(34,17),231111845502814361951355169451714720963742302456545378405747561577106259809211394241660 +(22,29),14196396448226458098821857937272609262858602990030443551322436719510991223981140435729644887458440 +(11,40),30182095823525826419639019249099226031730414885373548824998160030119202468786873690262251674208113201658456807352954 +(17,34),253568260592704091528850834186869058710860738691264383471225285576394970742844668496403835974355122680610 +(21,30),-1864978522704047728399640261801286325060125072302823803232556036061098724088747734165942050470666 +(51,0),10693915856422741790088279997739502471386472790427757522375 +(32,19),27436636962725338360418704638324452342909669050461745741891119188218800382805128253263920 +(30,21),2247452854568993394798148143151266799073895295489813257229662907235233951128887955085638060 +(27,24),967695536717053665194528235213280533623499511577934422193065231158414829593568619128771910000 +(8,43),113292662110616378801035550708710370972936731535161622067085617839503884270891652056216477015747068917776360240 +(10,41),6845148056667976686128668769413465884750104445668465232309171104936275882868783070029445405223026907677612063774480 +(43,8),272685507967698141710591169809766425160297879861378015395105003298949383120 +(38,13),4356488324219505681493279009130027397201512531623600564391511578623500264760497300 +(31,20),259104546121270662905708128934631336814218551382318002134734632233574040091779038281848093 +(46,5),1751268297620973116676346179718821550806695942130826571763983336519100 +(45,6),115006427251317636595748756200009856656332777914226141311867714143546770 +(0,51),540 +(40,11),8872231366500401326412123355469991880488233998811556600028250690766878554749640 +(26,25),6601507307856183436794790505572783233638151353873165330860447832446297176335128005840206136600 +(35,16),18135724016383514398551065438008309208904965425408446679067008026425973364190844111765 +(28,23),135904741553959546355819266612316800950310031502269427609039812598899626219050404851245210360 +(48,3),194217892672989238245082505866714313995389283438772199969199570680 +(12,39),3938884684007548139970352978492779977741594758654254998809319333775479196316632078681089002873551280127913974577900 +(19,32),-87252677244292031268121949220675089807517909161038677781859724595234347973767043769409005029989146085 +(9,42),100293044763858450196208637666356196568974758541704853754896023989155829865245877360878291441289946378263511205080 +(5,46),11717215867699570555354544602181420792021154224394188420468157775170410547416349768727702969140 +(41,10),324190714955700582258995772172553971501980333948222443996848750086292855383216 +(15,36),1688378633203026863259072864697125586664996790291493697095739751349799241118431802451903612949212902600980720 +(7,44),9557764123455722775052785918299754040489104946785209485854030879286236556360981841962143650162167908879060 +(1,50),134244679345162275124380116157576314011077564 +(29,22),18064892751987000774068698538278627302489913876280760505716085395165755636877209611820929560 +(28,24),-32048477923717918851121097424868731790724716234062637620080215968983028656786309228303195399520 +(33,19),-790280943608557308414802274498013685228505934859404850934786257660906277103120644194425024 +(26,26),-1489789769341219022623432182084108729080130206542646048639967320736366361341398634220231117755840 +(40,12),-4818127084319624757054584985958911517007071482229885461153882997374464447656902720 +(14,38),48093905671305537736511025444322090877594453464973020410350488673056300892559768396728401364977960110201920686080 +(0,52),540 +(20,32),345253980394389590749199115436973014180499745197747017816328803914723139570258881553375955332940429280 +(10,42),773645224429214234595387572829476545762104509337997708406351589180012880180318410547437424543578087565886812629503520 +(35,17),-6225449619735446970901676743124905625429169849562108022172309870125138197623606913917120 +(8,44),5237793472096852392662803615515464952016059739084297169221897476556916891931169654010045250080081202116590805952 +(41,11),-197134566846702479054185278112002397788154110177008777218720904953477653598266720 +(17,35),238384254885725161735735480489384950844520009810055231974861592697810714154334754478309493508256980497763296 +(19,33),27227508628198598994641958825243705597480042004620171080155015020148011310263030557554264182975489653760 +(25,27),-9769849677771682037069549551610497118057822079948516238846103070272828882405694206689876286494080 +(50,2),-22795275771000321698567726498701287631672475797145249022257961120 +(2,50),1115536649821361933661910625013852178159716561740080648839636576 +(27,25),-222356305226275140810299421324680538512747291542191877699912481505750983133643895031038764544256 +(46,6),-2238242244248586022447393275253014935952171314392001161350558042935956800 +(16,36),-12497477838262567936084607733199564705331881633722672660047394974914086769206064523861646334201051461295891680 +(24,28),-63251857980210975577290711754418464562070318759785285089776349186061496013095626657931811393706520 +(34,18),-73755784344625810897319883579606257234216664200408589888152957796575106899000546854992960 +(15,37),403221442535457992936026147379820366579997289199836675324823673858229428541108051616680983441427760944304695040 +(18,34),-3519564375202545510508142986581184256152995410261903771200366457245844594771864704400901627030942208487232 +(23,29),-442533378096185139261782871943098225315314319240778413941422499883207412774273080657345088072484544 +(52,0),-183924813354657748953262560418019442636005732399702749965840 +(37,15),-32031368409722880438446746373615765334846919377787193102822019118581367320911529206784 +(39,13),-102876267055902795635987438535477482439902628360605570705760091944239816077364871360 +(11,41),6113679401304998703276913415986894962523653284537413723558838554393906264793943583846141756574169457121766157604365920 +(13,39),-13749600569218584677293124160689084962309093919583399626481804857097065052080037173887246776149857221601216588781040 +(31,21),-68969825265807134657398376702878186088558191398561812241318497223903825857045705112195252480 +(32,20),-7709176801311792393945724977689580505675197737897053720603368869397487854291752732408293824 +(29,23),-4404059776785926295989519027201491359850828920338128713546292292912458102459449958090781537280 +(49,3),-3537999758166727421385631931673250252135916046772165565164614355200 +(30,22),-570537587234914342362148157239884393398573680574474158051028243965429696951329174400234810560 +(43,9),-213912649274312111664743808272257907670020380543904621582391689072956078656000 +(7,45),299724813326244392840710900912730239023040925609549028204559417326272734620238656890406015070369764850546560 +(42,10),-6998697060941047868051174089147798988255271827423900615910787589204606558190528 +(21,31),-52961002577150515204465314209478321697807585281889901955082209250986503939339955050863245661573715520 +(5,47),176547023530426655708374020237858947248462795903172127256273889527330380594962813756499419963520 +(4,48),709189249606046187469218837822239408296669110144827776614495195940061262605562194059200 +(36,16),-472344249631120705898297034414141877727037976712206667046692279174657059759684913485920 +(6,46),1088812749419662014928067315317046435019396152973509601958550499067045898120812129264824467590563652800 +(38,14),-1930742053089954119432586718320893037147611060155017529131193745848976881462720039680 +(22,30),-1798142726105599953548854658119119671609485324035124045930763609598731873893710415894711962964718592 +(44,8),-5576457355236257923710335626780664917896709174286883881951922068429431034400 +(9,43),7053451981862367676788013855286132502864506236185844823029928587315946486446807166235833582937854656394559383691120 +(3,49),25449512040375735842066906924127402709499665127123516138900255366155160459136 +(48,4),-393103695777358836548415548522727357981322646259053038315891968839100 +(12,40),2028606968771477270984817206587709231564125728088553411058606829466564728031005873088127279703629132884195689765948608 +(51,1),-93592540144533523502431597682522270261990641466370887760032640 +(47,5),-33305058387470495035309836170493295958733418952208643157491269275509248 +(1,51),389050648285770379562566349958786713671732080 +(45,7),-122567661137969332486598354272032312407645189068767249172794520794287800320 +(13,40),-1548860587050043559423722700381502614952947431744821609755644837721119036569591250306630574346560104818218561267077125 +(30,23),141474120326704353666509287880743471900475345220606798183684355636247980851365933797302412755600 +(26,27),334276483075402756439883428080038437154953634088750749040699924477235993682132550118439543397793040 +(20,33),-548111815311275966041799200299144274312801610659157976523394197017965830320117210254003043648808711613520 +(29,24),1053726979778244051867807776979296216105530773155221005468017594258764967335907049306707819534400 +(3,50),178700657031532011716481341855492813901026515923311850065562244107830284100166 +(18,35),-2359862284728883808103348203502605972789471160507758662198817108023810435758937780166998002347589252874293912 +(31,22),17845791618414655147086908543824983709715980680027383533239158932030830635091519130941338565420 +(21,32),5673024297854377910721170250311496336064956481207296294531006237822981331802766411286147493480323404000 +(49,4),7310828712435431228780992668112395959066668696791364485112078391763420 +(48,5),632892082098272458146395274823895024425337483480935420260101170554085992 +(6,47),22632938872535118455604016344315291027789224796309567476179966080303740191104964895455336975563401851920 +(7,46),8947696743757076484500378534267660514790742384566307801663098801136111707920541897798627936915049931563837160 +(11,42),1082139147405198216402973281688424928291568165715313975308777847033470483858916939993518748966960697497442929555247136370 +(32,21),2095205019393002126209198967117989916838629544790092224012852737640802530366919279468640828800 +(51,2),407222978895809691989477426809129325368742695676206144284533613300 +(25,28),2170131546583148775935390774773609211569902086867867112131706858064086760201978627464719623686181665 +(9,44),460771326317676092653832791228438140213686342746750351213854099922789892908948281463258479185215919407548201356663055 +(47,6),43504099439297734455937622763027258533405327318716323790299010702897829850 +(22,31),909014085811334003471738496444591002960445875418751956496872778728685093059820654906202801679174296760 +(23,30),82941724698226028681556439048184966774609274547610021619129101024638757782419121161520038322761948588 +(52,1),1640858299175060726491219077085073507129681135379835658799799500 +(43,10),150515662164517651726407813022660509532656441908663499242763822588224762664858108 +(8,45),228116448730261993247635479310782204594554773747201573518700194374445616118119962050335990116475262793334797324576 +(24,29),14494856150181100450486302286993206164881467297494835553843248160008723506694190839074065389473147040 +(44,9),4478049731401373432589818746811180813185462037253177826352420667786513480943560 +(50,3),64458568889268448422376820025782300270962087930789815477686540252760 +(4,49),7223949076626479325735984427503295300921261841485332974772675135134552955527456173772280 +(46,7),2439292399732033570655354260800795101849441259516020783719548570543046333200 +(53,0),3167134834981261609825757651671760297031737346526645636184964 +(14,39),71183363773921755571325627338890838671858268859065819079043131915222792507344742148489721666113171435088341997578480 +(12,41),785515142236537328900602826316735302283004046371916699461928576461403645617578286439286011095863397407639991859242422912 +(40,13),2414635404833372922345723639495584129196531981731031985172391841241841613754100856440 +(15,38),-304650514684371701526155391293681446931928897235768683682987460599467423479944285501948413753822162884054970574170 +(28,25),7450933522831483441045793007154053940768832398943689044089371391914606138722913459597390750796892 +(36,17),166179922363514101544043712380151967855296583221400776175668067813126613051012313006641600 +(38,15),800758118680448315881068468483756298552781241077492652019355896425233129880429450590280 +(42,11),4360363880933501819073768288472508727502484495839850555106441673567573173710839320 +(41,12),109724516817938351822336643743098445951863782975950544622928313247293983655054506775 +(17,36),93913560624843642264687297578977383340457718175317979363375827185697539932007740529738699928237060279304792560 +(10,43),79514212433298634225375392551367582368811619123299255480884615097103617746244634759456987532670541007665178666000237160 +(1,52),1115889693677044831804560746352931094474641410 +(2,51),5218430980516189254094148501786316360955634823251880506880203520 +(19,34),44770651999098869406357028385283391558216272841768123985299215778152753022057904065212291220018196418285030 +(27,26),50600070581824298603014100581515954920346806849370754683657389228667511090024671477108348463139160 +(37,16),12199291418722704717390929029377497555291616465686503019163071124639705281902395020577420 +(0,53),540 +(45,8),113759165081826023870939578404177697080235105907234179757336793291152338883850 +(33,20),227036791417295177948396035673262930974537074112443843868004691336838358610935043907573612256 +(35,18),2035134512154878682579726997122992223967599388829960537921730766924682223805895251045802190 +(39,14),46749709403377384231639347072807704847763450373592643610443444731970242476421745247250 +(34,19),22535604734109087342642795089648408987730653583526143395834108282477200203097418982303976560 +(5,48),2572136827761480437723883444916834426288542055396727818045400994677075135495314250908706733675255 +(16,37),-1489216002911321955682969797635719144113047880366910723494438236969295698017138387579126780172832680414785065780 +(26,28),-74608730277366065827549074440306683640189685752213840558517014829974010309589683990642191518521209544 +(17,37),-4594876663530400384011734562035211058850576609993896772974127100398553012329829807079514199039688791520219003800 +(13,41),5187997474631750093859057256491155356659228357578794494764659094317222536836585745309271512379049108024527055566058169480 +(51,3),-1174506481717088599347083058040408106294170641473147050614634854048000 +(2,52),24033130508807332838777158069743948182143163379756606832558863060 +(15,39),-382900930430199421082816016241919645057599727768253823859668322004323842893876156183464255586253664881544285016503520 +(1,53),3168636363401680627394535288429607255070744280 +(33,21),-63011306485045600817945946286088080375634511958768561334954988160600620648465972961280383068720 +(52,2),-7278398426813620557660355232337594535559815262012933235955750975140 +(36,18),-55633535191105809285121816609616425606062274717994808590889107800749988810907138490839679012 +(8,46),9385397480610850656793951639119604283730846709488306179762715623463701236839839921304678715481755753064231935519680 +(32,22),-552764918068567947493515830303021658883408089863668290751654252602390037998912379373648034676440 +(20,34),-537823970538820701596723761861285480667942141728736209734802766371932093723002188092274900535579133665684880 +(6,48),452390039279805580464977286144909448527163932243860420866469878890963119111155743058915092596697647207118 +(31,23),-4503543082005439849727447723211468902807585246979371745031717992186966872027761375747008330019776 +(38,16),-312539307652591909507782021053781849601649054089640120311572420903273571558963862281013370 +(47,7),-48459700020324844034689486230962418072258730871317425512029437608784345256320 +(16,38),2964315371480275737504005861581510672981941272425108309520620659094701083730758017323156789584373513002737609917024 +(34,20),-6619393981550920334334172112663533917741898527314250265039722414500589753593639242169765491080 +(29,25),-248133978848227627482549117931384297161876257243367428462875226943913967981047984102199138939696088 +(3,51),1228838803457108385569339305610648390075800885957124412286102011289877331316680 +(28,26),-1712307917956563525782953454791926782080407071027720380836293563529933528920024759440710804781940620 +(49,5),-12017793828914513461349863470752303209462113827501986819983410132879884560 +(40,14),-1124537691812453999186934380723020957004429011452897631252263345946310829302510645733960 +(46,8),-2315218854529224999365350472608158610736560502984726009559046382483291562671880 +(24,30),-3064356276545998502586821385736601547258972628849042684914291326513087887448913426346022813052737069772 +(22,32),-238020019676014845857875660084408133508959833799131314670734685975690152066487793914295167252380802647090 +(37,17),-4397310598245926963508187041646229219812927666850016738719495564673959714204308685216985720 +(39,15),-19871859341607091911237985145610739790689220475205505750347324803653898177680794973883456 +(7,47),254818098661678277654863588221919430750066640381575061291340452331569334718778302866151714254510397304881069760 +(4,50),71667708119304600927039763696617549170985732643216579112801762378150255801982604285936344 +(23,31),-22644096838436959464665363792076855452793165561226908317498018994992769710063416799816957297985115945920 +(27,27),-11429372364845057459603658761357387889240335792086905712336462685763933243062656788724233420441315120 +(50,4),-135924645421304007536268501032885265850825287723435386598499780602516780 +(54,0),-54600401349988335719173835684928820341898933091346577865044494 +(19,35),22550604178406833243073165920952457791064649072289493001998788114839980782017109703051892497859334563655171328 +(12,42),245091749640591796108557499644900881519536559323985192772024614934201195196142344208015895003290519622846565007339485354920 +(18,36),-650609960958838538655080958571049817670200613046793940982460561005340304173858369648733689902495609171029851720 +(5,49),36279276319994446431890437477877360177755070197325194169349465482439208602084066829687115007999000 +(48,6),-844529307005909379006539302307179724548606035410574510698997719277594347940 +(42,12),-2486156203225422502463146787289520761060682318247160524327160032169872196934600025100 +(9,45),28072366486893109317189909730453311764668751537675437414279167340226890546713771561563288365358775065733537389068452192 +(10,44),7480196306830284827365614114012230982195837728041570135147888825860557778380253944989882258118882431477265729778694060140 +(43,11),-96028315376415188329089660433869462591221300814729484112345307389434964048757141120 +(30,24),-34372709362114796371489878206474940366228237590635728878944311080776326900758408473951191155531070 +(11,43),169633903189044498738393168150020788286341524512317850704241480602377580948393737282397742652973505683720938899785327700736 +(25,29),-488557719760367154752254214862006087492964644597183911704752196204832119236066844447687158734706917640 +(53,1),-28791678678808899973028000472543260650148374654093147244552498040 +(14,40),25638342154405477454153598603913880963249949935067120113826885476947956621323544374860029736933557717703232119496432148 +(35,19),-636365897264453168943471523414189572306001702605910986327313352888545784283273703090455725760 +(45,9),-93465044620917648696246372463784084445365281041953026194931828904715247852608840 +(0,54),540 +(44,10),-3225273292330269453069093049554191106700424796814748661687082578522356902565572512 +(41,13),-56345609882273797031724048570384049934054612161308734761106068414344528279897615560520 +(21,33),8079757796275004285942817386091689156941543392082108217267471755403615106918758638881576839419513770510624 +(33,22),16954478798247316314804846632904534769698932437618791199704298674946289686875344505024716869731330 +(24,31),706216973456736103097036964788366288704719081576009312275192925025397940458000349004287254626142301314880 +(38,17),115381070411709936642675158131699681211243750986524141427118489275089467002624576960620753960 +(28,27),389898620967409043077974372470188951175067286445692641984283777679879152407482358663868539687897325800 +(43,12),56059247815753585879003634946559637727277045923429316674993108396647627552687563048530 +(36,19),17799694691855255807320043190249711325105209243830911800961171628792468333250451788786901678560 +(47,8),47013053515230809455370817983524237090637094517270547578955087396262530172092115 +(52,3),21403255096276311137652182277636518706472165987870310303273787257633760 +(16,39),2680312771689024388315658167741537077981205064747044175382100073996003057974335464795883223175536600060587080727611880 +(51,4),2526426998935294518908332552994346193411722780156832114702751415719866710 +(1,54),8910115432354053776135051579033594296021584480 +(39,16),7945206442472577240896905037633481906376118342912623207122729228945262738560728608362291330 +(25,30),107289804818197271183801245019778031602523126376039038358785919020186746887551505635819555923173106175530 +(12,43),64029807737736653646113457986002284002595932229354405468575729896893056745847162688887375544567570979511605932431693038481680 +(34,21),1876217699835163599551887448074475843745704923284432842563682072033145138464702915248899505233300 +(20,35),-200259295990215938116605180535183504122866495680518432141105031015720459332116495925121752832270427811641647200 +(32,23),142032032233140011136697562851742280302913009694702010318003683605053401694750720594398797882294360 +(18,37),223834707188335816037962091814133158975189449741582273744755315962771180388485854320269289706362415854549580142480 +(17,38),-31767372420820665730776998239088304945784624415924605442510832487274375163036047530599727433688029306258868143061990 +(22,33),-92792891053768219122478686111571497883180869684797895671680291636974615924790833014928960715347011842095120 +(10,45),647746496918556456470101353149820431059760648939264099571503234025046709293658329623651220385863393234083168928084427829960 +(0,55),540 +(53,2),130150865395479173151792023662962458144416186382707826021449542252150 +(23,32),6740312460369542904289860453696446135809371756165544299684199326472130727340264881663892820386971743932395 +(37,18),1507160289784846202610996624819446386191879597894207124580525602933071949763635626412661774400 +(35,20),191101861312637532486224789377215689944152738381129483320142454494831915942245849720923006710570 +(30,25),8205913058903488683303208828747889298928263793019844792598357343298941754567424992169734501847664460 +(9,46),1600910889694369781227572161614172934239825825740031561417333995696757084710979196547309877947280861855826746756029802910 +(55,0),942344365020642926990967791146068938508427335911702180395065000 +(50,5),228038577329279837705530070465501068259581845054391367257929757416414453720 +(31,24),1111865876708720485771444603494761628280544236383006343907093402445868762774346586578767255633484580 +(15,40),-168856549155490850836558213524444095641543332195415309944498685931911343951463968264154254016347514510778807393481425845 +(49,6),16375049814987832147720309361075344848569272482372296445198272388527526707490 +(2,53),109018105559919596989616194288202982912413233059392673520044645360 +(8,47),365732253406682527211026839184482606985053685432554184901937068183291816018458847905413710395187739807525882803297160 +(21,34),6197878276141672087309145016518529120389382043283724887136388320762391659077474270881719134200782647392848870 +(19,36),3336162266489436910541635589180542615502927428453398632465726293062625936042084229816036598501943468106625253950 +(27,28),2565636008757108246767053498768313675303369756987399671136115927715214530601523425265100515890147713395 +(41,14),26880013627667177066976747378327421051147597932261180783795376226551590811551775160461650 +(4,51),693095806919559381919596714236861498544865177489957168199698039387919888362650948720781320 +(26,29),16705027715097834651114254682774016294334235394178097609727081284612986317939192082979892252434609557340 +(29,26),57657823531228744122525991042414960761690796006576733832315936356238089324280699864494408449997151840 +(46,9),1945237054006126787553323465970218779143258606608968554987074526756852666407300820 +(3,52),8280823156605351506358275290070482904930865771844057669160268872145515472784500 +(11,44),23804947315674960851316468355586807087540327259392988950330149771641076910289025585067948091730645182488115710880465550496970 +(44,11),2106074984688426210924230872892676816003260045211734046182460142256207799139598674440 +(13,42),5270356783603281213974270138834061409656818244914484582214005712261652873115705050895369760756601261072589765862849422121500 +(7,48),6936232275270173376288647222676270992332902060212654499094280576990704467661045041157433274207778784282727744285 +(14,41),-15317228956825406154902786084572613306878637335727812144947097759229617409995255052719182667076951538636105012067457711640 +(48,7),961077654904110629755260871184486746202750093641676274252279213362291520380040 +(45,10),68871516685248304821440077792718253853890973157174612265713958352200276081335118750 +(42,13),1307521023289859321681441838494438686345011526633515275716014876912799375022515564731420 +(54,1),505609385824182918309010809026445040873944828498793592187540301560 +(40,15),489685003457797610658924448242517514634991713063106628273263932105959700459517022294897760 +(6,49),8707985374013051571699603872408613246520660988610605798428120982926165526381864072119465795370495808345600 +(5,50),495969994523419776177504892162627759917628507429139461821825125689393670090439291471444592711954440 +(22,34),-70338683965115275469264430226644238537337894929181599272657047575916177391527195748841292905310951969711088000 +(33,23),-4437276602355555843485789228138555928862458016207226643128564217644304661386807822443271618420128640 +(47,9),-40374824021820317123854493275571848521212384177198738626213046509838254367670754560 +(1,55),24818302101502542973362463866609553817980507248 +(53,3),-390078290974667678915960280014601156956221591573514019798965789668969920 +(46,10),-1465766887319931271796322093378032497708387235025263784868757824962182601403126579200 +(37,19),-493295337601290559591990220030552505753941097272845827573151414264338184133909554654548442362720 +(51,5),-4324067831246320601842746477034168622359053194989918853211934588537423191456 +(9,47),85740742893068146312575620404866660211066359224022769353609267768499085519837325304582977683804088299934306076058534932704 +(4,52),6539543898779500702235472556826495492175128168199748286812084991316261740351648903671786080 +(5,51),6578949935069476087411821816357601076950839128854478925406505959562684463317446576467555175405676160 +(10,46),51890304985248338447003028895150824758050174382579865600639964972102462105504507302547017233403551748891160969208191926705600 +(41,15),-11985601857509018958964795234075964277265176479340727861329101846807329246651464836887665024 +(31,25),-269316067966817706378168746346493915542330551443757158610113619639230894970621922150903215216552990208 +(40,16),-200478188567674468953456705642509477506165574352579653838927759108427658097977390314973890560 +(17,39),-21396761851878876538329190003834538719238579025755298313541066990321209873930432541088103005197156840345536981714836000 +(52,4),-46945806324713252846036301081377868167761509681466154093925440239551370200 +(48,8),-952590199054896204308437392546319869425906394814950246288445123752738468801730680 +(3,53),54718571712976681739481106763834382907048734359006673633738599432150403651070080 +(28,28),-88118858594249703161559258810386545433017960295265810030910674686784957155658227457395947410616054463640 +(2,54),487302205242498894484204728984674358935436895256373453818333046720 +(35,21),-55320506429852441610517442654397599273935269440337927872511725240712897113453756015882202472151520 +(8,48),13530918155983883830566127815492706530384904780656657842293034866831461371360607656076018839859363361424514976473791520 +(50,6),-317142546356915375497443007772221316594223223154351103681079067367776001565440 +(24,32),-191906919906588713365315608268340369038628478009810946503981144911348034605653735345365403913830027885141248 +(55,1),-8885920717935242073483405492081738299876686035494292477685267664640 +(27,29),-574841320174682610492651973419052406109070083020259735641799011327949374724267174997570708245991075288320 +(36,20),-5464319435008529516583463686390042780985383849912503641716235386568655024913923068401807440339232 +(14,42),-19932772546882443185860303797271271122497801006078380717766062530628993910583765042656125774265076195943963327342108207199072 +(6,50),161645117990948326047135355734318981953496360693504259811708654268394970976525556181069970780134297729106048 +(13,43),3081177731710517186231905948439507084539215743758307206179559180938778161742125728937540190041971829127054856007283220010404160 +(34,22),-514970284842964605858079962029728172123602432042560295286758390691885185861136310690544368581596128 +(16,40),964395834973751857999534591397188098401099237022079708330972601678703123535338209050200972975151062961052423328263035920 +(15,41),35161742541576843206922584493502945968827455887059902787181671096021821104529846880901499666130469982349562244066128609600 +(44,12),-1258199406823874933890167867643629503853175252794972511364028149312375840964664385035200 +(25,31),-23840390992830116887272893994319257445086781518805435221023951266090240498957977298144990112927694159480720 +(30,26),-1929963311054114993349960760138514883685169273469349850245643192023535824364141883654269198027718236160 +(42,14),-638644039768272556450810122728890129043937993880677157509790648081114959723718490798473920 +(20,36),4114209885025716364921577564057919732952674210940817534360579966175188304035791440866688453237886617999777328200 +(45,11),-46006872967158710566805199858596179411577270781040450732269875090433408348237880388160 +(54,2),-2328402331935545109403949325037386368402698848952616133497066078515200 +(56,0),-16281350805788650134541499046723880648447102331208356052327292800 +(19,37),-4017313652502466703021527959598667946947935901747666911141052699633588479764525874155513897404036766028810150465248 +(32,24),-35652728497046278556790447889799818952965423772858652452508227982787371211709322597753539387569711320 +(0,56),540 +(43,13),-30179995332260066436812448988722381069700864897202286529285794290138154594984441169717440 +(49,7),-19029492760470415220476416674606757062978102322197911628506874424754740396332400 +(18,38),345369872669792223906710420996268776402302600667754961849584895928111602648300927180628710171762198348603473420718080 +(11,45),3017226410214748540441756594370416965132561002954573824882737209260611442481843848141003012009664405829327257777678901152427168 +(38,18),-40475563444937533032618375524693480309669745737048785369996570487147676221002088602535353635840 +(26,30),-3712025753410138735990545931373599350079204895958164731226535955435853006619280713076551248976498183085824 +(12,44),14360677771362748734652719729976026135228412516301556705057809259544793516696382827385884449366631303380879641686086597230897600 +(21,35),1517870773130294834217527426837667528156875362025659191138530706431140118510773049481925309423363522639109397504 +(39,17),-3002997016585093186795630399048591341685842903580191015929380251723712969146914133278706983040 +(23,33),511572547118811338299874728844271405018449966906364121739049624830133383802913481079634555231313759660977920 +(29,27),-13252147878467534136638923312067547022154686027390574929510203567396071712788268011673929692420976370720 +(7,49),180791195342497884282988975852080986500860095669096464050969721506190472654057355786249307186999518460589529045360 +(38,19),13549153920088451269231169978886416458212043646620148232585922774399141955310814304497415353951596 +(52,5),81938629857979000744257176394518897874554369939496582208805421659777843508804 +(8,49),476327517347521251199507389997716308926926939612498160565409301769665063947330337600690415506315355739450185703196368456 +(27,30),128334349922927949757640478103006486508633631609672994191082052205051222636508114554661672897850832730558770 +(12,45),2815102619944254690761772989014678226887338666766676291291061746484146343048845547125157623491084062106077087746949197028505180860 +(42,15),291464173309585365704277458046598460168550726514058562507645739180616936493520587328834061232 +(29,28),3018798695778192347082614364983838669176261354115999453284616929790817971816453374441057440663237228084395 +(11,46),348009622898134094385369581822398619663808384561120113034060745900498787401530151995030512122420647500947715556785904682144886910 +(49,8),19261631191776022093272165332773091779919705101024241029357635198917945114036004630 +(30,27),448255789463320786494472114438523764720891380384322009994702122348939643679967414029710896692279414299040 +(53,4),872112809443045154602844228792653007368073629767841500901935314399050933500 +(57,0),281592853351964961189569010435426405077232725464204941260640236391 +(22,35),-6706747112249355898366190501085803453056187917430985259236390639309568325642246061666990411636862860750244981104 +(14,43),-5685963480465290680376716546535321298575838158591497813028996171448793051243253177121347495566698745193472536035002911047977600 +(31,26),64168003846623348715188808466538499458732518984864549548818200466535464035967860559238194935158427707770 +(51,6),6135497326959788973568736499488215517723326632956590145710644066948294401892060 +(50,7),376196898348505061498713835129843598484185481124564388018861286476460876820860320 +(24,33),17349684799984537412432689985385990204885685408111111858508326809316106713498366466584624554416220526980337620 +(45,12),28113769734412862183963933175168766933767109871819416892640149174002135244085644503994205 +(5,52),84763217388066269063623328412891465051768944251646699084691193284875782181306495702666665669834038240 +(3,54),354762418843695266128144874334265426609164391162080298859912310441928864108953264 +(39,18),1077869540207393142593551006893040622929005107580251258555378106041449472919342649912863286171320 +(9,48),4325632157318877209143829309881833854828774077213749562398041504637805220757378392948294064182285484666777150779887197936030 +(10,47),3862607764714712504668255368797414078566789580079407466879494643412669775117109491942814259808658283298412763975031813882580480 +(16,41),-242809336767226865399745613785282137994433939802701426935790869250235077527176910732242121409132525568915331780937173357000 +(44,13),693054889926482309176478231327154439252001015126864321792748168071025356949710211732711480 +(0,57),540 +(36,21),1615494554121121270696699217728047109196326800119934400601820310570761079238732207515386549497793480 +(32,25),8767749166202511235747629299819179082892674155172615580101470782206867574076755026502136817968626410700 +(23,34),851308365656028655882864932476154456051654520246790779558197967381512752752870641269880054363229113914800326654 +(35,22),15490668963575721661867714517763675740672441969551031991484553000480240818178565896219188220456522490 +(26,31),822181869035633990537472017519277664398698889831278869777841039499307530529636474765609918955023114335624000 +(7,50),4519858539798058122467092048974099915334455958714662930630868048438329652771649287011037782741403710753238838471670 +(46,11),1001193119098129513836742445515259514203522494764129630992114626229021039397573350844480 +(19,38),-3707901588058046741515797397287816432697121299952048805383203330202983810484209356398539647844474760725216557362628120 +(25,32),5876734264346838703822994299141349006472292469299346077524743242565803055957568100075260656157247110937804875 +(55,2),41673618751362964355366039493390111631144607901918628793117333081180250 +(15,42),98578140033248558987998459730572459340360438170736992866797819129172687537035933570596051809352039960778939113021479848931540 +(18,39),177635894663039409163685729352762362187933920898088258885700761354766512988729781814465942648847435179316972070769374408 +(43,14),15085844962982894489363008136634552157517577541148212773924662351919019788624727990438048146 +(1,56),68493794901087109184350981727401989732891762360 +(47,10),31095840923496976162579284488880729912197757548524463937846528648623622350123203682808 +(2,55),2147305439106481922141032460012557512225310824630881510629513142400 +(48,9),835818956555786496695399048507199893156414405619749328039060130170115235903080724700 +(56,1),156284732672485921273580963022061658986629784413952693293489234481740 +(21,36),-488733812705977280177735467272279658168916238556769680701745254128000169277252415815956017354620341143028812849250 +(37,20),154788073624278667017792086894456056956601073545144985421325689544164119401454940633527260650261543 +(28,29),19821087372701758739563834219486822653893462745033285489166681668027638675967175006701115732004305226096388 +(13,44),1325386983524174316903165141533500056346628940313765115606181027899007914214740582487460910924514865308747238635737511516128039379 +(34,23),137316422330610678425449503666208656589446993015398891341100299942277813884826851911581333575027565520 +(20,37),58456081156806724014575602850645038989184869854745932335313199463790232814286737075983831887062979808256836046423560 +(4,53),60246260715047450479552470667257023764698040158287553086375996950053524658471002392635675660 +(17,40),-5399689409265417252550741925213808669884342301629174821738335840394492531561738588366302831851011849326497503279386283893 +(54,3),7109995074244264300921965088629183490357018195918379950758534929992135500 +(6,51),2897466094609183104826257549690545411734812056087417864540079126660426759784061961498181492842544102037267940 +(33,24),1133007765176777358785574691213452822290962991908116210972297133965459159463331277692055110705895693735 +(40,17),77549295767393508864394528909324146933067374716059027307066823942553441535440951649684305400580 +(41,16),5022452275236169361265039629937588664940157439042772274434833119261899020424104240190555264865 +(37,21),-46733572643481028305946135484391174279794769947866401088319901726195855953340238221649110959053832280 +(15,43),49863662391713264950217774505243176334771824673129811555594833386302477840345525399708923864890540013714301615314051460632646080 +(33,25),-283044887977405484764117767396210893695945221546541221828977069591176921861777492263089507139680393527296 +(27,31),-28516776535034404927287687581761487329614901627008806964286248162463837266717694717323576517826620373850806400 +(10,48),268232503564144156223223166248611697030765432475414814163498288212589053629413103094862879786419352285601274428981646451976511820 +(35,23),-4209290684540371358330644600512244078774898651752415681178026663121028737660585687472414965543013378560 +(5,53),1061765170741882900114644019490330648316488681592050348522274274518997213214294577600381470085595221240 +(34,24),-35678834346512655670663066584618838131976357488505235200740491022068915721800344543807072890029664545670 +(46,12),-625511496070462751644864639826723228450366777139838892274460789214207745882299864713867800 +(7,51),108555677521017489424164803828407979252220819787801337069389568727569407699725091341288089848030027984548137249392320 +(54,4),-16197143147432234146517606196922084255136875376438789610679086246067796977560 +(58,0),-4875144527355423405724739593006002207736969163224512213898669778928 +(16,42),-545027115449499205896661334374604565944664954448787984894435028986169421708964736533534573209251612773447984605184384490393960 +(0,58),540 +(19,39),-1438176921089349754345495255980618180166198031120301345919732000324919922075668751483217471560140473297576414970787463680 +(2,56),9331694253302353737003343611320593170606075569040348302534493135846 +(9,49),206136061839290031065185096720664069342827487637458611368249460454324388027381995401213455313109647109320072059105639008521320 +(40,18),-28471184312539456432430922613830483279685885583967486305421500973657731651122743868435253700088260 +(42,16),-124960020092823629863667586980868446008971353133820695020254239782382621024323224758331178175528 +(6,52),50213640411879650866789868082508544123134150283004412358084352242806154389733827126660076073504859754943893760 +(17,41),3026244124141769060929502610678781856784216117774775990848902427141039478489649688512237829222541070953263213728336531669376 +(43,15),-7043759564256103800954611106972285998102270837473645068373384811178654455800906708923205541760 +(21,37),-769470483521187065014496206946620143876441285731815117091899835598300922092561822032871258080164998549007150607417760 +(28,30),-4441834001340435259439617573481616965613677967216881131393049163175168434906762443954971600902698160260428080 +(32,26),-2117906037303119837520561260128981115414667444932465570547909152398653732283948030214653935633626627685660 +(14,44),4951737171932442327046244190051163906746196560918663798687623361878286564264441883136881505087257745087267376471952741032803662080 +(55,3),-129607616458233659041431696824973077501479791686893248133224820245704442240 +(12,46),488965032477180344825472278968060104746783290493408435195713840702928485624340977669352551466410280002117360761363166763739392742072 +(36,22),-461532297827309664317366697284580840054430852054998918096965465191534525914495490904041930283854516920 +(31,27),-15075407371665022952411904813091878125586805900936999626834018166109655978873049164229503125899507634908800 +(53,5),-1551699799599617678249557814860063610813184906218983730968536659136801366623208 +(23,35),-80308801488880749861286001995683129303756245628305650353795313803762697756172943901799471918587559151365081253504 +(22,36),10042055012147645565502412934840091380377296597869232877846500971495218847007614153025812552734576111041249701524496 +(8,50),15987846811354833428478816532595882824912776837773241161810863071127393508667990044428058741121001511941653942078275985480 +(25,33),-1015244882619979421844536955928693253482089736467202378946355865396025878332448824245953230276437829558641836560 +(41,17),-1987597840796404236419711718959972653441852883412230780121029509616573719076530027945835284955520 +(11,47),36762949900122192670349092205981026804911193542124965222744492641639172929067149036379408724326970506151526780912799117376483521600 +(26,32),-191430894325322038857801164461656107968572912026054094337099244537058713769194086302415171118858903749993149930 +(4,54),542334378799555924595967152719384802702491008901075617652303516378531806160013085460405128960 +(1,57),187339078311276182949116004128515033976229735720 +(24,34),-13186445576474194713836183302437752823007860946217891673275305307518037244977097164051497697751087825696248674140 +(39,19),-368934861405556879260416965543965926978567726360510211974503890481059653202555094612735920818291520 +(20,38),38657151335272077946082711531189018526247306919105160837776030336432517399031041068392384233398498531341234050205962480 +(51,7),-7425900458448778482341103738781299460063478413773264451255702926857970513618801600 +(52,6),-118573247490922031077409491992915714791515752700546235253816184923562607824758000 +(13,45),455994567842991426919117416009022081953296348260537566138017191211392661873027882747548715339692257981252217409599186067277781509072 +(44,14),-354375403151208651882182366789956079871094239385270363035581330743711133484737755051095496920 +(56,2),-746190186187963155915581858526118275443057582729735783894374377395847720 +(49,9),-17259295218386035412151339176668758985423297282824490074201333017442717676923875212080 +(30,28),-103033394358836637152336799733691099303933123768391631540141291468536694855137055249211838630777903953306700 +(57,1),-2750716272868580819871029518715999225659562533721574875913990919399800 +(47,11),-21708355890436794079218202683322500049119634191181724857620193660557595904215196319144000 +(3,55),2258021865329397274287841603229932359612313746689010949394592828410852081373128640 +(18,40),22382395306989873902315293201359014134083845856996963312864938458683678864901803807047944512705056788676258275425749552592 +(50,8),-388700547208877443359154533590819206390840225975081324760752498728559384405474889310 +(29,29),-683065461306811798401863829906309788419736394401054921732116052260935310636535501348611667076840828819856200 +(38,20),-4344889186043431729795350942751111354533601416908133509331680485111755719154247859132632386987363708 +(45,13),-15837432908401205917192694819294523228110476555555507007164635381834728705618406219008223120 +(48,10),-657670428235073529629381768922789943532417281981328085594828124686798267281195715684408 +(19,40),64918305224134866889237980221742291643472511863700338173467306681274945216093426405319891352817649753005050866489766192177 +(36,23),127820944665150815862850360219097125224983120742499691665487278628324078396177009396989157589370815958320 +(53,6),2289194043907183114536502363014935724416948233601213341724770165234677019925846610 +(46,13),360210464901160788159661013490218135826653539290706878306851644312074863324507682213666862500 +(32,27),503729530827955575478868143955246638469701613118403358935647660684122601432580832286415078877344791262432560 +(6,53),842322132314092854655931868521172711446987477214970061774163688595312427820548885506540873379075413890213539528 +(51,8),7828997220527959538562285463772380398959276500220619030688449603856919950139571123147 +(49,10),13868711835071650862850461388169687966249981386575097384766876713548669294430176246779284 +(31,28),3499950449431215601297265879182378085304336065292629122644067337879436058579821357317228861845971993948401205 +(16,43),-312800970660928075651595082258579382321014836957548098127020237230064807739043098168025554184337162839109124033538480170376872392 +(47,12),13860306013170406523002306671027825798229425388423185233805068753539004109373148997775810695 +(8,51),512636393371873439267718593946400783325656042600197832754974380105846708586995646288635822982988826034998092818588001155200 +(18,41),-38235340514828373375775592910171669032442817680135276627675884907890555722526146170382374453133808510749075903393302185322060 +(45,14),8280126979200848249628568423210669939467458783088519578792927900248615822832263650033985010670 +(48,11),469044151054487510599280949810265636589532181650709076846529804384157585729279965968208000 +(54,5),29367008336752345791169232270111234206008307538019436779637835446221493468716264 +(40,19),9961848476496296651184694914914305045923738437477068548085420530997691431851433083009636701907648360 +(9,50),9302579371638930903400915606207593394137673374713514577744294846561950279373508457648695891671538270796781113462854767411947960 +(37,22),13622119986859543413611313074315874869597014790640353475077687218814794042777508921596369168689279184110 +(43,16),3088498286113109998983814645035282100671417084335112081371249067188223677256555254927124129436905 +(2,57),40009745449267172160793213896298217364464051527571018808747815817360 +(14,45),6851973961301404785826330916739764092432880073654607628252003400220344984922389467753506850994839234748457132406896467956781394003608 +(22,37),9476934442589457686697752628485654901820065106810945792049796174852573371497178601583101692857851790173651231588963780 +(1,58),507932890723061255944541317270920056038329313140 +(52,7),146370675568300075639552149408732219621788543482933407061642629119478865235679258360 +(50,9),355538231376779343228902715572286636734106456855442208862391408637293379929558465061340 +(24,35),3606194426790125506582539249525042501668156196984486125042155833763120577461096928660812862775067264316627736969216 +(7,52),2508438666284612322722071915324888547913681014597736651947277486641433706189000261158888779384598979303870423458209370 +(4,55),4773838965142411118405287948659036981863214669103178207632355448678814304243364112448774429664 +(33,26),69361009138534174827678471225375732104689382348087127785247903302320834366836805102929754456477615698401310 +(26,33),39591653320200960208990644075432967942236809043603967635042473214473221835434074901510826489214284200915214880360 +(30,29),23485459486109483173682698399008630277695698506505064681785796737643956108967754143459794987784415128505406580 +(25,34),303386424328528569521529435170746295851383055675804059919512639929813212957463099960058958645165714218012581560020 +(27,32),6467940544681294383809710485061959272069955807023653601530779299683591877444682219632265339312676982250611693910 +(11,48),3576789927644365678929345934525902378123027554654933349120399009792323511143179098840834404484171588881902685052254849502919179741375 +(0,59),540 +(29,30),153785080597937949349873199759926969057022359622346861383167435703305528123445189128932635881322128700079402060 +(59,0),84483737069769564782395764625742490627449724530850334076972328606558 +(23,36),-153802650361977492625225498136833568459420126790438072077272734231451706921753947621762231239725406441976101020770305 +(58,1),48448360563489527537364639761092565733173810727500505443883575266819620 +(15,44),-11004138933315064894304622400355261624042552587186627577744913285845406936668560576573447812743647527681649248380967675124323212460 +(41,18),746162909025273282572637279464662199673729126652543502172995516838168008875289801993002916843151396 +(44,15),169209221775264665851367692066796878662529005005869075299462614269246289024576248530548677706400 +(10,49),17439423620411426433885072122533141136751118354361884932899377268277327904038760614739305175136402718755670923914703890663515531120 +(57,2),13366455980342917575896867550904054047441306942007469385053376039604220370 +(17,42),4031319184574910375558553537092777740598958216417655406577453882962166818713695267693210886881401104252839018962181948399032600 +(56,3),2362836672578679199101853633782877789240530049611389115587098404734765821200 +(39,20),120884678495899793115459382447833285386212229565239145201138025653991002412471789837302446871126384603 +(21,38),-383956878586458276210361425949700524311903345758210932137778268702405851983119201019330433828266942437386726516702925670 +(42,17),50573988246723908000536941121284375262559365933988329849963810313232591444905075828901391713591600 +(13,46),130984030830781316564289240667275373505608561936194496834777676455205040459253890222450353514187997458489136588827130299625743317987990 +(5,54),12942475582600635117068464791585714241770185821481071486093138049086292476862587948704289124654920597890 +(20,39),10470240140972743857165706907478804054654766853016530186426368858644334284358711948960732636625009653149248759987905870800 +(55,4),300744664765658736193790456704109696417834038085647793709732406612436373402525 +(12,47),76076120321369616638277223127902225820910480613060832093300842168523805674803254278262146275256571869043079748094822987593585654163840 +(34,25),9058579677025654121957730634935799516348792803046838613735260880780228755942665269892873498231315099341408 +(38,21),1339525572657594391557156253310822808919822429143470443461531460473945119116914364915136946181518689220 +(35,24),1113259153785038204577010249460704185831061225392567532797299778418193626078395435144668840632699513043325 +(28,31),991034688620929863953411184948539439001923159242684927167507566125433694342941695975199921188511778488023040960 +(3,56),14116935096484809114274897857321411039278160112335590668511141526002028446581000920 +(24,36),1918798826604116790087935438783214625637750563050372214858183333236583054451156269900991339743715971412262230452611240 +(36,24),-34418026120987794878519831150029023075589285146867372139751726701538907255800067928845410694587953019485440 +(42,18),-19407497780054004438932378474448513945308584441530036711881022899884123210156175889581328125206703520 +(20,40),-3614487142406635934913013164039693813621483928637339506111631102079347889475944462686260937077029646039350809085926230122240 +(50,10),-291632479630649676796855488247706755621570635006242956099191537334783597612706519527085760 +(1,59),1365474088344518430808160454156510336954478226880 +(3,57),86735579730539233553618864909981419074022078139468472893951971120340067320298830400 +(29,31),-34463627182981307559060354580815262574377758018687195064086257974638009030125842865896032847244489485783717130880 +(39,21),-38051389074640500779930085406748487373877502028718108193825949896057266335752248546150595108858054597120 +(54,6),-44152343970421142423781102323640503669015233511870730787444616633849673617759748960 +(59,1),-853897846066775911381314007266257607774222201407324623268444798601431040 +(38,22),-398358979499735166643154250205006497486680624263576311283720855604171130743240443678788079803806801504640 +(2,58),169304866274762152002874487233619097654588589412047809058893332286240 +(53,7),-2881069867833225913453813009189897343205792442067130642518436032752347422733075960480 +(27,33),-1414689288455885885815573818171461589452663115927601257424155445749023098567689868437376800812238092132260723349280 +(60,0),-1465427469133801664105212642591759888213514296527822977794083047555760 +(58,2),-239527334089527608796381877800468994234124322578148442683672438104923507200 +(37,23),-3845430303604809007477863546509150347916777554047937731140351123783941808332983942996250062764628490801920 +(31,29),-804599099788694241535644966050926501417580167468443208758002602066865161661440463666773979100585615827954841600 +(7,53),55844638729155883373213442146519020052327722663170449547120794032332451668608999635315874661952582282541469913959550080 +(0,60),540 +(5,55),153656366261835560602108211288623728243829467990345667453799858962136892702986803304474712656304342113040 +(6,54),13691935094022207119743961651854524165026572047488986668241653237459314167311147929278234157549414600119819704480 +(10,50),1065004803600944980557014638678477421481067778066396679719248048936441371665912455148754146195887635589255546121727716169533653855200 +(46,14),-192478027842625848460449058570285876525399731106188330311779093425053841482533692156556468633920 +(25,35),-99420484444543744546812803840116236261687263257905190592204240200061180254613061965678040676870305323829359233723440 +(11,49),322088593523736709960838367228935770805713700021652500893853196177441069404707216147227306024316474735947635556180780774131187192690720 +(16,44),-4808608475128339756017392386845491291683180758991638178197200621239215768879339920517118373961095519540958190601632714074487498680 +(52,8),-157397515612551811687775659984234632486714030987500955990855701623185277665775634112480 +(23,37),-110844104778250659787649510880540570044498775882787494464793400643369425257182055696781154965411368010691094704383816320 +(47,13),-8155737335395946993880507378416721897523831247193613838368545248118671350759875743716728176640 +(21,39),-54967444211845851464919134592267331828389197146757677443940733448086390773211973591595594475199252713763862393143329987040 +(13,47),32268674669444750592085122844189390049394024053443720374614435370369487647698316266725432270045961704633974930799138248313453569465805440 +(40,20),-3334474213950526100681831418343825311353938600765162505390089822691714202820892603405873765416927221900 +(30,30),-5318630584191871141168723212916560527614711756804362513215367934352729169062352818567492617497135991993306691520 +(44,16),-75849694003251813240622032095212247622628522006467744188801211125941700970816404098396603371144960 +(41,19),-266809455133241195945160152411213487855556572812357549009626018783871349989889504994056677191963472640 +(33,27),-16713276866445267735516994269410120742126206564031647921227409460759270285970529370678327111427285805707737600 +(22,38),3516490039820860162151773813545957533262342897587413637613637411967254808460706654205803467612562266939196988278286221440 +(14,46),4587265766963295488729839195891477341522779896921747512861024594835755599635406319278657729515653596436927132892444675246971220217917440 +(28,32),-222604016099740061097138685656603578386767942860686934635351294087156484100066701666216187811545428602659794303040 +(51,9),-7307059618351355408397706013705715090179138097607068093565683381394808063221129551033600 +(56,4),-5582835902832617392872677155832983496285864653006935272360144480316076739043660 +(15,45),-27290117286276532014847453000974714685852347725697338589984586292477551423930618226999023158364802746161747134506363187512853586685680 +(45,15),-4041518079854474405582708565482161479578175987787501337095678483898611085868804492683571382821120 +(49,11),-10100395642106495137499403086917496251782975449018722140325495432060327230943300933969861920 +(55,5),-555461986837178863927232780048565681315473174148266371738518686222978764274196480 +(4,56),41117395553384465996154954270933214509114484728218195750813998862688276355014985372732437876480 +(8,52),15730309363262733627996670933239902032751380470323842153350120924873278654340599424821166153851286507954040934264092136907360 +(57,3),-43080148072998083627271465266720614655839612411375337083313246177915434938240 +(48,12),-305915980519710352949545583529357957159920157825912592311521768816931599691735296853446825760 +(17,43),1935086367842370416892407286761714274620340896383896522469745547889260989258031837393212858107954087418972250301151891229385701360 +(34,26),-2253188810623530490139398017720256158004243814041168384830457845716958915767846513892395350170245131332867840 +(26,34),-9267141297374817554650192783885023268868430511445497620251022444383864242164645833484093865155635988660256449064800 +(32,28),-118228377471298466357027506444127677249799016506686413918651761900362633152963136039887208396868430699124555320 +(12,48),10697415710517910103449053539285612248946057163809802304896062490917038763245090081320050117268071904458425948923949402063766364139422720 +(18,42),-34423284943763351403064059012773462652739444364696980160125594419432333823982016964970001126069388156863041067504389622138131520 +(19,41),465433511415938997203552711803511758267500666966255915116054804449213476399333061001842949903038866989753636899850788972584000 +(9,51),398488171573483819680486524364720755714964834662233965025968720100604842242951967085949474627133364763361525867780343188775600160 +(35,25),-287366428111310455238791452064100612455048341868903871515398559619582088345843193849844791531904242363078080 +(43,17),-1277878190126482699334159544827766724576053345668921283774651944862121250004639783547935167329800000 +(51,10),6115823575156912318397661196757353983701590308820581358999980365722355861529838262895878904 +(59,2),4293979219999664162766642147389532397016234866392640721480892301112009025000 +(24,37),1253739961239416127482664100150679762389538076771675996777010370889698440574947986954776463641811612795199331840750795328 +(32,29),27438872362855021555359369894834966571195531022429533695582026379055092754512626734192278636799542171551163688620 +(15,46),-12212127594601712536867703555956469270622289957118403104121189126666596111046919783423300292228956007116634883989851898947167973019774640 +(17,44),-7420392509707031861129835062734011862332878007953307472577921497963527957057908966939323926073598490764171524354792367557934808150 +(53,8),3158787641715586305294841533192487504511809617920503208894516091988984365094529341342875 +(46,15),95997913128393474211111055417625527809787543542435404268141552038384749456347048582603102908377424 +(9,52),16237982157249502271350653294535011112464163723695890232325637488491896703667170217556981068107584813040178007699296297292418675273 +(54,7),56633144205324294135650219133833602686620505391928039188945768983927271688050253139000 +(18,43),-12710285959254717846108406105654935642660424471937391137703359907416114723069457336861775741501813135102455788270957329789514140800 +(40,21),1071492758745704529358457601024780106280542386817738535435734241315712282452694522845873291008036820294100 +(7,54),1199373404533632046107602861805509547368624451418474223553556036835435999719663032972496118532413498762989846591912722360 +(8,53),462696358003932636857842096039700915950758997676870288520670820052660860526384871323695122779286788094626255324102627476506320 +(37,24),1054379198189188323265781738890721514611908806933321786538620061945375279098172139787605056495271217574688295 +(19,42),309187730375917036884053228803047531567776460015115163845210018410582465076545502086305622696973004567968984965553521590016616962 +(52,9),149840939745006534757660106838988854747008029984978532276238129992623393083787957897207080 +(44,17),32072000955876732589975584580625670771236165128489052530856893814531947308816138543532284103683002688 +(56,5),10500276625596706642608744524678618446957039720656155668543728819700797473522976744 +(42,19),7090049656270011876108014936621732617887840183854465638374811673797549487043136725235351202093457559800 +(36,25),9035394739100220815126641005279601443419588309858941606181350161538729578210453572599648754438612267963881056 +(14,47),2189141733686653772358682583826681992056779185824192808649368167665136603489398161008761922730901853032928504354810584407352105486383160864 +(31,30),183503454264686644291771437484201529582960596408849350890018436102331768664927164312025081416987245705895708445778 +(35,26),72585251488966788813585669588947284981364795291076284214275952901614839700749199728345238139728802972302246480 +(12,49),1369681824154989069475550898985485584579484766652917038666722770665866658151275628995173944247327634548423158791147751091078977106051850540 +(11,50),26961917065165073760027137440999073787635018501236076361851335972045062741417140048242104324172556968105390180655137602705781772678121432 +(49,12),6726512229428009404372707829238865070658861989147755772945465763751131261935053026432990418750 +(13,48),6947020157441156006473395296835348367666529375931436144600439271324174229479848834583270842463298234666608045752766383414029187782807210455 +(28,33),49498981977654050205607359332179139005106396271146413977301741735248153950066709193863887109303572122970604835333620 +(16,45),129320089779509482015528730833071741522932162894594356269559507876677612450804699105636643969660531314082988813420462856035595691273476 +(43,18),501104360921279061118063277004128483159190172756556889299698861560097945225785300578919786822506540820 +(26,35),2722043020413774576932455615660129824600207101989979355660741234468917691736551892023032702062728577728066534333106560 +(57,4),103612628392785590289392598899983260463241677559481084700522281206088807850217550 +(61,0),25441790437618601485560316720723603839669406908203780389727413584501045 +(33,28),3968821676089477058033372748708461397381787275444638205527556040076927678781362571911988409699413337396188093300 +(60,1),15059700162791361625924852463867046860454521817463336374811837097063498100 +(0,61),540 +(50,11),216799213104955757342792916218549076880633918368529452984851320975620748054295127575562815880 +(38,23),114628877882029487898622890439779861552570549917514377575617624831885168299955797317144293550475589399552600 +(34,27),550388511446753540448033162809971955190111620315617659688460744240585900676169714242848619625495245236044236000 +(58,3),785523934035479738734511502558755199920044932754163935613460948167490607376040 +(22,39),-94426584876321320186233824605926032666535348346258542174304167268252981876866632250977438478430900369924635923436855785720 +(10,51),61270843455348405606236738970254306385581728604055912485053890843219224149368794248632314746642406411599409328422571645458148486034320 +(3,58),523975682765245908966531803439726685174242615334728219440528089294659659922791514420 +(39,22),11544515559873657200234813049986772229637990026770642705027066347051525490754557103373897060254253885142852 +(29,32),7726779606101372514506343956715124744737661677308867111437763699138289493692369080654921754652623692290841081525700 +(30,31),1197988538916214298368249837523283641805949302025199159659306207009845194819314005040909050519730190287655692504800 +(21,40),68076723844307846075831734139014962124281013966392100807131450758346272547475514680371098712109683231006215547391340819777856 +(45,16),1851375851616446277869953361651542615526849985044232831068442588568756118014897940234021928845612535 +(55,6),850776755508160734385735748020431183065481578260261749505254271724786201792238333150 +(5,56),1778217849320380109526538757379239349918542971202486046472045799652857474263941168889622704431314110634460 +(20,41),-5463789396657336161817671628672612580010303233761518745030515753553122183265360739321773309061143325341648436435627764441940080 +(27,34),314503860011828287705527114734676582154924251739848490692973932061048085463837300755302459898938823769940736015617410 +(25,36),-16022042653107657925942846224507974875691336382822945427982942179931584952361600160329578390105998109292551041530026190 +(2,59),707333238382165838934438415258323392994908285230375993868520687183360 +(4,57),346752617374870281613433340185489214711942048340856256055631703414676545586233369585266125055400 +(1,60),3640440486906994719864372406122760867552669872669 +(48,13),183857810763953111724658476033358434272149458769791788842960455534617009511055657870445259341760 +(23,38),-27452371512482888116125435187004288510961172280398570567009864163746112779475900843604704889277020836627681153879592593700 +(41,20),91213434834830268944427111677966833939874169405037599708597169574230915623498347986477740867652439002695 +(6,55),215889808639049528996916921815111763747397223699858011866065335202792119359657517811358911516377868146948019447136 +(47,14),4452280265636320114676801655769909259819568036588770044236708623136870732618833713699316764580730 +(38,24),-32008304498104776527147347634352228064583501933824829969006354762175497272341667035373532269861323207390774432 +(7,55),24880391223312308403608936535502107960714804584426445733586539154000065441865796004888116982798215124950944519862194378880 +(56,6),-16378825972866479472188233293312395471890642886631280698446767377909816517980530956920 +(57,5),-198384413638684896116861829522590025311515284663658907093200371382260966439459173744 +(29,33),-1726841650033974642224197035276487410339880127244124743438784418927675497573461582620139436083272784292644533047322880 +(58,4),-1922537053507654188174967770758237195923370852945139788642877733875721543231231800 +(9,53),630707103216788553675453115056944639538959751558966580781644445821596335481982477301272575064691483241479438890063852964850457779000 +(53,9),-3066098504243560487119669709658481684417689293705515387413267108142817914074967628864334000 +(8,54),13066600674760026841865542082561526242067713254490498306704298193305679148022508933510550892718970399632477610309077648375418680 +(12,50),160711976337242426336490829940427542481336937839528588740453788156032931986217201805763708015606964937173800085330445110784253671930061108096 +(1,61),9627377154755864906087079834453811412814041146920 +(31,31),-41580146884659548163044864535456530020860118032103253622546846570516322074343994161858887264959106235265642798363640 +(17,45),-729184511215126159805433075339252617392440990111800942805300891727654918730663661051972296797807274096228784092019763641999527072272800 +(40,22),-331617197157991386454299042769841406096851906755894078515859270555297616933363392727730439835805044020559520 +(48,14),-102499775527648191465888503526444786857570469979238223814518969405496857973161414362610313284024120 +(34,28),-132326006818169022830920968322578698041341954253147817787965698378941479759063448886276719770570161332285430632060 +(39,23),-3386225128948809085650133652758408612688427863449940706459503992675863512872213236459391674858673184243165760 +(54,8),-63285211979996781012672974921734079077229849101596785474675512978284479780946409919964030 +(61,1),-265766866949140708413386725108016730267988842274175340999084935313031446600 +(21,41),61809940708877133441502632868017957081330553211852845634658079433536410652377981565011592552668821514352907841484898045668815720 +(6,56),3305265499121170599432254668136143728385877462323006360101370265495610067545064490260707393713736476652633383835750 +(47,15),-2268124049355166946491676748269304550398071807586110524590970025883866910207828721237255018470635520 +(15,47),3559174909354231286017876384702164413787336178699937303376740107522903858116557162857897599352140090142566476992953176705924372247278942400 +(13,49),1325505312342834467381023087732823760448890157981091199858968157989978368679057757227037667691929539896678608097349953653145274112714588392312 +(51,11),-4639010159068495966896655920351417337042170234018847756100883854280483703015953022722147079680 +(11,51),2106273751167311754893466600420941426794740781465030224512712047070774590436119031191422515662033771405437645107484159141811099570137813440 +(55,7),-1111798095676687126151007595119368144005379582467347824171100657904391554112034542966400 +(43,19),-186980726546556953710590238134681261006549082173751450512573714776216691806542047163198392252998669496960 +(5,57),20075170722719576963099426338623706084081358489820261469451507616956182222758364515889058262177037400205360 +(32,30),-6308939302817695203400310497798130183570467690292341327370418465638569695489872832389934084413083882214534743180848 +(4,58),2864941869393642466267297340093935070548122267468845850765752403986465182095597041259310630010400 +(18,44),1978170346523146334697145015115848467321441059166357932368845083734741335017031977333595064542761016894988702731172657788282553125504 +(3,59),3113755831400006643577715513159255612460385195783635395974470229029531612002407949376 +(27,35),-81021752577263953650477140119454235780849587857990522238579986337252216009211444560167209439519978142331178408757573952 +(2,60),2918606631326208834177333601406720313092171363444958201033757148893584 +(37,25),-281567385554872293836807195803809137489669054900986256814699979524370734656329790663851288889629051486809835608 +(19,43),79116884587251806816608098580684098819518691784381380876427671661180398779951966289444443030101756438569507433610376873468150654720 +(49,13),-4127483561030083052029621717035314257772461331284251286641103516292786191940271369476310446602320 +(23,39),9115937559108150160219841268820313632816281214046275368766264530992535355645026627961601385538412401860806275898219953063872 +(60,2),-77006101043040796440014973746964480619196680213719048845758516756344101961120 +(62,0),-442089646554469616463846007454864209994872300670730984086935256635611474 +(41,21),-29916470427481624310428797319722275700699285194382212727042896977367830915751826347036649987055788727620360 +(28,34),-10956428741809012229080193325785646865061121091188812344660914635199142743746000448615801392454909930769405381461785544 +(59,3),-14324482388860471925731516699288918670322975751822356835190213220568291699036800 +(45,17),-799729444691507766319829135025694573636074809949776891827867796304127510781521285688230782038478694920 +(46,16),-44923012314087545791897585093305973276252207843639470218857187542401260544796428122211969306306888720 +(20,42),-2770631434472057214098477700851296791507373853075608454024134133787694675978740909366233547149473650883807464285768268514310658920 +(26,36),-117581788099230999311066338683816281504063433543182656822328521494023734222107126036324136528003190399867998689960011220 +(42,20),-2475005560610614991971923296153677405922501837436494261455771823488514125396152219190353153961783310794848 +(10,52),3329775082251672888414023593332211619360891780471967173990587350748926813203479856682340160414657962309051671219801296031485655719807580 +(16,46),87296974908477530986336608253072340407368147947032014674592147271812063531245204276431145884576802875330206846191964577660631230753909560 +(25,37),-14522644319674299338481703861238601588818403859890052092620847871080375033674768997581533873212064838380362657456951895920 +(0,62),540 +(50,12),-147366610480740188801995950618396760596539394563695969284271947168815895742792790526269907183180 +(36,26),-2318450841531398240014204735114186721965671363232148747389774767037802703101562466749335764794876066054859961880 +(35,27),-17983564686116992840788925581318259643610459686330193841256995828282701492925983590690474373072848191616888142720 +(24,38),130272505947823922515553475677764982331213754023553457173407307872094441324014063033837986275546165327941072270735685816080 +(33,29),-930696785691421774388958780058846897800905206527794831661138974292046952599726320618553640704380528501892091133888 +(30,32),-269115858236481213210708056107115226026208879421435959678649620709869340520691260895641854808461474985731012094571570 +(14,48),826850742268331312697052921120115222494199012571478365281665316076389648624589987519263422565551502378891012749005766192005383143002695372550 +(52,10),-127919872242912358235104452474261827246550261311321067340786837420854389638832078185361269404 +(44,18),-12847553901544676717898060157995812256722483463068295727163000246211581586737743045578092036738123479800 +(22,40),-1025115111931243902784624888796744563154061085946421441301059294555061263059488424853363106970618194246705613878159062379485552 +(26,37),202774511541698098095435311246695744200231968903315752741085963539825658538742991229124177174543649606946566619927641430060 +(56,7),21799152842796263200218292093342322796162393326301290790652872233300798258056668119854860 +(16,47),782205087921064190086291061834187481965931594646924878722269330343138400479543563262826249087707410590019346597481646385770497791680930520 +(27,36),12319190728952305493903189965927960016750820197781252419918809847366983089762895027780596845235759376203185351698778270460 +(59,4),35665152641428191978137744150184805212965169387061700511877963743388427754616643055 +(11,52),154097151654656156092386729439128540138690930810865229580801626365091616200921347628987800032157475579485898309033608013188887282743404378485 +(50,13),92287236743305712736859929457280171308951601854312106688392806999608182755743286727463785629106820 +(38,25),8696626580263620074227259632812942698859276442444098161494680375944849741415299193393434086521694201081919998812 +(34,29),31377812252514470469217548753380578589594381661120117207407156607071956505612849953188478009229571613307400042790440 +(32,31),1439455458011198020444683721137715993934423617511626005618491278396192272391897513105297116263253793292037405053774400 +(48,15),53314579913369450635234256032937771238153871468053570396777351132448630499155130352028082054469370164 +(4,59),23204209747160689722234116801161528219478843453673496263830399336478168580436171200887360881299320 +(18,45),5710649657548004229873671617359772304500165196209562156855887969525696749958163728145124295102461785601619293025449585908458201313285424 +(1,62),25259929307076193518311953557551413899190306774650 +(30,33),60309858632078682699513038496131435838640939944838580822475893838155060840622670206097838700611743289065013087607068220 +(42,21),828394827632785096268541516331007498913990923390247406759625046985171551584297535291649220365615194782764740 +(2,61),11897714282375345780543547699169102519363341327679591292162662942049760 +(49,14),2348984117441657409801622441555516866674596993903045210050125193540072980360014509685729760134651380 +(29,34),383720350227048414335609120310018966508668405913797565123164534373078989602109301222411037691814593628834363964574640230 +(39,24),963009252002715993093729677628727659421950561625128207162848025324315581487903482713426002825378174205281160245 +(31,32),9378519440751020365529525716437734541842345404534987813541307693179310562600960599465733835881227942652996136634365580 +(17,46),-538105905464729621313127573678335697511013034032748630113195628925540528296511861088900517668562788640816273814935664604860509964646924504 +(9,54),23394644348292893231042301964099923148986709345614912514837197013463982511359195193843504572862943237354004896088666906831182667442740 +(21,42),23640497070002266378536101854396301497995423919877656087195554618267632165344617046445653336241979405435046463431161792011740442580 +(47,16),1083855040394325223440223119640360047286191265326817508995187346252098888182745981483319971938213228125 +(35,28),4380134340476401196436515395860708268386891596937859514224854908466100281749795914090576829494113608928927197443755 +(25,38),1220727397334580887795810876423169069476216342218786945601589559720018927191756176754217556138162827849783396993552861033050 +(51,12),3217282536376960058596942989645693207944246601891259295936022491378632184564831042543444076108750 +(0,63),540 +(37,26),73418420859804974815993027125458677070186276240887925196255304579047917234449547888349935280597419425312900033710 +(20,43),-353757636720975191127860086730081595816072351179929334395543648269083632657450732929937985253164287019840509711599587050096681584600 +(61,2),1381482057036638514709489520216545886959655212176218262332379097045435453871610 +(23,40),13852870666871294880504102108526257632173562454374433807420514300625110756381212322268313571392382286439517388464035078170690511 +(6,57),49180294440712250706731918990896980018277212218965459541201383529060527974191705776392411511952222514353613225543360 +(58,5),3746131101271179486247559271382947901629694787222210227595009819980463195513790266364 +(57,6),315042441258702325050302462907034153857581577825183052667772762533329803473594591341650 +(60,3),261236794515914317777704737334793602084258530286420484614077302104830864433542040 +(3,60),18210043250636357184745400958455976700376298383249868651961995950580299128796665531593 +(41,22),9443893824058872411290357818430670938611319519983791070444558682019698851348825478989167868126139031460039440 +(53,10),2668869746788635709740660261251624945902263443255725302899919565643086740918878494650555311400 +(13,50),226638989218608388934670365290107311070770040817599216880644418812308467681661596246678227097812778729351132283545687152172118357525605301500392 +(28,35),2605854260176119102305142931733190051832126796123223155659800764965258168277195061515099851750873643561044432349122254564 +(14,49),259658407571101215819521039386350134948977414623243766288854592696417102681317164754173582077080230817025156985384469578588204692065987516407640 +(12,51),17376904688479265133583064466671262407143471104833507522464858405676359146597914340547399724827292160449247575522596536145643714525033229922104 +(40,23),99148121601331808843603547216751552406171525391367657931989348344588783610917130892956471360886806971373308720 +(46,17),19817189384716389843729193612796716947346289467056396967532652188257711360788153961384388822235434973840 +(33,30),215938635147815009007378636091730869257359632266212317190732791236984409902067907014431519967785483244931395573769220 +(7,56),499107986097098172334937517212871050971612747433834189685243681363048524307835354590351944023052057016164682424563431224782 +(10,53),171362538270541952259720252298306804301272286865142972732271503231829719164482121191280327451639160068213409979349892729261524803602146080 +(52,11),98967360263402671957697977730100716440606723569259070460866029186619443397107382454553809611760 +(62,1),4692998852164626431028165358231636071887619735851977988065906020177206101200 +(15,48),8563726527254214354059727058650170416563177381707346258969607715468858874910997242746891329782161852988940142349279021111048082840463358785795 +(8,55),354790411997579070421374432442672167525106860650368646485896711796813163358805256867946780603138444513259495321006252817252491296 +(19,44),-38302922903609796877668263989339336898469344651049238674180963089439297076892371044913463769428440099750672474428924081762512075283405 +(54,9),62610015540085093323985688971661244561451901480384712469142635547630042066667316231550284020 +(5,58),221256047981772231958879895684142596248838106562375461121923978543336715649024178458786812870077531541010070 +(45,18),327154633395922751049055707580198059591293764102280033558156227082720426144399893685600395686250416460590 +(36,27),582874983820934368535377013711573346809535078788010562777416038279016066358137738110014482484746449385026716153020 +(43,20),66632823412866243513319650782393092973668487473669542670002238755536629103656982928082994612612173925592915 +(55,8),1265814885247543358023315613036229326782665767431559623832768745457094785497038472877222365 +(24,39),-190030517270129876782519666700518843104871204649892821745370479539603180546969558868893580071506736666370648133687484364116880 +(22,41),-669630123766469682779673830773954958741016032492946548064936128487483839274462152107015495401780801045461619194559933580987757040 +(44,19),4895007528022344312127129039535438115868810860977053378734025133308451413336534451376121718942286591325800 +(63,0),7688474216083536743478257599966232845707658378833766298504881788915509652 +(49,15),-1247043168608805117701525876682769593644661416240092919843187437657714511272314786479372435835956424032 +(45,19),-127240342619973339176150864281242933920797078413510385318268167907648227853391613690094644004800265929534080 +(5,59),2382312119759394984508131700845600350832135706474932798376132120548713715917000186824063169120345805370622400 +(3,61),104851640882195114615701761671720479621597882917492120992991772283955803735852255254080 +(37,27),-18736809062088139801275902415524577348477508869438929412263931939130142480692621417117047521740487337849210779796000 +(23,41),6850855542624739091035286178312616512644649366661713233708528248026027008531074502822158447884292503568824372151785751656522081600 +(26,38),-58284643187099700273522756886337227111852888113841128763948445730786263473073592178326133706394954035312346552084771398469696 +(57,7),-426904532180943544785395995187067401289655178603717187881313853563076486819601553480145200 +(15,49),6680479803649838208862004244546147435835985081771909915197818636518101316330219868431274503114511220712741705245598123626642863507003711552489600 +(20,44),564654927530621340833890028806594559829608634916206540487138728858639987770673692312393460319290289652938153506387153456736560805237440 +(9,55),830152514756340272775017793298101077714736292010797595768395975104641901761589134970495200379365493211503846991512086653864550624056464 +(13,51),35040184517291683084490866574029545665249686307739717494409310800008118306128468989379458507567766781597068051685494881029292696177094932382606400 +(33,31),-49655916819491183409352807595420159576768243806029243361700652284692956905064168708131976221092030111488689469818563680 +(0,64),540 +(1,63),65767204863353473708202169891283112685511993893408 +(54,10),-55547312439272450925799957295095373025080798565302401185264299897074646388435677642175945607872 +(24,40),-174053523305522215638465494521146950440015388159890430481643794704021064312417264342005301555987297837101286013119203664628590432 +(55,9),-1275957170807784633023707897148221407141028889556644403682384817631421390706711325425568910080 +(38,26),-2304902235270120048251571288442315980405059355593688918296945349326384872930772269225657087670783860522153775902080 +(8,56),9275146253276146145395501058272684832570208510890604363889028842492896272065078674774620204570861627356586048336983585425378571440 +(47,17),-488112630951778453768109565258692614843710223387626289448802260139601131197258288981337201478979637359040 +(56,8),-25278411694548421825673775000187672515549467858999873002876749352975455601917057805390735488 +(40,24),-28718218831746340190409450464959966642004536148595795450116018282461483341131523896897930383958092242971633991360 +(58,6),-6054630317474921052075388919538315407225535017804213541201319835597718111226469931882240 +(46,18),-8276155791006377283764249639198267882306005149707827935763515567397803090982184149514493948416918937355776 +(11,53),10591910401164565047682812434278219098356101359332750098060641522976047824278763912446799814138706660184074846480743578196008586384094739075712 +(17,47),-94799410827648551391884028292451142551010214830589394372930799065331278980536274422159037280343468736897041328343273782240493946669750922800 +(22,42),-178386509954139001344213790941805319286333098996908128924854057153281962643631042311462090228709544927686943180360250590772615334400 +(4,60),184337565337667050671062634652255213742897237422277422010218995147068317401383136186219343449687264 +(25,39),2992918796159205799484945194061681589511322065816802191220719422570476985013625586010423737767768153064732681428004662187695520 +(61,3),-4764576816854517552514395994238978222102290071408625947272866297755722525790043200 +(34,30),-7352490802741174031881036542074829139535578644364113231814631577176805630056454670584149406757902011507683725929215872 +(2,62),47931569645919477807970800304155481515856684037467348965185294314742880 +(43,21),-22754817022751539953465810331084724395103340908462432068308089513902248521132257476653069837116113624376059360 +(32,32),-326449412067625846314337032129112382669319567248368073050575771656848028842284367586075662968762673783169224724532878520 +(41,23),-2877927547606415030337372436444823082738716919740960735190990803146525776264967446578172225471691194200145040560 +(16,48),-35047346119728187442077762173804838874081242797781174404772829634100407814073669393349309257792249222588683290456365930816692267334376779285040 +(64,0),-133821384137567450087285119871701177767038446157418815360148026575639277568 +(19,45),-52198477918716661850164224097715527663940356317885413452559828493259185374516002492541135707589028115790587867010516901537729791506341600 +(28,36),-520614083033233706371332698250265841100889421770145406608096366877814276398015196595309302872630017305739371103647247973120 +(29,35),-87880758256322173600248957318448296220926665106805541079606233901798215843573501905641298773013339564698893559098072310624 +(48,16),-26007084060277620601897321535258664939163309885939138076564546524163934585703613484674384310728971332480 +(51,13),-2055492785744164659664482618715803681328868184105899132816753763733137678318835489867696797090731520 +(30,34),-13456894188008347506539729472006310342982096578231143512042919860139408819109616887231000742371296346812579953297910188160 +(14,50),69812789947617220710904876070204029922145085127473632675833723626896818983496732935909285594555395893473935166439573719084293416731573417665317760 +(27,37),-4213959148464119544900168722566521096027844389985399459446780732929860527255795139930569683974802548465251304115895750090720 +(36,28),-143895232700723981477295546287137974242204240863834206764623564556159242253739340495322328330653375905213157441265360 +(62,2),-24792203477890642488289997691198429321187715950740800590319306905762561139742720 +(44,20),-1780333555230962347851886869969226480135309864977183792252781456233060388988691951270537806797656383057090592 +(63,1),-82919483934664193435584712705178369042395370053258433710115117151335344734080 +(31,33),-2108420540929096555140070451449123044680497674922933893723832797411894716195964734894979680253130731670232300775196741632 +(59,5),-70702505449206128757308944868362979511193760054225056804760974920296470186279178371968 +(18,46),3524671746406086941664290778053298130365678107498510273549256310572412331508370160049340501988286147432935917535093646607861093600457703840 +(35,29),-1050952855165931832091146270231811182468763287354594344539095650969113913948587185624403854615596108946169967719455360 +(50,14),-53595417472942650553249690428506797872817747094931788876712923115214394997752755255229262411431628480 +(42,22),-266693515822332849386028025351390225217731186744556394946497091736236899840218643578411417324765338167544375680 +(52,12),-70002999086625797856095387620568707195122592267586912633197829742836328941456788448898989386486080 +(10,54),8370562127410264654641104205458576510684238808379296093144796519100034645887387003014825080905393559855648716557847877019417857053714214080 +(21,43),-1067579144962673897773228790997211428469678963547079148873921424719782836786983933892990340407083475819032598088299514759798631485792 +(39,25),-266242882540302042498212536137753066978487902386354236124331888769022773793056042249849329485185843675688963847360 +(7,57),9692663545612628074341992361086357539782022801346709376871047583126980027954854821875662465911250308612693367822996473754240 +(6,58),711818438565761414006086668011998048202901782934490137605291520395667871659356802336622303993794020401065882611324736 +(12,52),1739821437766416800930768990227573966886664636135416015785287891745020701712868639215319495068249487694530801208199918342614900677396158718696320 +(60,4),-661490762362025069137461315904577505709440420681614844691070044488953038915420452480 +(53,11),-2105259845691165891636816635264298319147625721764073958538880212507290091620561292378924250068160 +(37,28),4690474821169248456692335667624295633293190558045135804035594094447387890136914559153622065688020848385745968666783255 +(5,60),25076161618528970541898231217522042731593679057507765047168896222946674534924477905735461561677447566485416220 +(1,64),169949328419306059983439578820792980682217055786105 +(43,22),7469933363901453742146293628600953572691942318552677111699934673304891970042794948020687991405981419051625296330 +(32,33),73699740302033528888490440428421543172863585357411607699060289530743148189236214304465019479543603248165469762157373310020 +(23,42),949837405812552558736735404932181954335192576026924382415721940632422655456996136251298282535713003023628048741985035592779260044060 +(33,32),11335285029528961070496042036184093422028015017820705600647578615138042770701913632872662419401661502213409805700952579850 +(54,11),44659305716074941448275091959435403521408285809059073316934049349236276803037142227266877607220440 +(40,25),8079833914667891173533358886370670000935897612093548884659961436967913994046866543869537080349912321911815552838840 +(65,0),2331070151702390005189230914949565668247195115268153131420157684384336051240 +(49,16),620749047613785634685729907318952588730940740887481038524230036478599964882629311775673008903684526605385 +(17,48),156921935545404172958033120160791871175143113656060794186931414498583658053594357881744115128160219546988862327715535526118362801131541484091315 +(34,31),1705463459475874102359089226965691814092760740573589558230925743847280438651925002015911198135442269371489930436925677200 +(55,10),1153407949623022697243824458714276281626913414806627243484405747538734343743658672904255737957150 +(28,37),124399744652537057841135913672161154695403504346071017602153534231546089553879139593737789670083807406059568623630229484667080 +(26,39),-39446391944320675103983834294115191308011870201221262966788770821740783370454275889973910371102554951596821176766799272941287880 +(29,36),19075485639518512705554013572676682714114754825283461023151532702610793786382535010742666589125778604045354958196095777085310 +(18,47),564516174568824179518831976861650698457524166792184655166310808673856860266760568204548636322518845457721324631160387883424799796677212576720 +(41,24),849002679168294647140890706811490825647057557351672564694240157593515042763579908842921348028061617073717027280390 +(8,57),233760629925887860180527853942266162471100661333732703985122001083367891026165457887003371469296801264504303912520881331974634069600 +(11,54),685985801924648524777667196675800622815855145802377109097168373894855154593504269645699042433717197827278078913237019501833327850478507732451140 +(36,29),34955136860706895360706991124658637214240055534427207172241810403955336506008003296447991050199712755097209513543797200 +(27,38),1555710783840093549886547749051325850627588667765589730277691486948224064820920327988404839355841342805928480648496496393944840 +(46,19),3284835800230142746964509287350694776287213627163273510799022565927732103779523944809100984141766852397354680 +(56,9),25953368767204140260018202845664427767813219190512749538972616132112639642047649701788160857540 +(42,23),82829635075393275991463930418589583259171453336240132763710318656243555481710957174841307028407579644758161937520 +(31,34),472221506916608403521418950918202079181544138149837736157460420992837862976932905254645295955626811550477980274751324867530 +(38,27),597298031934460681799734209122353704530398250864202151864478416703684121300998827246298701923062216539762259009510640 +(19,46),-25463939714024874004800992678622213852174647499995631357150850509522451310796594138346813801549208355951465909496875695145142075746505782780 +(15,50),3541776640862310641911911258683192408067556838084521140729675627354455068743441580182410893591410366687212244091589335402960484099048675865736339290 +(62,3),86905578496499007648541297322291144293659466531201068535205117504549166642950852760 +(50,15),29030288968686186392223286672397495344298425303570306784232769793063678174806421322164441037800954769960 +(25,40),2061740923591013975557842726133879922340432215229467893507683725559804588704491711056227499936800154062385300123580816535286379290 +(14,51),16393111243628948247651603153659870014484269895955117984065362263644015427300477861386526494757752806556649088863204707544277184861095485522750682080 +(0,65),540 +(63,2),445071588911455771085134536707133833339542150274242305670644684803198515010418930 +(35,30),248885275232885853718448188418177863471341509573899805147508144929878191527353752715963642304689080773415692979770339400 +(7,58),182412296191758005942871697087787046584362697164432044181472062481305475999212616908133788089351688277277239075805304125658500 +(20,45),503857838009519366023448864945697349105760638026469320437513792148467527203314083772659104165715953045296622335317818908038375997348824320 +(64,1),1465922813835595919019983296456898944054213740960560576226331726300701462541800 +(9,56),28226860794007220195933823067053091464065382512203429759708706471665659722921653100195095984654804717482619314119206115474499858803614845 +(6,59),10030071890724965727022723857331372763327719947408321948193020490542341487729853671489180213888062893806080126232218880 +(13,52),4935572112178330049988730993790075431716573946139430605186433896941797868655080251828260689983980917735118049952966680784824664810361773595442575175 +(57,8),504040159198083234937635838062842718438939145280382046345123604834177684209708746316836899970 +(12,53),162000645769168728128283422421175315482978981083113905185508356648136478945857760070226548901106909104045638421129366089962210779122806957174021440 +(52,13),45611034042013914770482735578763415512613786768224192394284007353854200384829825337471735254010655220 +(51,14),1217686684346988751536544852709563275579688708546581507446321286016348755187716586875330669335383328910 +(44,21),620183416201455366023718935581640405501178542117422953201634718603754710315186882919543553100957470182307092600 +(48,17),11952804728307313276565358211294415183947804128280416819058158096654624160393522527223676350280973604164900 +(53,12),1518220517067595255824115243529281111053877851460684810940903897454664846357900341423047993674301745 +(60,5),1333737765866427471473387642517280126291610801306574997257547421996973603891947292458400 +(22,43),62457364800418771162329366529156000191854711326581258925255470914484692970415886229722611217093776533983190593544759386190066210940320 +(59,6),116265518541643210444911523590740513554655875439730033147833600003447198222159244762954900 +(16,49),-21994679864174621933845142379604728834893113639392660031239012270025888584205093182400444285153044200670819533451125033374455657851828708283587520 +(21,44),-7464002812681066774694216555223567015242507700554845550400049984908023054831339309213782026997700389384344115927889731910191965877008780 +(4,61),1437100596991421781644045161343107902723454409168207335558733744366691068302964369200564159661172420 +(39,26),71736875562689181048868927608598523793439196414585933281100420421637943582314747774909726839182219908523498241372810 +(47,18),208039452070408990310852643117296485610770331614218831907203053944753731522521677567134133688300762898267390 +(45,20),47219294664963930187617666308514622776330902740579534741237703124226008627055330969953272235158355596748669435 +(61,4),12266386770177633356123090180445350065595935025883689314836332970100555977408573076650 +(58,7),8350594866843074367611791194270554132228123131862565227459194979994040702218477304496371800 +(3,62),594639936805544460601108578459794002011977187724696397116637207918391499856073270808590 +(30,35),3035822071026138427688774253145313531314829186887669984878496388005668336086168950398830274095351456659135515229329481989360 +(24,41),-64265655507985841640639709635243749892436792290860716138101344770384344234952835077611034772786546638978779249528723063796339732980 +(2,63),190887727292695487506229951813224233601882858509862334211239631508738560 +(10,55),388915300032350535343837073125904441212251654115594596292443256779595563696053051585178927915589742485298904071157357561247286454994679158080 +(53,13),-1008467682923967582768234267897494102596999430026159803089580384202096510753600219805854326059737738680 +(25,41),513015115798951148681510850538878737836887018637780151089701211267690918307388832307834783757768356158499634451924844089737799499280 +(8,58),5686614542341770405668155398509197906980211768349945066239290015856197592651183256654108050919769240202560171122586374811637147358640 +(39,27),-18881612483902327530990874139403545903429564068883823517606739742959520158599680666570192607991112562478266601849364960 +(40,26),-2213568338999386882083551670696845681090628210119621968722457873092947863203172257122792660968928493117969768718547220 +(15,51),1464636503461112532089413668114263517488796154301031583243515754405630541780355373427295173777141036816726050426398271113964460507090797822285093278960 +(22,44),92453829353575755592963738854584252314947984469744071412005981365770967847088774498014431129837387882526349775407389623653678876931149500 +(32,34),-16571622504272731302923247464104149923361632907748643887423165172891804705067699146231824651416691197814569484406459153151180 +(31,35),-106047897155954976320672091096207828429076612960839493938430223280805359104952248181326540219099095047323738747634852676707456 +(56,10),-23895877485707803399416252514307481858312530959816884893452306987263391519581587607659023337751108 +(6,60),137702202453486006600279856953152973773679265692698092524976917104278617705648934114775743142696756371563073932206150136 +(29,37),-4234649294147329103040584341838480874900428530937473110378432228759362567704638429851140320008836149064349961029486466672019920 +(57,9),-526921502012878968112836828145502223764753861645340866236918258766701154130146939704187958992400 +(30,36),-675024232271687052736365160668488301985282019905874388744903059506551673911211600682081392187347897603305092821859071082194260 +(47,19),-84240063168453070693749890722772648587279989196472733634263881184367615841036498107936503110014648929300327360 +(24,42),2113785292065017431178210516753034807451695899025183146099640453185290617973846729137241246951963171319498902161839674672833416647956 +(41,25),-243093323754910229958884159607997225219626174305255005071898838185075813131438306115892387234052497032564769597831400 +(13,53),637414763298119910620114710863021316465298155610485665858772763013408346217105941858876806432584436067375873790687391452857647817570235473790576322120 +(16,50),111119343618907059352105022019143893727973484140554708706792855884278657602675814813538126460619006888729508649588874419295061386327709771978908188 +(21,45),-4894471256738502930987956027676103474913573266143956789970903764683124409656373189843206851112755603888732936570608689762625100617886945272 +(3,63),3322895440332922618069386715214316619239827847916078114628573998381197039208774754123520 +(33,33),-2572648420417533830268134849754141234692908355069678780468211435550615121376687750064066931251270460497557995701150753529880 +(54,12),-32824225513627638571243078742768867758406604988806985216941766529220960104076154951810086769559274000 +(52,14),-27553080193940330954380457582622140488917028259947020632978215449166247674760937179347074951275925213720 +(45,21),-16775598534148566967457771913332599867913049429080426762029002561215236327517129019141415176924006931059798525960 +(37,29),-1154163109475010459918033084430436124644632588732978106043414033123630048775867738740842618993450314559139221403685949160 +(50,16),-14740973398422099585276608342140649505007069829621713680695874374336482049404244372124357749411984894050050 +(35,31),-58278360709720504596784652778043433166587446655987645336038105330725283742907494797256018242362541462925744692286078256960 +(14,52),3411382423647871584567885507318809191236637743803331091877578090365839361006477274877101851849819393628668511285256054767434126418253047513773732398484 +(28,38),-40549749509305053005030739371884718095349580484655731944250836986086877501820234011855764665210495916481119065320999353349759400 +(4,62),11000351753411688063047295122417340395174620332230554481414812878418983977334706890158586598119120384 +(20,46),186706133130955525507227508808712566608613107288278500690327416194294159612468590511815175805944942173280433155891815625995640727793201682240 +(1,65),435952241878798658252982566845418119718391710801280 +(17,49),142437156488873124598587617902921085750188000681246517867371681271465205929598041209662755436272453265719683392023692148154439250352823987041537000 +(34,32),-392239823856742958988412724150443354178060699502772313976225550934056276282219703980426964308102195890827240166469820396694 +(2,64),751718848255837472805022694150737545178054547893874517265939869112254570 +(9,57),921078269966729604659024416844593816486086238283229135600729808122235272019575168775152885376854431087281050644598569496213742351233430368 +(55,11),-944830453625127583158239732286811383747487588324793552688707845568646724635378869331565492354285800 +(36,30),-8371574966492765824202499819225922289774779585734520996966788297932084901952684536001344643522834691223366039458358810204 +(10,56),17221667490974331956904830291178929205556688072355493105007841274578051068932757428745044510322738574253449452458189991636638372378133250956610 +(12,54),14082542495539589369482048121244421685919555131382196065665306804580575274708773390911115256554921651840722680808788970003627435415474814591936986280 +(44,22),-207567644715629904772993605364971014439053831525631048547136140580499693566858689540164494540065324403787667280340 +(26,40),-23297463563800920938165490401200857401242422336412998974280698317474590839529763683590172795051671410815786237249134724981144498024 +(5,61),258202182784171970584426745988150771516199750829155859356163884209769788471693496688818990598234272783151611440 +(42,24),-24886076663040050488714593609154653869150573492003890482347102336944388786702994001245748487771617617335186860477170 +(0,66),540 +(58,8),-10035503846313119055675117168877873905093264872050652480289951130158254309516053548867542908500 +(60,6),-2230852267097484636282370558598062554431143214874231991136620161316291168479385272356314560 +(61,5),-25147623505383690398492128132996711234381046070116856558814360585512367002033757600023552 +(27,39),398250220358064963133100196678875759840810467459942853044398475013151002929790861686827510049580001177497166086174877164913953400 +(19,47),-1445898675610292963650163123600341999649002324660006540646219119923397985630335977767587291455767154865503256949639367171662310552919599799488 +(51,15),-672713021628512579154704011913406782891091404308896481409025870152451918274697957697880796089711892166696 +(11,55),41973173879803368801906808746136806664188264860169001543839094814044924534542701189912457148642064906013713006704696751987345799025778343962780376 +(38,28),-151678502378273729583638662618329487715104141884121169478607979028316488257226941942021415086423304777971882445078077700 +(48,18),-5197550409586781208507567163710539217148269268307487245939103493888366173496549948211948541356772477328130940 +(18,48),-892074697611226314812233776771167053869582654039379008965472943902112012029583588292383269838425588257773997678565403304616602763268338262907820 +(63,3),-1585269599860520330124419462078155250774567403721539595857414472949762472536362239240 +(65,1),-25930220495616541235958339049059924911433689215961756353157004113353171032599040 +(64,2),-7992539985130404208622877205549981152768870621321441570916020347837792963067466200 +(46,20),-1243493566405262394249078649924612699480681969999895224923410957217909514811582549774357878067572553616352614960 +(43,23),-2364224140158223072791771871580231051105273191750974976746151933419362016132748567003524614946545923516945154017920 +(23,43),-1215336257472809363985790112498108768582500678361471255140376680405252098222763707707948703989567138536555725428274961972542445555140480 +(49,17),-291058338861524022591455795064709303852022773714327522719291133362987545200051423175179041483220411507990560 +(7,59),3330080164188437220445335061718365782936730620127692771879761488941011172630647399028234328899771906829795550708770070463212160 +(66,0),-40636760716060601654282181492344430149176358977801070669996668515988942263840 +(62,4),-227418301039531256245838808973424586548030483877899979427137314883195713385526293109920 +(59,7),-163161124786798902900548873150112893223113917422753051699302045080935617872081468633057286400 +(20,47),-21745846180178981778327256098494728838788944932673553931972727417847666837125865940481893080640982803967038208636463986426749058453884596423680 +(25,42),-175613990853318100410589514670303797118581083449918451187578751686128569221940682284583222412855677829074082945323415006129211311290090 +(30,37),149031794815195838413178380293726676810706914123615693358817656264018371667454356069845685431694514737347005592499113310560381320 +(55,12),707527963020320913855554878498254075356342180142326988533724861897459680724113349449154119097209788875 +(46,21),450448545942643581196423314096230498355414476846148059368065269527838889648732953709334065878785679406905975652720 +(24,43),18777369207627985524232474746648957688981428588579622149431471326728115842661953791086229132149469485003011236762551417488133519065649920 +(26,41),-2549770329080761493242418371381056480813448971940830293087572381979282089385435241720397159066056225029705973344090085246605954589060 +(56,11),19937576222893719623898660808612711343018706378432759418011864016285746171504455417102347106944905000 +(4,63),82714600903783050240457949533398329844963581084982537867625559783895257743187932168146784749412704960 +(51,16),348337212417297972707972669210372373167380232787064531602061290632335666358386798424565159655023582022513380 +(23,44),-1087111747578288095166714160508187883109802721793554086161633098932688543918382331720294395577254030071301822433255534729443209189098099090 +(18,49),-873480496800728424342505648839597138663116903680431808216209872245084868698323990622387934882043054759936205236044527839688393279229919382186853088 +(49,18),129085744911844474369025990884642331958254661569439424025443310556242991057719449735294052079102069004976374560 +(12,55),1146840142490742837675816418894271063164989758782009877752431858679822013358684837643820126930074378220616264226073783044693753224519259067229113043072 +(14,53),636307841014938368230290514217328645174212492106462785536086123860411557882598627435987411417458309263064402654147966023672924168735045718498455233177280 +(67,0),708935381173018674631641866475201312627745033818303849883129151946630339530349 +(17,50),25611341249153245844835734309460763461981268025330167783290138417653528542221178993453094164111985001956552184980694441123857864023017443398700084688 +(39,28),4865407643780697054010838513501173623011965416851797243452261099042344809546424305994628311050914254295656604313687839870 +(61,6),42771898444687190582238934214019232490870219055715967298257790476774824745423723248504272030 +(53,14),621004172179001402355255969243198292404320665804724416259205183775718318401940126902214154842385132438888 +(64,3),28919424337369153934304724434092967369044789467511771156345022020975411602754706177480 +(28,39),-630304261851704685549748021914614012054447871422225751357366873982661786016652771539512510621266034502886992472210749339419855112 +(60,7),3184526516683357062282571576936264828481236458180308544273674782769127655515936576481540530240 +(63,4),4215534420797585961369384033336846830018376232127494924568357081649386544164095675658325 +(48,19),2146520729869631575568406209942252874646653156166763156850072034174390110150048036311916287616731217890059020000 +(7,60),59026913304891632136563993433609972291321997213717745552368515060127213156260892224265497678322982362017692589702317177400766815 +(3,64),18303117696253157164483099192587721754277146019211540542710260564802506261174284256784460 +(31,36),23731983338262075720784572698033885014115650264688671245980828156421522114901831755852227866629056168208991277215874697964770705 +(59,8),199523320503726461660781770469995437233941954932783410005273379378233122721392937584100634752160 +(42,25),7251817959218983749995985404592267608680499024152745591146521704282750637578564572976171693042953749746261280041829228 +(19,48),7482645758575363306296045747102700984674448426308432093576036739571895365192919198674437193491617256946118912132502386045084100806416239094812350 +(9,58),28885856662925246692602794663351958131490605969712718035610831746523805125342344165897856900509089321879226724995729005934277194926447336970 +(0,67),540 +(22,45),46289786023385004872935387873088500792450375054416363215426237278698064840432758588974908888860582394630002437716874065178180565026124320220 +(65,2),143573907854327795444853658178810366639450330703398961299053884691836236696397855810 +(8,59),133680710101112630970624330757364877440293339139497832365771413318476734124286316049405087624763692765385808071587824265696516677774224 +(27,40),260768308813730025651459981687452810706902709189584421229442328775882377074924293330723419636902448691232116877598134176531516789404 +(54,13),22220184085041751749023629163944934556643759393222138510742803570916902986444282924041567643904792055040 +(52,15),15519850031494419194755860092421482046155839978110808368403049185134465164519042824812239496983860663654488 +(16,51),10101859618607053541937759361637318921542145385969337026240817982504129727484016161222472739843456840964663264551177521506301616394484307393019059632880 +(62,5),473937432687592817055890232236654506261819015715117979633411400138841740800216992254435896 +(40,27),591882721965205450383817127289298635959282122382338910058141516212827263072344043399609016427189280405704276576857534080 +(10,57),728139041641088565622359089282015217628268478028219793147581351911058896471535498119778743495143234799979254756647133005868998212559389781913120 +(2,65),2928005073589179357027891952160183100489707544869550559920690030360921660 +(43,24),723394745522440520326622603758382798308954302229383633230271569457176454178408717486201996270035829707398604094927386 +(41,26),67722796942135462583524491203551172737836759753389507246650261273099573912468499689855390551244693093276991280985698300 +(36,31),1980216880252809585480603904006826865233414200358753704090925958738583174580873567985934887085750716231661941490113006530280 +(57,10),493988998876025906647407866027549706610631913106193759710891624125523416524690277627666766733069532 +(58,9),10678748306514115439279549647497056791977822616748937842092213570365792107806693421394165237326100 +(34,33),89583353108716583437980042765926549311769508181756789862932761337347612409781583008040090008246628911319407712720209086757040 +(32,35),3722326107443610465259892973586964114998683602023465248500022500115189848848789177962203280690463987305292827049435971125883360 +(33,34),581100210967856028294073777790068049752285440819452206687916950697582839186834487406398051132915135655662274216082168460262780 +(13,54),75895726540446485834375905949962128089745630805376409588656379391990632898207773048247971680786602280730752334667317501918683480278098874746412621568100 +(35,32),13515151148614087902089270675618844280245868161121780129132235109662346721342106196760047932305387990285254399329623805089230 +(1,66),1110302699726142614523370578158551270742014968279000 +(66,1),458917363575731507638588808427947039983097955277946789866086052411925993846080680 +(15,52),500644401068909742468471698148509631342674542731180960032615977656578745199358760023602827071045777672563581645891863199115125158496840780015336675425280 +(29,38),1159338269025452128336257288464787547783045237015427442766613950987069177044314402298854787561576443824920405249559218391833020910 +(50,17),7049128103981627105406116617613154309277778615287114117740837472588866310254876337380897300229658526211536780 +(21,46),-1252174349177754416360502446148884847477751091814870587815574679892285475117950548192678802607691873937841306027558005397448390290135466918990 +(5,62),2602315388775687465376447866156697282990892645848797759290606941938090683375593509415027017557100288941899248420 +(6,61),1843352001856948391349729715575517701879682553364657124691276341942947543065785997215098615153992572224540684643706120160 +(45,22),5723167559028705050259935392160721005016528709827999283141911495168768038025386893275476108151458594430151996685520 +(11,56),2432237575857107475901937818106540858670624956410292053071732656190567835348751182634816471931239900585191043677648278273173469026332013673185136345 +(44,23),66938598205470207261720757882448612842421744183519999274806919363057545833420122035295646876478358669748023938792640 +(47,20),32521567805395482004512314142557232884579071114295416556908397956624544658262768966706494931624619303405483888075 +(38,29),37822218296735292065028704042155035731212219657939939407484822278050040443015313727505116062936431009336510448935827927452 +(37,30),279695306771091484612502502691422637751824569228171608442266989576637669767950443080988097577071821553286244054763797610750 +(28,40),-3300355867218523235593755592515436959089744996816986742482632795253088709746464907701943661530139191045289683946833835359716222742880 +(33,35),-130863042993301156063191649088811292145395763513225382484003288882864342097151516847092701372077930773226308580586990406110366880 +(32,36),-834853564820433635006500107778428567991355313040176995796625288709934560185668366567512333776261116748566654937121325515361452112 +(10,58),29445476139616998210462030713737706821024721552871102963452751247937848164444795127977261893237254396758500966627388229653278336303219195521532640 +(31,37),-5268697655180884927128232375559651796123600265737564995793614021027597077728666930093789318788548663133826329831349751952205742080 +(0,68),540 +(64,4),-78126939194738920265642420068324535213464908075005045372801197790320230417204909439206360 +(18,50),-271561951169180570225025411910021726801398233159570876382814742982515641172384992798105429280342369276204698698213811167161945318948043114190621392768 +(2,66),11283409646556862661313896636484997321614156203036722229128277007012939456 +(6,62),24077924792745131416952418135337255878401538899138246074106476326235152123479738009146674572907033678554157240997070420160 +(53,15),-356526326513895454639888357399302016911949283788729799947098567581442780250783308301648994283556163885280768 +(36,32),-463391941235750096209621359710487688195026887356313622653873693780393641273555766098849420238646148447290648169625930057599920 +(43,25),-214529701279476301068415131245289140467676914623253119933089822273275288942006976473364949941947319068771586189093353728 +(56,12),-15206450855399301737416162680995179291202549208575664900093309835093443948143174503697178157269448075080 +(60,8),-3961405160442539020250561691396960787929948889911476956969973712894857057193546254384398419242880 +(11,57),133781931576981075024548074717024139646461843648085958097641852654126105328090482136236703255888399623701578752001908889159895981986380687696023639360 +(62,6),-819454412327647831269817380463064833720234368372283517740562492279892321678749813155719028800 +(63,5),-8927893931841995150742484191962587989858037960949105134495516973828281374646585476023314944 +(22,46),5878719910466827972916852178505811759184665829257551468936891211719655325890062506758541082217960818915636579655246971716449605653777897850752 +(9,59),871800786832399260434069461875032053091745756792267113449709883841626273737099266846120495413973153204158078643935610680501021698221272418560 +(16,52),9484391142107701739484488812841377702400266204737823687131920805915865817176516239756990710507086645349631136387415471702963286559409280282355552153624380 +(49,19),-54356877110302772924138098984588795193822449648799236076296873053721803186656530595422190215707295873598003681280 +(25,43),-259051979916109533047097558329326436148421384674787676308434698829360557983642261012732058748917695716862391299762672503784168082244897120 +(41,27),-18398919156608513634661825520375731447869720658372327131337898449687910937194297754646180459752798559955132414300813529600 +(19,49),5992492061857184047440504353549396125840913227349588146136070365619347193968681128039991416505642464703748041370110312296397576886140267234814816960 +(21,47),562424983355557017804983873713896886449063009686482119484738569526046994283286031824461508552183204131607912183145029761437540289545202061959680 +(24,44),12129471353686391970908916674210546701626506049121258957604832735542306300238191249602034804188413420173129408717915973779306496089759132160 +(35,33),-3108901373718542131411192315929622052840961628571055226098933887956238270909528593465751901638412265630051335142927535863205760 +(17,51),-41255359892001451344950307865278104504400065699049248538630803465729168507273624252841984628079955593365794497987833031284158720988450743476955912947520 +(55,13),-487954843565487015383336677384910555508728115849314912810700527909644655914463813565501711191683732662720 +(37,31),-66873155414763919461151640424664507364477761542000013461085713011788855762515621691676563037343192317036245536047777884791840 +(45,23),-1880348768490401469641351678782488692556787301258686036115818078490346286568268085516522606577607220297157470567577280 +(8,60),3040113765035004479886585405841512003945680155160383839297055901498164827159763302818038988278458827192952512287891660289775961928669952 +(38,30),-9278919872448540227001320616582860302531570741410447762012913845116192651364616185810244586861217566388671858554548138870528 +(68,0),-12376801370065315423384766020203550781630752002468994971657104986124566508594016 +(50,18),-3187654518445763814693253430148499431394451891455720543213833955498877308142091765051155766061415182608075593280 +(30,38),-36494484692202647171273123557467942477423102309888616078927225840713973338536955239753714335990471476846571027155294680568960072960 +(46,22),-156617860219188187312629460905523097146513166605228927715972739026474759685817510557410835098351703756837576195845760 +(7,61),1016775326769823903807023649460878988195919782153947334765790730213982378633329437215918438314619550282136739569022908953428128320 +(15,53),146143350322139909654767539700744778539728818942503163166674000899558651292263703235092831994402652985987804900609497497595082286421587293327492326679713920 +(3,65),99411030557324912209377080381274947571667917764997722700857809805501383180019605915929312 +(20,48),-74054061756126967782216330498089516425835917251330794143318892008151833515105795571412098884556005519912783734786598119070341929785070313682150960 +(39,29),-1229913108362155604673884588536681072558323206319425814737199678443770743283577867860007624542245739572796282656132681450240 +(29,39),-143447671638545046951887732798558981230006890394734939145426960616887487158758027974201639657963428000206682318378565279983901372160 +(65,3),-527601630633457560579998996504355606198460147760198564622988552227781051786743257041920 +(4,64),611244551433117723821582573770699728378602586545833319911264665564730310123486425639529489665543493760 +(59,9),-216044563044556607578195538337577746983351343614026358119073108408641293318676760210508829232985600 +(14,54),107359503063848180605824801317436421064043817922946156917809816631114047899711566357816217832990089810278555107906807412582970993044482426063563194614319040 +(26,42),3698046857731933442568228885250111641228786373142442903435848337166630420266412803050808056290681173798595853147146658161809086135898240 +(27,41),-19966584895407229610759651398904781020222425503594846509379743312728399133249656788494431393266466986383988666305191266957062033907744 +(61,7),-62089395008483891800598516442295427181014180717296814183193413685629425643397511120652147013120 +(54,14),-13943396773022447944306538233746079778350153054342141475835873191173512902051774532674906596872556574748480 +(12,56),87769874174214018202742420707691759370497374403796545494152602438839889197427841204546483319201880692364465786600474730621087958958214422959503919274496 +(42,26),-2054516546955390462496939621354549925952681869586049115750264802505370332071745981618076953291524958705365339915406704000 +(57,11),-419668372349156385137581157160488292904308384796680652899876382444336487481559863882627711160278935040 +(13,55),8371836416511433603516698693929590601556064411379474755637455300747361421568936045974360798930460701215278859784425416449931551160615504370519631826549920 +(40,28),-154801488268279814389310540893280588611308459186002670034365760366145845683821550121183464904833942671295001676458828127760 +(67,1),-8126225373311112398685947137952084367581151741293864251348350398644638290843520000 +(23,45),-410502470021119537942404244312929073722830191864617103496879102547224753838432161018610658881157453854637913386612503073552407285172132018944 +(44,24),-20856655197060450595740835407812591252065098922506733766333725625119465674703753991686169795511817306658289592735305600 +(48,20),-844886036226091478671172200405193170486502277915058668873359853346969743394778497532060151831948219321110087689836 +(1,67),2808003978006175231349099373756351551152520333217360 +(34,34),-20342695856394025539117020087393463593293728495020056133356445445013269386249647285049250414234136398713016358594129886158566720 +(5,63),25687026045805362403888095598229364530531042927740334949787629194259681529671815698391782031238612623467081343040 +(47,21),-12009296136016818846712996692666169153435944121453087543040619086351757633573464611292039164636828388741300236400640 +(52,16),-8192405602594083546516093262745935679844507633017475028313202437106900260797167406142336497496991636441090576 +(66,2),-2579869554308557153619533818260778920447461721483369997885627376647504280174909810560 +(58,10),-10190563596633246837936228239117970886312912186717867132839143035974561391609292160258575373021330144 +(51,17),-169830933430721741445018389658593743219440302914154493063291979733917148594090371703200165216338874383885606720 +(43,26),61811149451470517009245558741628539328100538416929702429622358431043090400074431237313444077463678113193118512200258099750 +(58,11),8812364019606313710339937466890379362444700787257968857227431911873944432404018882902065932496792624640 +(12,57),6330680404429929884537195021220357754990987142981635983161035799975718967018264519653911644393214593096883686963677700644283076052292901804469864342827220 +(14,55),16509664624943874459464987879621492429579338852693438652629874687555817204849325050044546359490136289560479812953352580969025356134948197809469189878311721376 +(42,27),567196006388574560000880252686066709559404608613887634951914563789923989482547637804198869890543306055350865387020974779040 +(60,9),4363549548893295341754157923708009075965443799706256964661905016125129765823417765118833502287065820 +(24,45),3181017112425585453918158945354596493437498017875925864547120824324954969968868215122948662772613081681922113867948425974388040682610236036048 +(31,38),1222313619667130337366059421996733003307276614543891995448082449632601487392885370142102807496653467778838414801322089411907540995134 +(67,2),46371105992978854871454345087374163906515908970150700033785824608306900659641765711800 +(0,69),540 +(20,49),-46440553896276133650355956647385087028436837121809829415918922709167925073947581517794382729674522687428309034932424440334059555878061976545561014060 +(21,48),771078585617731645422091566483656329666781402659087571748479266655289767650453881026119562078166309727924143917670669587142739574396353693964067471 +(5,64),248463749930138933759943124593646085071493409892332871035950840899545075851655174775673019068870745860070331039935 +(23,46),19384033700746484478061996447342484764541314073361848361655936894443804261465977337681544576399012291149010941988887402066457411304085342901350 +(8,61),66952321464620130503968604040840312593961086007091381788795408340061603035916059946020001530289553740704542216834681303991477321102037640 +(46,23),52415871165043899429675306608114008936534879956420824879004948964071259436631622182475695845615142888628704029336452932 +(61,8),78546284452412648223746563818150835222382902636591046350254151233236737822258712184972248393890740 +(3,66),532591414891583634529041353732392369088143278773388162931098970461414343500881840920247190 +(48,21),317971738854497649893613897358659988922938945934410719567255751491422772561392235784631608630284314833967820833443080 +(57,12),325904699100256471235518294330722019119781199512217870341990383640586409857776873471318824651331464787305 +(50,19),1368248627450649404718279056644314999610387647797914490712144750046314876202784444820358309637787971863566342272640 +(44,25),6294523026261906834310367685359305934823533209491011024883546967038358971561630194544375185288360830129375682631390461628 +(65,4),1447679018039529808098628608708180952366954247301458159463612009680804400815575754685956700 +(55,14),311924416600363479702375126538373331303085917496012593140859076330445184133528979698450809736658874409147530 +(17,52),-35903722676868619641769504936884233844858325835246622703859759056310144764138860409205434589964945189758372730329584082628004936659988314706265955756776685 +(40,29),39682388872670290841235900730180442734416024150829134489605619465885169091180608376892823853246851134212885477247554105663400 +(30,39),6912503448778884616048297581784912561014252254967751058359713716481094165653359543445242098614831286452495094022759527862908804175520 +(49,20),21807968032188415620743284813173211348772843592011986873586831203862201638094982632073768243195923042027505216358956 +(28,41),1001274739695116053671901978294870043673650911673273934429755279311081389789979012802181956156785889172150890628094703356254796993525440 +(27,42),-59464267294024547007087002642075383856371058052505700433052573923675443070842493872895240025159820070325085733742241146011301779061664160 +(35,34),710317606515410638110325999592901517395590204505407121323794927958375232121557525019895793894644346617070224692383587534470669710 +(37,32),15801315890317404264077784777664784400964838306559798061053360870080656837919456437751071354389093783777516931064823559697605635 +(38,31),2243662854435129570409445645124904174775645441062257263005545359536939266905744712095255563399164359375612597829766374386466960 +(11,58),6999283019231464159387745808134806651906515749796148792573468807169130304181927134566515225282111596429959148247670364005363935215477854066830619431130 +(4,65),4441170913880516206849468178593905935200362035547189994248783422411630782546678252404527333889886675320 +(47,22),4254678983403625718719199653998958211367424646423442861474018447163962040453174801390626909266883228615012084454891200 +(2,67),43029846547847434200310005509220200890053440525940541329815784695828506560 +(16,53),5612185798755403155619719821086563805798032691551294620916638908542368264435472500484320256074060707404872157800243588482889523852785918818354357057455581436 +(1,68),7053035290205377734761566250916861351438966696376353 +(26,43),3308383306452322538872771050000860855010545965821250422873131978137950802354725955982755975481859694847227845199603043793876206145950109072 +(39,30),305590536845794906009710705950328171567065931333713592960632871044534245128821539707164270150841442528600460778982955222968410 +(59,10),209795677142379208961229006964682021824831878739157189946560266569851816497988488010765300412110456004 +(68,1),143966870610871117674184164028951427730173681168030102667109402520192009391294110460 +(63,6),15688442576320113410800091171043007769291586014541628073729496300774071288794094735640218177040 +(19,50),1742872168338967813839735607567526744382415172556404496280624780321638766143592255837154049511740607233070804349801346807281507244012836653093411103784 +(22,47),-9142293293242679685597685252295492015420599403804996051160536356596337692353754963400567934372658026234927834465645887880717899488265193171896440 +(36,33),107444869819830434358090313067164864826592812614357983620782834377712767059701391837228121645583166735932997659892104145542996500 +(66,3),9626126784517595107573738547457830071211354343555225782443138648067609284603289954110500 +(32,37),186277254859937476516567655622493124036949663152223462851383735131435517570444898824436862391509505194726494927762911419660473221140 +(54,15),8156541476014843689778686780937764372449543306367260490790666800903037964640795914981917150596500702530824756 +(53,16),191792524172724226756664512108021748440335350946612804893468972590294171397881859540454580950457647656458095180 +(10,59),1140739153494567773009371798856502743198956035041168248004476512252780924280615490956178130819925575109144794565548251915173955467099369956998025360 +(56,13),10680904542963767816058014283753942272597272994380969665006726424935945517112374242411061480140245606737680 +(45,24),596547848577460693426032984163895139136837255143245093386893434922064952579143087001273295938102949101920309115404896150 +(13,56),859186122679241885502136024800639435205433859653871920549476951268730831784533001999970252252662661121179039319488916020356104339961985514323894576427412740 +(6,63),307094063851285198273330896451893725632593134000359122307785479166649176389341119709966386635329125157759677555975235591536 +(51,18),78281791949311460208415159571087322203095317286615228203483863822718197867903692043043711608476215307979148003786 +(9,60),25354044192333271792638558528285220239153286203637482916760379751328210660848276815836378305197686580980518383159443068095176324940037888327152 +(33,36),29410974692827339623324768375614938671092561248304887152461805939277685140141697080305793245862419057022199264580633741752644552830 +(62,7),1209341891205205301673091914296433210064413524492534893466432435372528426154007299237928408324200 +(25,44),-127015041319311806784928669955985026265636039545907811962726571231171532751505157418507077391115204551936933855755809218564669646524412735395 +(64,5),168107492658094250548074744724473994572585602832762565218060995114922819075961019424037499868 +(69,0),216229618636475514282095243883363422512275714881937510917538262904751029143902924 +(29,40),60643781009609108896007281466207386545249507760928215272130877127446600160429427877540134510806793731842183752703085307922021324623728 +(18,51),166587234932362879854620480502719020963460065404961561202771085599320218295342428539626930350346712208600452850258201783885871849374193667625991747691520 +(7,62),17035118882935440790759584769438489535042349046821736543330980001605305017054460199958157398863101336656545591806851741811032949850 +(52,17),4071003817041833263200263222683733604554310478791527258389196714665807129111115731918284000962978960782485425460 +(34,35),4599430445119351291006125570430253932418150954114305356941131277020088734264960757222490378611756163704183088909938140487315174184 +(41,28),4885200976629272494083437379690227320536900429300278750206040071204272148933298811034116696360284382689884186639127312126376 +(15,54),37217803071773929744923735447178192088573586851366973393627974259601106301607671858466244154000521293960327138557945025713023294795746234739789679123476863230 +(25,45),-17063224935208417366867458260590047384215950612441892335152822456086637048923311522310235224574955419554587418802290407851318612700570546151760 +(27,43),-39623966266166803040152871879726173337329496498572984842294381473194078489313067074627098825327032846177634166299374498835670534425218198720 +(64,6),-300146553450498739577074443097089950457875747057687201045854503214833431936587983856994959999200 +(52,18),-1912169876555348242925266245037629305180221283860484577477383043449787338688359659643896406743359047704779249216540 +(34,36),-1036728052455825914681806458223055034908700647219330854423961333546781812844919468143901180278350956793340179509866340209583091483460 +(9,61),711375408514719818980468148986284941985876277080256705943781887836586537707864276141642573178795900575437634533805831118101165654475660029786560 +(69,1),-2551814667388595369422155954977439434624016648783012438875561413691930738492143397160 +(51,19),-34241384991760629917281198179298202323326164164943276390386456203316544142694147680198315297460382118195032708973120 +(49,21),-8362744944389241967733101111946088516132539749585957637805377768118230386909028738701679225187412292139801059756719200 +(70,0),-3780229133822719343497724952335308204274783155609850085045829160972026190488980510 +(33,37),-6586646447634208486577528948670904502067895786727985517581538576167492336804270786869724551076177181592631534436852102842933559741560 +(60,10),-4310637878752310348004955324914341642588756109502315804828340861156692911413953513523242681097918234100 +(50,20),-559385492106573394846350383522359204765279546482435472733732031742907386737982315207424326596402953806280023161292740 +(5,65),2356342528105456208976117582076591536622188066442547043765616849574881047920124411997338064514511153049520032864080 +(45,25),-183208152584211139358787056928766568374079463221704205191340188258181062877321688114855745370967956344272024651721622393640 +(48,22),-114763520890444808089481005009618511872637851081079489926068637297082356533081892207971405880782914269886919473007447120 +(38,32),-535620437175458906245136985832794688654446062974462260039952438412337531569966012621077384935005255004027369805219535333745704550 +(36,34),-24719244245206155686218106316862661364280227089651058295635476032156473306907053326218594092998188525786620470598153364597378472160 +(8,62),1429293942189452983664042111927931074211361136312715881883167543122640144393015501135978896953960422100773356499065264588652366204204629440 +(39,31),-74764883788781561167191359752862079872252383913959345094752456905969296478343807043474864311330881517745033762301885079356692160 +(65,5),-3164032736383226780574594973316125873719465330871770223499641483378830035210249663179732542360 +(6,64),3826924378349005190664245784095556782551656739211738809040720340683735282457661484615160852657583768460589033191937386059890 +(55,15),-185862499618677976874351118844565372096963389943660484155022631080445405789087299236486272570138993041111417600 +(2,68),162429432839530836581410437764661493536480241224681564077218987259210037360 +(1,69),17597139161777097523288188046945465670674542529992720 +(42,28),-152913843625335247899439561346502104213944580910983186296249016374921255199801071860402062992031303990051557400157587340348180 +(11,59),348993337617331982136695537795471361571501395659260165808075719751691578576869155469969035321404505819968121866459240526885896195330769486056196227726400 +(7,63),277816836757550046134014555240908672724510916897631468391626113945400982121962343787543296905589044696447698387457545454338529815960 +(59,11),-184614590094557212409336581705777943129464038210111812682483482238713200993901032892222298377219775705600 +(54,16),-4470211458805689377091544462133353041787339850070643489772268693682083362207295935332906939509988272792098008350 +(61,9),-87990110886229772503971772129111211476165945191501074162932231346212038411814197544713646945745608920 +(43,27),-17341740007725702180732714930687929713564159568444243106982946929785003726552237704460680934300146369085905777715285842138880 +(47,23),-1450233818772673923670639592779784906476176584326972317281817387594593078756788242708641985571897104617885458224933382080 +(46,24),-16930092072499794661645582778467097254964528269952464710517406515052929415012818386519297755011934820364970861897808127440 +(32,38),-42261848869181740183059980166995921936447728036717183472048226977820425986989208335065591864992828874716340691209488611253319047924440 +(13,57),82351539873983258373223614604937050416927693403678328794018201894547092321047153650047923883289748675800344319830770149586904479230652020213118231982558637160 +(56,14),-6953302588515525072806963998424416088425158414583389973889048006311324095366425696181728579652504641444802720 +(68,2),-833721083031024861113857767040281219729129378061001036486832162806229569800503393640080 +(24,46),-1136519650143347379108598457437093233171704814632026313770186091141229847306113030850549316389658464896644139901859980022712107905058233201749360 +(41,29),-1270240505008153923422221444766066227329333232438718805825214408396599211973816040328384714095096027783329450287673700357908160 +(23,47),127904708414593024059799695956608818298124134960096874397178497179785946177739662097205465417681255129700759100049225716315917240576935612707849600 +(37,33),-3695606637705991555209594723831622334359939574149197097701070182846065957565749566430936963535434725145857978141093785626223990000 +(12,58),431473218966859892804907264323171905890944063553313981244063362947975333400484162998960038042153486983077360552721993396780717425844307487309508676959289120 +(20,50),-9457291277158260373431400750453470226276120041797546494048684267271387256230092294771457705472277249097103471540571714293711882395022314893678472631120 +(58,12),-6965834191349250591318672500660834347236682203747439903338152114043692988043127285511448750704200089198440 +(62,8),-1555397991351477001910646017572596354023918210778040808031748261190584356968497730553033097099077360 +(31,39),-261928106790218258671429881194784316087682809192773968664236130111881540975051942775139179088906764714734107598747035762637565703805760 +(44,26),-1844431599267348961019044580480877164650087102900723831623103845423099326386265311869880911790268060059944213512821509342540 +(67,3),-175640646828434455501414618695144006878754570553608145633307262494978544552100506670200000 +(66,4),-26820650273136438535728128853276237809364502147453111349931599799374005271552509817663864820 +(30,40),-1700055116675203422827174374898646029838955406852408752838357290118342900983755561904024103138866597937929697639091060914525472493050090 +(21,49),376322611361773775330953494564091775609916122937519211010057279518362438448432993202640030979562669913721744866180218699077580302503191980540416185880 +(53,17),-97109870084962105576376629928459262024935042794780787406749704637046595801373938351782448329938108837767909330680 +(4,66),31740518824417462239413038046990441479508043015281917394018936794727226925538631012176289263826352660140 +(15,55),8396660687981800213225107896021185246066677546900291899239905318603364927313496279310234635224124090944433572118225328264019499200848748435961552640417543728960 +(17,53),-6745362344119057741985233465275817604255995774619997018966895224136827859415844441576187244090886807521204945664793027835086296451327466150488642142893878600 +(22,48),-8072279928734492172495405766974703026548324887640528755288855429008750148367151221997637050914841726522652798992603494670678594066612970851786086130 +(63,7),-23531732696646711026657640569146885441166630643388373191000437139499662133702313631699108037345160 +(3,67),2815443544334140976575287490965189341907121907271600426828801305653631026894925266532874240 +(28,42),814075640466240127238062106500686942343080159689187614895219594025006994316673426336779955308835992735315730477212507785560673070217332720 +(0,70),540 +(29,41),-25807192259840775359079317202656361002081079400002262360528899213809808415662408188537730404512618039308431258163251626191348742409082480 +(14,56),2328862033057210287835961388667319271684949379894168471944681696714485709705788906147751120380929832905366542058907870516779866749653121628363278559558314676710 +(18,52),219275607819609580634290524331739135449936476494633349731584238489703628161496221915040106009606147120573686890275360420388194159943702770286178081083780240 +(26,44),1214285142546190503474985445957167255402637071759277643985266950951272916805630840061145363674625051499441015689314031941745572491401635931460 +(16,54),2538200739086618021932622906083412527998472064320772268494890094561515558932989970687209174153422915238170666497064064632105431562734777758534295504913758032880 +(40,30),-9989313619174806766663988656222721198367838722001211237801559866403840199399076803532014914561020758627016937607564313753481840 +(35,35),-161408931573124670197819036979465943741267865516808573513376630454080481940764770087489239865433639908641783594914407590783053180800 +(57,13),-233066853157097047491997507328759768829414523263934467512936982108646587622256128154723900180584047617502360 +(10,60),42400659646603571963949213189975167161231682309267228902397754822716279738364869608409898522697342463466388263617643177689271318677716108514973936480 +(19,51),-931048332579977303034688930452790268777710981007880840296606548830034466586296291038577806405591168596451191473674690151410291468615092470241034547768640 +(65,6),5738450835963170931797768998716497514556210103349677850576374049424008935644505780762681097541560 +(0,71),540 +(18,53),71872185298351111522499186858108210630599339554021758191378494328356493133354403823490071114778143860042758136398834909645152038377837302844492252620456117620 +(36,35),5650225835423283026815177620071703158078857660655153547443357556485562413167371850007457696966483177887475342716347493213219868984288 +(52,19),852108156899650799767991435459757099478205979691278443575033427710795709068859100135732426717569003438825575614906960 +(56,15),4218973792843117683061730067127541240736760669866919198578745110399425939664075685013014776821328441416902647648 +(15,56),1697990400382536070894010931764915469756734815500606047044972753131452818637257140330016634823830491208346380137450343016178228149729446789094436858373865909452580 +(8,63),29604755243387914885004742418833426251512248887738015130946290671520007031560429937361543247814482914439416292432916113842838770843040857720 +(51,20),14261706413693521024493409129165814775371066689661774739969546537045171898204295729977762685474914074220825703935245784 +(5,66),21921027750940532772438410883200114140546970920778514936616694380169683606277149820085571722119852754743064085621860 +(25,46),22620427637239533208798048946739859595138636470741927452703563256765370173214851469560312191242722567612429891485457366380617432961709821979144320 +(44,27),525912644703522777564559129281761627300277384560373329525274836014176503350551952046764084800214944015014939819189963422329120 +(55,16),103744485916493705170451094789698643830879825811218748333110335516610339166951038831319318838856826782887985599170 +(47,24),476836349128127642531302427789035734864989434732158960470078457605638973809214228858294460227756598313272678133056770847975 +(64,7),457451684212521661213390901919945679991837803548839017576270217380119637116353584407277527951900600 +(9,62),19278229020897094278328695980618984211479380574053063397010890122199370787332655572701924804848722655818800908918037566168322447229625599916690062 +(35,36),36524789091944983685623010220963404845019241567628902910648808594935683408809146461693237453896002528930097719288722679816458486147030 +(12,59),27854809747259715949230052977590444376361483705898363863338246295227651965398224286655745641044729011975277841175271797694056327213775189535552186643291536160 +(60,11),3858872358117208028267422893020987548682301035119612797089944671239897469565441944896383044255468060172320 +(20,51),8676058898495847879798664049730212886996664312193022250866883347090759449835750154917255483040704424370472380230266209410639082949240390385784458531012440 +(43,28),4747732888213214842698022469257892016693496419750389966642549857839145333327277381527997871049897579121685527463410599346826105 +(46,25),5290631435324703359439066793206733220871378245294212413191583684163409239296505650810161185428399335067630854328402646721868 +(7,64),4413637162821125725882492718787607389079254597584463487512083769513480784109465842209438866969392985368571694621134943901220391324060 +(45,26),54595649921331133077496015669662098452665176631378156167092799301227098312230484890211158627531781607486110238803463482558710 +(11,60),16613969168437107238095759056818658794276337725067847664522166372288228897364134028348668338205670641685430971339588283167803248027103141874561248962421478 +(42,29),40338982713950259410997549905103290002346263382152927661989094046460153758882959837543493513160070192813579457562056130565779620 +(24,47),-1647870216616362558822404861512988535386175354559849951462980241822143669963560263874968451279443892716691577961891367631695683004319928850981463240 +(27,44),-9858703782194923754085252677967961701952734420405317535795364130219984015849091943026085020025868858609643017532833087166218469682997053654515 +(14,57),303006985515713002813800262089317787990550362885266734067797685510997014270675275146392559960300914104659885445895113781339981405420276451843730561776606377142864 +(2,69),607051811954853923194912762413241721791385795782038941585069327154487660800 +(40,31),2473826058601771241474013322318659539483349991684767963680514955969009834527881516230746542698948594301479213215706697495437929840 +(53,18),46467002529726111379412723884625772540031015177995102440738478241839782900902955590305020486502892507237680676979520 +(33,38),1482790618908996541050278702078537353398327687630913094890994866551947824946290514787881673958117773621265761956517798210607539798410610 +(16,55),941422817130394329496099552005064856815871850851751364126870687252498227092179440496477542225416684153447262063064427535002491459142102674676813240822704763214024 +(1,70),43617324837534904762648596476292302138274198761504916 +(49,22),3074265100484701353307069094871318253444395455293645377611624695535737834830610529763886197180924575196784878075651183750 +(62,9),1771527365682139110972194033645920603672334103443859329571469279016284688858674948209696818272267738440 +(28,43),448149277345796498045496689868313921300628623110725351685520466805973702627378958101155882130634610440468374856825162226444991266145716917640 +(70,1),45252478746935141749042221067375028579434653217103580110166914083579239180063855163020 +(29,42),-9145797748551202229248832164794681776884999468464175682659640712331896260120686316548506112667505392750107654570229640359134560090474101058 +(21,50),30591519933203463726260259963274311953663242570114311343236573812663104465726150690161452507634335259022983985477744432315866861769525583522221372772436 +(59,12),148495961197210085816014767631779228590180298332458684953202497330056949572350493192526474091398040618462125 +(63,8),30762013634957019275286772566697679167683475258867042462334593571892528319521175129733439689121848880 +(57,14),154470487890959222780568099943778371587233816886743855667418536206291827009678259937110511520415546113014141780 +(69,2),14993880666135978174035217398251520640116157037397298341688587469265693623675780546825750 +(19,52),-1343678698853232124227437397595171537330284354606165218247242534109745554040943591653408111312357362300859040956204965569042887025105835996657712136974318101 +(17,54),10841751726475338362186725639780234715694265674277521477947871924912977916756483777307714286854993647424858618085425205713526065646966469345917062922837360745060 +(3,68),14690274316677551072794221600800619736711093780683247502006527027973371628778237644236930680 +(54,17),2305541429454393437756223869358867373147272683579260904384618391222622936828886116544866315648574587438170206257764 +(10,61),1514233779876358415256467132482063461351295226631288418308391433283264798815064217098338720793072559364717630528489935858723391548775571483001570769280 +(41,30),324063923465968789771006468460962584165769279995074380939286465419504827410813523445201814000898536767554063001951583256680108166 +(50,21),218517675261698384899369507863372176292045933729368214959085963279549732620573364215312463523009072966005474209316877140 +(34,37),232936844264129055342118883815606415125656289137113540237564278620504405921453807034378605652630555689701600646827150434429316773391340 +(13,58),7397103799156172092362688278308064724112385948538683332700678584731514067375383143808340632521031797249720238054400242767793504319939541299418889045806530768570 +(67,4),496814240235700466103522510267743881140707306336405049694176890832636417531619883360153260155 +(48,23),39833759743373071239929200777597938807814501144949267492362918727547601796732700090346836397540102536392706015309509028480 +(37,34),856748170443615792364115798550455460030784190842207145225617324779043938213900649527915622633353191552683166256187730232065838085530 +(38,33),126437680896353222735357958154343815282599795444131624629005650763736835925360242984822684399322003091692034264386405148869934558260 +(22,49),-2979896364694169261627783751996095012040021830167151469321677997201193722426647621457297294685635766385318973344201533619756943166955353115890479602880 +(23,48),82869208797438496357383428973334902611577354672565701084827798606202158243727699555213348728694653269040354911684977584118250551999522202174772623365 +(71,0),66131567149633421778382666238272702078592975634521004650557396924957323132060265863 +(4,67),223224260173846787536968577819544727202485873902184845578353635347140445537258272692416880583114686601864 +(58,13),5070402421164203030408820795478086791591346948108146675805403354609773360107601795264139851475164251710236600 +(66,5),59527310710962946854968706781667646864794537815983699620703673818252880793698968620576506123488 +(30,41),635613742020525800624021501173231756704097613929000904120969367928092423304931664999997250562754371455305485003637878760891045178053491420 +(32,39),9385146697824581725746627525161441011647102522745430254580255447641092830449438778325749261236683564513626573158429857057973055483581200 +(68,3),3204981785160829560230168062109425256190183772596408757737460283382569745064485556050469320 +(39,32),18041767488417985563197735347924153401116899523064860557665119343610295891447975193357570987312511479969090314213420510449784282652 +(61,10),88401794108451808274221337622423677924681839625094559654699056414535821072524378092568550089746122095076 +(31,40),57903624837068927389019801882960161602156510419425315467616816087645720508106199499372947659721701607074143116633825530323699640034018083 +(26,45),-47033851682297253554583761900589624103400477561149379009919565957683169192498306333585558497369533382496569714795464153244463456124779037046012 +(6,65),46625779242864489359032391340129665235023154774457797216033283551770740504779494484644554100306332486810109577984808754815608 +(38,34),-29556148075506547014376596424352498043755464390351617092764216163338419587191939212770378333928830553808609767358160169908296716873024 +(49,23),-1086396892519455595859549988152810834222668971877548886210655195498147759247886535907667405495610436045786853657839834822720 +(34,38),-52360260164513903463060985529053583060852999935199262654064904464845665422679895882087496204934958802944851446062620977578016118767991040 +(20,52),9602872402528423562053446906485757993245979342140485822537615625295646599684731926912952607840637221178131207135357931986009551181115682846408300784271989600 +(22,50),292298212959221869116650694920667544034900502711483901317685163198643921524840339950018315810026746581709362500305743841465280832751566340945074865978880 +(43,29),-1270911406380460696987830889036437185618634240875350843113220030482092096265304255355888999348724335133987509385760981307991950880 +(15,57),310664751196570621828064475521319747341170222770282752585464666850271589696574190330562967406208656920466940616201603668914655491433343999896311833029180916798014560 +(35,37),-8235530143630491942608896292205472318117414634982202729261910091489089653457028527675562480063935028991067440242327856399140024184365120 +(53,19),-21089840697479556041292260284128338391073416749764327502487210302621424524924728100837027178143539891154404998596788320 +(29,43),-4890065505054473841409263178306397645965052304895755927388627535142161606823566759997302605928797497221586276764379824906253280912418342350560 +(58,14),-3420280753166043429609128502346048040744940467653560468739682556853430489629931545194654908693075574043848317952 +(11,61),756407306940107387101370711039442999362282992026327896706889160938519067859562027406793429762011469745900781304075798008731005886060727587963663126167844800 +(48,24),-13330851161693058825396190971702808554020863517099984994716327397156301386929530928294564082954314684669437678493692527209412 +(55,17),-54487589746958106660698053421037497573523294172672566841023951365020037307052893432044658366860388331178817777896640 +(28,44),50455158199381187516314940022745291429888443967942403157551537335076351591868357544676742413981189987568006593357690166222870065821772372716992 +(51,21),-5673968685756842687381495731874250607532463802604884403187342036497845833729705642492230954729556781494429806854450620960 +(17,55),13057452167992663665247447856789685574870132350299180383356147801885991511491451482299585916827396662576040647114050665756070908395522052237424509730495571351910384 +(63,9),-35612585898728273805318901288222657924480533269231276375478773397414831151827201725895026521254153360000 +(37,35),-197139050689587059940315091645456423337647150656509705807679930177316638193963470215964653581402984423389106536930929454667359514116096 +(62,10),-1809596243520230671623414456543151898039740447322656793050765241062437109710438659381831401324488866644992 +(23,49),21069235617676435831076764699877281187850777989167510456570507278207703754092859438213647296492079663766480225903761940683973944175807866500849371383680 +(4,68),1545429585604921704952301281208318287847019950339438877223971268359398387826787009473530452145450858349000 +(31,41),-17242210043302624124116685149977751250500414733150209899385068508656775747673518066664546244468626518420214902095025594034354582067067677120 +(9,63),505150532562368196952882472701539650251062741749698816290620306029438683043041869410755276111545342107472726612547080452179205191453740352697754880 +(3,69),75679004678845514199316112370523791490904337885479753117828786295611850514062874736198443824 +(7,65),68355800345090779526210532828045536323092039905010656550098766159167590192543056267599294442220771033212855512062859158410536757556800 +(70,2),-269726568989832688124037587411255415707146669890012723993247573484998006672714181992354560 +(33,39),-332272892029629400654450179915562406595555242123160527906258144005782534109675481898421291850722772253019612218512560784359283907759458160 +(46,26),-1603312960649674568671483794840717973368930908287502698072568238729611746027329320995801707039957810060470352844348863174902400 +(40,32),-603712291253114655250958419537811198080789859090785632237314488790801392150660393654087068262602438172652802622408444778991119635200 +(2,70),2246724120479831859469378480487295345194472579639021492420522298197914151456 +(0,72),540 +(66,6),-109640903696222236342306064150924431858190003412473499796227454998251932642753985377473654383969280 +(57,15),-95412780490138784118962357367295203956679492457866028886286095117841834467023847398356300145544457142696927098720 +(69,3),-58486053820202673592376889042258419983599562295237507494117198812109852829377561458021406080 +(21,51),-96135996890564275800206904497135924809528524935902959863307894156271229065854079109376468296451214496816230033995693889964607710454209429484600423859979040 +(45,27),-15821419237257274134088534550128016075673251599565074503070483842296967703824136493803501213673460620542621603000080753218224320 +(36,36),-1284770537408144310371977364578353797437625731059738361777652995664246322488704834346280651720197604846937790115928241135591667503703600 +(14,58),36538858179227768122843754936977536107696777216629994744371129719448262903757135369047080503997677457269799134093548694642860312959613666658678508075972482851940480 +(5,67),200143775138441823144039618425929106074977914692099624501299383399686327867107344455133535054000877643377358292486240 +(50,22),-81802349110481786199123436721260545781538920524883701427136935384356803583724870266096251064780295481167644183430495257600 +(26,46),-356472281366468671219675542857407559599240314949796189969498906700142892476583882227489746871669545754613726510603745559696713019113279978169656960 +(68,4),-9201286219352843532578027911677658756744583038346196857014398923407324490913336523955731320000 +(71,1),-802853632558589051057673159994366457704645177569950152619128339488253441777011189390720 +(59,13),-109985892668821878174256533543608286767674251761550412625667825851062210671254702973636059043760718228650521600 +(19,53),-590841945739713721860997852052008628932856243989251321348309685992264141566053679915953849168981351150182143810843370023010199113631311003170637769790982257760 +(6,66),555724741189611664126006155581866491915687301718064712637608348631930278069883835796665021639963434896563452162285314834772640 +(32,40),-2060899142132494578031383193540311695881626181863996448887681572992182445366270560937842980301452427812370603998075660015229886435814853660 +(60,12),-3157566635109436258948568495612491990509724031895169820964504393147508271738155702118873641077513763071262920 +(13,59),624601762868321233262833205147492264954218852340175382927477352418397877588980906013199303655475473491850817700038173461064501585110175873342158419217384993010176 +(27,45),3477800440587112443012505221228875606323363088415244485082782265496179093897248964048446386080977842938316329357154542586075417847834807010072224 +(8,64),595482951693938131971875937035656521140002266300024904830311385378908568745971734603481017086702451776454123142692195018983341995488160005824 +(24,48),-815564545625113386515911785860812325291558813769182262266151032841549125844597442187398268320682250350244640057386393989906966870989531570118614620000 +(39,33),-4300982839833623868426261253390436239251962764787495983587900160158473641876330297049494008848463716181951530371194542034937839501120 +(47,25),-151609614074524808258435689094665240084944423821856876266335784990035058165334178484845280420088332503708494383794701352844928 +(56,16),-2397750538421134256008956782002223424440235749297293507747113553212519281735362616437352439998092868855033867729760 +(30,42),53844058162272182054565784052817448953312152397936828671718038386140756551507194948190277255933236272096868972977015739347343784852717140160 +(12,60),1707077010058053803314443347624939563233612556716005732376587172639811844988338961494325189995496882951244911267883373498573420181078690950506705068439256662968 +(1,71),107420689033495800066397901655755008255713120691201200 +(54,18),-1123539509855755977815079218849199231266613522681241978218546823446285368833461990111332829412439881242529961717825280 +(18,54),-41879225332783470164669733731254031246286012110542620261640233486695526060780548707365593183998428389386975786442455012780873638219351379915515154373268560461440 +(64,8),-607662348364428471863651918968392302215949150677775688221296176848126503447370895709471473045521348700 +(61,11),-80483603503223325061004704478362751589237969420048879326272390168689877509175617218837241251783187681210240 +(65,7),-8884558023645615479493140136301492408286453794618297298506726624730526717803044757496325309067050080 +(16,56),297140002793287794424339498710279751867323745847488771832685036694265354949095786284115058937683788894534030430944311125881410051158963407652137313024852967918971840 +(67,5),-1119484938547239298249774260089656187648518475983307199178355376798204105783126776378223553762560 +(10,62),52026769674886911023120739572997991484009583193138051666444006447893105929816284476345605894273152416017460780429510403616287775954085304018464644337600 +(72,0),-1157655053520527192447365641936504338210742593209432241555305619759287379543698071360 +(44,28),-146227506858388261046430414205309541654225515637562063387246887634905973730710023873253140469259832754281438710335279756261212160 +(41,31),-81263327481231863823004992010290588060466515272082839794770411764535198320335536576305962827972921407512570183860903150321690855600 +(42,30),-10432551467255556417018354218576474406282578813223959294399344019223504016267764345056097369876583761088522114619111000219312452608 +(52,20),-361475068157626305391675527099758370363785271260039991625367964680568244916734798029709100945892990567770431086426499200 +(25,47),19957537538294952900680303000530210899328506156428306511807119333751106788860896267395422708819715804930220401326137667876858567787626168218560364560 +(36,37),290881167260326438427395126757538532107163681721625998218688674830838371177300803089040658191184984089250680974591792656230337906477572460 +(61,12),66976491581443985901709366852272766061078154104085303948390311165956671766390147778749899940601631681403035030 +(11,62),32987597130258600000097400166903504132658550328475529225396261900211628646859915420524628651569910273519371089623597481938404273775971440160972485527481145280 +(26,47),-227900892049152617072089748911687569758802459248342295585070991753856147449486304424620708351121280294605894552570892101092499451055676329207248483040 +(56,17),1282040702408057040465570696038760005137956209337239796997662242450373649006861612855629154335477689363997251036602680 +(18,55),-54481911410770353175265498957812748730814443445600774753516456122666372246532853123792374209307344785144824843582759183840149922018316699904715511766178847654165424 +(55,18),27035068831709308152409231286280126112140913043658270926182972101744759159340495464328529487478918490986514474612494500 +(58,15),2150026099330464643703422769304991208209659320833381668533600523910854171035928771809050714092011188733738363326128 +(25,48),7447327163526011287272183068708683318174628613178238352050462415246337810891185446076019182816043540224660097312693147687979510747199443903682667780440 +(45,28),4467985455250660038151405540720341272903510706431283158837868701052279437738457210011940647106553357656826302522878774401924024470 +(24,49),-102026280489668952379045689532763373336355725049084268766658771011541893601279707446473871422837664150420552770680146462168257317088349423282106660935940 +(39,34),1014380936390574876456468009816910960006235433750446974987897421660831791535551629224275459397949205215134657048431310532931835707020630 +(65,8),11989482999404272442628386941030028802365232259015790014823790195719984388656519760593921513021434748910 +(27,46),5000337885180072219112208156471278495269898826817483987950150363016967804615154263288669658103155193411080031289996966384393855858224534769430398476 +(30,43),56705343684828234302415432304357435916335978814329517926677737745958860674166939812813226231241328512763660543260172095326364759952919583417440 +(15,58),51821545487749863405681963687346444511908757475402388155484313410897401440801816949079768700437382054037559496761518833040841913848246982116969238440714906033236279180 +(59,14),75489537000773017791820776782457826783541625231625895884713659432458102653780194366584686916471026274214847089400 +(6,67),6483344754144113748477329553094435716893397620768704717103760630890506725330428933077237813918478751652240413862499571074085600 +(50,23),29426185228560158610752649780096122429708432446729776040585229513248357043092296068916725026171805207298685746280610320617720 +(37,36),45080642788938117152628909188166473613375111310813653987318099718165601744449888270642603956254771825084816874710432713018997327927743125 +(31,42),1489800309794960503718979883424328776637289335636707892280226799060680760598155987834363662176336069981469799398935140434984299755116040147600 +(62,11),1675086845930319749615702296620375354929761348946808883258978681620114100613326205485415286728165495444707200 +(28,45),-73744990938074082419520680967465312717065888002343143071047386733328329127760305218437358047484756022063675079825536023094370509953700605918167056 +(17,56),8702132806467867382735029420109165716996037116302037323534236604273868850169259701100596616553195348089814672746085988141858812722089266294709022826203492806343988245 +(57,16),55195498396076025193645571474733893604209409958515509882965367844605179689346480364580096712003096520477469079553475 +(69,4),170386347495192313124781866729392946871963653264526497891658077350022352507941168986475850079545 +(60,13),2379059727810147842005212261054901646455077902750719732307754788755588368561137184696489858657512520683250874860 +(29,44),351039668856865293129340621713803193867948038777692436200651362968273340525135048403572358568133943147859782181532865655173069146659453572604010 +(10,63),1721951942893378224795746346082672780108435348324593222519221895558716360564676422343577607918888439252267386416824757939263720861922769895531263536650240 +(51,22),2162527012120893609288504058198944076111251818449344308502271873121430471395310466070662785792617926707708942259744358848320 +(48,25),4312004161945454403039554580819596086845939554775251007176899041666805039683428950771587252926842917723145711224660600051136608 +(72,1),14250348043556048344209412510383589206296976184732001156945840345746118240199200481796200 +(23,50),-9122654342405887249849876990027436898621260064125393047589548667737779491526667147825453698173472796930542427898345360518827346880919727239888834800252850 +(3,70),385043937209975516220739097227314789404654537864875994999872718634336734579285658074323179786 +(20,53),3950944541982250401073397925868806641342140099008810840182919696811501127172060566401646757439794443271674913430941606315458556388149977141697893222212535126880 +(21,52),-78989785254170259846695914126509051526282676985106403953924854691017625010405459839425385653456775020567905599507087877972951901885834673078019655380243967105 +(73,0),20277828841708869123437123615642905943120930680434585923739666337687247836300038669501 +(41,32),20063582843710870802615960706416058693938751557591413068778121551600479960183351681670348844915101947202055385660763215776663037287775 +(7,66),1032752749430047563226491631252020229799956682767821533373033351172279574497831064946663312269482824622532405574605864558425350710992230 +(34,39),11758346982766695024664966188461599281078469771369918344348323668686569211348120766043146015430330804014049306031098414027414294143919215560 +(2,71),8236258776268894223021394951183966520081705837650531779087702200799544654720 +(8,65),11641540719123358441848239001148448300893421159083812442161152383748370616875795426708302666711368701918093277433049755416392660864789270623964 +(1,72),262898219142997262976662942700216486943131142312658925 +(4,69),10536596975000240227149187873858929696261706319274643358813130958915014628142034048270806909667349826634840 +(64,9),714860649783776487015983775316574842973121058031753408976502077158894329817154663517061895874749772108020 +(49,24),370004357565036820435914132132046378790812335713985268154050811923171518729479042992612076357535510856073790492559659558336390 +(52,21),146430789183325849746998960696690200657930213596322211655626743378073763883680591384155406918919682882490564010229118167640 +(43,30),333270774458206364225715484063275324715583553701225908816366847227251832377766439111769117874000003009041434619344577588305695501410 +(14,59),4101046417365546184623362674637002232212255600546643764698668233763749529622386409714201308074374733893019484933412214944046256409070700275335585632710212390029669760 +(68,5),21045149416054753343464115374870162176710382082300105589109932458896865965407375846911193704269432 +(35,38),1853649260447073481153943307092486759627877081348897606376457334268532876239061232680531236977789919871155268392502619426641500318497504540 +(16,57),81686219928974588624744558410196521061854324298353681182286147141578025579535915910551932935189318929073813337423726425786298323326380088342226325315498832733325626420 +(46,27),472218350607766106997212882554008237110285959754063301453478147207231514070409541276924340060897877520355540096259320135932235840 +(53,20),9109845073326441109987515222246103303569790477253667103041638766518162122161486278358289525415507693254197498099209171289 +(67,6),2093512937651486880435983701353325837498907802095862408298698768842627790478210184864977532444225250 +(40,33),145413119506369579390351417084322943630226570602221177054775616064249118928469764514842230817628871307605881335073111145074377742715720 +(66,7),172400244110767217677819269401667445466100216541487483866379411789603428787756628577377905362137840360 +(12,61),99518757639814181197342355712160338218377858126550435263792621302806978113926970190125829992224527036518605011265232184863434656685738774663772911484241100262908 +(71,2),4853404028837239959970305521999667542875633357395782876613520167600723300112340589114142140 +(5,68),1794257323720712598023917021929353028487800008209439338039816492250381328785800392467812655374324901246442526717690425 +(33,40),73587626843013190241008184128032741684954458401704722655077406342232650106059006681382544893901023156242032768818696194991529285305191620742 +(9,64),12811625612341140780473412955819838598568581932942736752876132680215071829263898478533745981122242735963531219266103708562906181295704837576378762740 +(32,41),525616095614823574451141376475795250888539965400151977526913043322238993511986371327532467436569737050042232174385236374748391352569632745232 +(70,3),1067344112509878102406986053690208015198760217281805453845825179190145566957382300133985767600 +(44,29),39725515487595870044232601251196441308801014424442799129970184550336043503182967985539448200083396264981341661419304886398249059120 +(38,35),6851046831646059932947958591717216167083303794722108961283273388747315765907929477469975109984956448080854763936809312903265030616486552 +(13,60),49718850018158386376074939497982187819004015121337451074187980312756538340123471440984646237955964712112229581714375876173201456779223241486118957480535704785610801 +(54,19),519232655703679912892932583776753874916830478911615804720939059762620539659090854932940592427023966404340778642553589320 +(42,31),2649831130275600730116985519975774004102274894710642217750401430729323921924606369742183017692207923982699285088573357900910222597960 +(47,26),46720897449974139455507818023169609095990657402500154835132278013156208798402823479123510423467211943959233157964238829634831540 +(19,54),128776157241216244654631117599810758966889095043714045791731911709605314148585209609943256914493926664936621535431382879215861303277246036204029759230193656800060 +(63,10),36976743122541474038022013519038381762885886883630379127579255852659514971575090412980672521503938117419200 +(22,51),1099057905643421719262231038273161317635801182961820697570513656086098639658523480352236658570549241735188308035581989035317997197783137688339093582716588616 +(0,73),540 +(16,58),19879834948321678385930918751517727055377510886611000944023136315103780251873167574279338021121813645034888666680952350516606547707903814929114973549656568999907783669240 +(60,14),-1660983373732486366831386406918103782362748039756631108120052687905903915009307340629186269368899753901673579576400 +(26,48),-58880833432956224038371232040340541829458582741043431489402078289213928935862878544616432650972224896498958870960983467733347996946630630282875256824738 +(55,19),-12718407835841512077216803508814129241528368529639637278775207389555274206701755103953470809303835382513602190274477284480 +(1,73),639462320834528650239256377466052009595517628898278136 +(41,33),-4884929970537172943738383209097053489970727074454148808357888031269207669654678821918250414488725760373125517775616898346336075421431832 +(61,13),-51320014592070145127163937601513057435643036455271173409569332790844378829423157779615980932289995378482493715720 +(30,44),-18184836593838987694659728506742951578361617812199107013466894542549293333715815605631554558900372422042339624508708903647793099434502717614348920 +(0,74),540 +(74,0),-355408843869279587650062912559161572530910669707995678328047084700919685432035653606194 +(8,66),221377188005841490503754738360938325457842552882838985475083856076758131755250329783695404072881603959404063042622760029067484846287206814518320 +(37,37),-10255812644818242613496242060496175945894619438040626311374206092761265507792830547377329140958163073570402384333521429804354746421243742960 +(64,10),-754268754561027563133275145832949309547107021246094346303091701855024152314119506266721324605658854163102756 +(36,38),-65655849031071435811269782003078092035952243506009082094123747293779716024507432246908111273244356246038575086937261787454800439814958798912 +(52,22),-56808130948345081183014049088562233080938272828407594373028968102478701847103117155464767030143909293383233160894478502260520 +(46,28),-135449561919255319842986625333845068276682725060646107844482917853952387280921002666218314857297686855754951221090544020338661932912 +(21,53),-25704818237717984369833131915091903649289790661132273759312369692760242396281887946973492093293944949322484152559921299186382038988732836234035873565082268382104 +(3,71),1935337446271669126896308426233815613514716741708250021754484607913724796157662764263201707520 +(35,39),-416785015587374224395727748899531466703952765231537217430570856806708461002548227511603248702141848678808038157060518335243637580710037315520 +(49,25),-121742379001838683043159512904999521631575911446777656760613740006494015305025682994580969529922048238851081176713227686203291824 +(53,21),-3756666658463555852214414410543398859540651898864196983459574363691906295273454004749724316122902082399212086003501961191600 +(20,54),-635111513541546673264696548905484174301424719113880330746790740129900021813685315181577190355508880060413556590353192416272325231671971618401659101832912999441360 +(66,8),-236289613308825416013209304432873085241365458299219098483403488732514068200507267641720882407269814488576 +(70,4),-3154675462944313723647452356539742841858671250278209163797407808556994983929591836639891670352680 +(15,59),7932230099535991191108721072110349809259248459904619239557336145600119533612529177689990992918907906184979515912257219322471875579850504579164422222097442622822189272960 +(40,34),-34620314998543843278776248120829768044842661041676116283864174249977306474656958900704595076293174850803188692622267029794104111852949660 +(17,57),4307170450544862891202981496088091606332588498002257025985979618396959828822424848463783158455709233308376592200671555941975836633955645272460481079720770302733684542240 +(9,65),314803241102126520498737049233514079018528234711713726514374667292017784117460842137852947067262898891368958419833127876432384589708237977122209565824 +(2,72),29912752304698633743445939809306211603388783865089137299762056232774977314890 +(25,49),-375877239140651579002870005255193321276470026515653430920598127291440534229414096044653805258205441340042843260246196698215806509515312928995048000186800 +(22,52),690324696511512223540913581466785920551679787815714742659985141230595854394461651627820642816118625520161704130554961581208179811510531501691539289326611407500 +(63,11),-34791973487743500532022271161751625690878843144908917444408470653232290394828207270873672134974244355108652800 +(33,41),-17374806245540407759030271326084263972482083461021773867428090673860772345202000266088753574564176957178257236232084228508391787356617093355400 +(62,12),-1417288327134586042097813584045741903349859672287931419258788254602679050694380572857239065099210296788195108760 +(24,50),158259881314256354929516048285129754806587748252947979988999379516270511058179503645169215005359305851090169383530544806598695385605371711982229393746560024 +(19,55),318793859807847471985188706479524351378752357009072603202807233096368710843087738476482167932806391049058058714858563350569265064885209539745385983221618791066273792 +(7,67),15231673570669116847099397418390147795074617638753496151775997272137248632713914547552312456982166912725463841072882852319837606844867200 +(48,26),-1351158983204437729928910329523814648452823107641338010515862464010569965867311133336203324963911255577153924740706690452681660320 +(34,40),-2622166201370403497809254976733921799783044061909860632017464793206084383455064705871667716245524934922499230368880239760091087982102602329148 +(10,64),54965705983815619766206087799697962391107045393844576201173182437567739821377582815526590156442103223973881647753755460486181855253740956100407370258270680 +(71,3),-19479651860492435711470633092038018860680278370421080990309077911213096157082849151867292568000 +(29,45),1204501208195123176604321038995186381519093191995040813500084998862206085728041314765017170587562676228431325248937186046075064456709567778275554328 +(5,69),15800954279289787547654943929024576773371428262247766913377025671950828677470730137829699980705584931200629279257373360 +(67,7),-3342435303930722232515702015400256554214546097898609983459295081966657474183519324601096103038395387840 +(54,20),-228320904057906158833971900711227012157803272032639318756277284359448568007363662988278262823938124297807897024292458107244 +(47,27),-13985070863817296233603269705801330414670311785931930186221797169050936004025197219462289646919228923178370001353860408935621686720 +(42,32),-662120195692929500434036202408709632327772856234765296088604588736651662476893068057367149505112116888774214215885223509629798187339450 +(6,68),74076761243726666964099773138471977413014240357714721877532847556153968131244950656628811437541565048605680072786408553815116032 +(14,60),430044905255128709129396190592531864913673974292123810513737222994208869497988581077795093773334181358136446317845381814724580327686873125612303828522531563297089334812 +(68,6),-39949549337409429080780966078700281512460716379864923751091020853045903692151661443794986056934524600 +(27,47),2431406917153329375017953093834710533367386156737764071682654089089167867786023598117554601639959184384038074889210280408395606220164777793075579919680 +(69,5),-395478052990108968846708016301581019944123845699872487787132961932779288477074521354964656411241568 +(58,16),-1265668700818008670869462333969032486275763247489188388926975396383665976871716315996574889149944785840949026315045450 +(39,35),-237013061922437362442273099948745036388861650223834612023091727480861686919320687519539188296484048478566872638119109129725927389311596352 +(73,1),-253048766700763703350977767244077760176910792510421991813044097933776008109641362650482240 +(56,18),-647483971293590937335103001842915446041495032382986065451355726586694855998712597627807921723628462293541935077186768760 +(72,2),-87353231774320227502512238267039589961561018899960367585092922726175662185872008868685259420 +(57,17),-30036352480374612919736153166751208835274393014767213810194876585868533842348755178927913818346473869280159707089900440 +(32,42),-91753770409679967337356440187796712638445177031591943185895989554273110102755946748257333376117532166557624932452008633449502250947758525602320 +(38,36),-1576713153714122995958004521657185368444654019335291588893213989813785355691314891420206273235039068829226962374561826016183155628351333280 +(11,63),1380074489283783502832526415987062683918070606710535207530462889703517692962529282264566733698029723821880859356216715247466773242306444904096099831425568513344 +(45,29),-1231998932429016808628830702803066409106634193628907227097107246196427767901287566416752186434370943192638467525635931679011685246240 +(13,61),3740551353563114025916109453868523199432281580251457205628997756941055634215011329001234334282984014815684630514029422216882856445399457121477222824915915409299191080 +(23,51),-12468615312497998421990695107225639030910394132860980073919077336485325752501027612445456464885976410910899703484759362944110124482536023679202418543901263360 +(31,43),-905016381516255830338518332002199947826612120942247716764085626897109073387238200168653385617501363983815794869491998072699248556519401665370944 +(4,70),70770342422415816504461023297847617036310615083548353186162030508965701751565848751714032372829452186711232 +(28,46),-64731268193418890311755121189212617652140263560401421035719289132552498108456804138457987973834865315447464444039584945017615038360610679977579382240 +(59,15),-48280164290977292254799293329847474574595561707544973759124410606930840748911836125163532677486147585648967345223808 +(50,24),-10197583196829303624828067780278169765190763833350682663832598375464583699415159187624133009452894736690882709730055425828483150 +(51,23),-791717300356659058910413296188355527358683772002987863258420444488941278974472497359162408679427285059993935407230776601433920 +(65,9),-14329174186735637700390822865144071042766279039758668238024226544417856909848314678990967537475966321621000 +(44,30),-10564446307598815640703472521729398922011859087949554313519234919844449871708633202791408471988223061064624096639173208282916572596696 +(43,31),-85763538923450201753762140521599980318776588608974956960043082248783115056151871798120637928884984575642236461959513569992586222086080 +(12,62),5529484445066795210306366972391868921803597187552387780117849413506399234575420773574091874059692359516861819470366265578921575429994227248571790366448305604490800 +(18,56),-18934089831733285128884338431272785384815934944732131169413937916408384718949348728106951202146939089044484201999373384052486959879097793542721384299090847071864285020 +(21,54),7777296027784793330674611003294715994925101604595633254588870561296749820187563776395018985282349996788309331125568944712499396016908074866245169324861728639066930 +(26,49),21544488694901401795506955169099511175086542518531031680280539237555986930666156936976296138583065537148786437629276723042563831277952662327469486994036620 +(64,11),721207445980547630097368600704481677979556524063922652087280702839198941447426469830364560629713683738849319320 +(56,19),309994915017264084153047066894543298143642270039271936452720883755595942554108380652125594042067880736218732211719807553560 +(6,69),829346630349536240198863748740514576460778784091488817262961560170754541837564207577773671692480397850388597069176873045105167140 +(16,59),4335646528069567529057701611379194503424480952654386210652247949771391791699475966823679007701334159942052898740174601550810321061948403239526255174442416944470651779338040 +(73,2),1572599844436438019956573645747359184478982638321262146054427695887637200670886407774048193960 +(17,58),1729964226941027663744638744867946044371527653027527624803119805284901076450788343329946144876792533629246626055744812378980367222844889053244890713063499045147688197450980 +(5,70),136749110226424458813107489397253202038313609023572984172311925325890603877604008749340804698947918924996005626947515730 +(65,10),15360208134623730318731945885571177146100408401663907082430884181057347170093820113752822419826920275484356630 +(19,56),151463136588212751080862895197140527779801542812421283882126597768607829644384666715002163219165103288730561544242738632246095150150222526509015449460301986375059492560 +(74,1),4495390550483679009089009318187872041230033507609467165876545351887907631104717616969019660 +(60,15),1080512184059039491916898528198717817013498273894317865394591324600344156472283013223775882336786618050802377026952300 +(41,34),1174593159509637224986666212258079752629337647233579408236032099893993791551142538063443998748994423848583498206330007054569346793337193350 +(30,45),-16942447957683607763070238889871971478112476676470191078804785669683378025200028571955832717184194040586226040964923784237795144372610398760274694060 +(36,39),14790497234699169940618232825452174930547807459522621937187867743911274257371402985327452467399495115196008687636926399427362493055701294349940 +(33,42),3647936565618599986891409287346695266328151241434884265115496518762180605966780403382411573408870978652724849820776911219202947227365295601427960 +(69,6),761884349432195686767760268747028006919449904402847786207578449703455534680373606433728044390990555850 +(70,5),7429062620626603539233306284544923079267812732875915722928079787515737150270149075900424429414430200 +(50,25),3412647350466244818906413730252713587874419640087949634225129288165695036652819786881677162375942317798439644682762506959258152700 +(4,71),468438332089988224748859549929986404146896930411191529123347081939231338996444818672594809038980032690312960 +(14,61),42275253956346134485622593021144017977254942292153826150649521394716793690941186565381263027656004801415363255769751924872131466377969102685176401560785463313527942958240 +(52,23),21163015989301391952299830004148794802837396898462526027958260271743613610257448003674048238217257687936092660308289979183864800 +(10,65),1694056042178939791447807141539650082775514646520543567834686403517921383684059644788983278045841915937729462816602229025521476234434570747382609115849173960 +(71,4),58399622487495386782096737761075199983097628387392448647925372902550388772289825030726785623345475 +(25,50),-2306452603119239119140798690799655320167464499545549177793205716863457638128577622964644539310687786162790544502816905710568858767585714048147377709346793330 +(15,60),1120341249028812958446025488631338769029444502230388870036750649721431107181735512969064297971693472019895600764419649848735876554270997034810231037755523734438101504383620 +(67,8),4651678039784987995690576723368702696546036393550741052601458450956959539248053992329851363633894554902500 +(54,21),95824076607728299379350309771906166275422442251103668516784344725863356046494803634932750781724869160363017082489841802556080 +(2,73),107650392525155720169188776641927691944344760929998782976907790228761566848480 +(68,7),64747402284810170207654409737478096314149406396118303017175339400898342734411698723187511300081942788560 +(20,55),-1951137175925402783127472902202368139719433428549009176646972168069541723987358843359914007889972741329385714483936819026106612352777610872637654263135494653048897920 +(39,36),54933240360509965713947136949380570777314324030924368444949601055677586519029916918260570598060966847175137036901330338035882875387915340515 +(46,29),37911286522517473039476307942592112349636030562072542251036768009358256389493544646469036689847188065157726075358980822064185647158820 +(59,16),28913900027596935123598313305557036598904606514209509176633244268926129050442522711256964216310536251080354493476701465 +(48,27),411029279173271127913609056183107632212547298384619612598219660633569962912926811063745122215346697388881078775042379432047835355180 +(49,26),38786016814057488769551140112107007216732175553440658195851228177734803686599448410383455339378498713058844649290197647806072763720 +(27,48),316570878629580625337911077242113637858832815537766625637907512999704180655795324797083363726944743224221483496424620575058248740679479912048629312974970 +(32,43),23538195250526977705240084172973173276834931066303651825080948447426655717162925951709272822130644106720242381075305301095998910369752134894323120 +(75,0),6232931827880408552195082094047228795148103820776131764903407366993772824016051342165750 +(18,57),9630846927062683374273869963095337695671506620426665198228832976035530697427466883430563154770138393756312596877447630524436033018213119696230384926704378657162336605400 +(22,53),152316321481021141500997891982297022559321696185134670803133889984874430218675589289989208421301244934899702979230324602800104684491370634442346810698324582574980 +(57,18),15436794411357152386750816044521736029221399676408706367592906710163843589495578020094964321536098547611305972885341491290 +(51,24),279131566663967168470012744109462073772982417242575628575751337081286808569283006740629565570785691941147106287237529655826305335 +(62,13),1104126210916314724599174297351752214076668117171394829934224555854164443609143663826004335650359808439278470291060 +(63,12),29922120960964525482122393639450001965531924499413824137985508726901488055171588672116094504133257444079021239345 +(43,32),21694911242354482326935179212848329182714927636380622094917422364949422420242252190464903098429141738922101531645123328666703609144004920 +(42,33),163016663130878357393536737873256681335841857286662903320218937462181410790187237613152451096252695087490369079317154625240459471442613120 +(0,75),540 +(12,63),293335406494152154696196356314808310073594857933970249637831377515113550827970624568193113526923518695748367898210562796927598406451538011275708407816672915215267420 +(37,38),2323725396458435217161603471019079994576253720553708848837308702391278066378637688256214334852438678527705064398603912623830295684752006835550 +(28,47),-23600693703554009538631456552949576679847850222636192578168308165556454389602976419905187292891999030151513537462633770137458773108260622606849290736440 +(35,40),93343784256615983239217172076395654588597545164235530800783361820536631167410582019155979491102222670094346297988645986636683749798773051048885 +(23,52),-6056761427977635188509119750608714056236625005864868818612210920586016721699179630280293310871386903926994131770621366309456319440844344141164719818015605951715 +(53,22),1483173965296237182539207732669917839236285185708576986671956515202126417210107618189008629138498102801272972622263157886997840 +(40,35),8158509256761395417855132744801334725842885328777839786256117144592705515596735600500043877908771447591844637391853347837485884856431505360 +(8,67),4097966172476599129914063993763418039260724244826505882418641846256783273651274028205062509371319613290936374264599334896909972732147876935547760 +(72,3),355534507641552090718956382498978520840856964307476248646329803214418764838637144321821583224440 +(45,30),332312563528880557072548931830728442996939586033679761018046958495927445259030052315432198844079126955936412472581891924668781581257280 +(66,9),286828027299334142688632430893819658474497101588028098044417450203465887500792926829054306938376005840876820 +(38,37),360685947343257160171056643592718483485063370783581806735726112606091034221354232175092732254448604042964824224831421043103784328743403524880 +(29,46),782821964800741358674802548755544440046957318682155232073865267112033366445211025970347121564788952052893118051154992094883518157295518678175232767560 +(1,74),1546054260766831173124725339875105877077612331479305080 +(24,51),138191622664925124927677990057271573412726771341232717442710623449686519451082624933296784864656216275076620308807855457035398999606504823945646185959790413820 +(11,64),55464736801342244711494036639528041703886585066093121234311371786352580372583472771752626653813750677717016919788074546622981118897973073897486076980439198212070 +(34,41),599333421973107932071398102897077857910642681402707585708197967054701091188628174276901000048496638396438638229927316682442710260623068962212340 +(7,68),219434298823085988923659866833570454661984386244636569969294000170729498205713875680643687902648099658265738483063016641649109883599771950 +(9,66),7501127222035395148989022170370829478760903236688205311527100226663720072352704750888244903516687820312347572624361376179224609674770952329073773222120 +(61,14),36436783838051002731806978786059890080173062057511951700587131027641356753998564435850966598553725808779598033532980 +(3,72),9612409512946637052621360932448288232442008347179499143724691696012229859179851703197004697495 +(58,17),700797689282277061054940521584776065486228630538591525560779502722351297482816417626776188999769737034821626661417659320 +(31,44),452810611514580255710385912490215676655646049344063416551618148992579536808020063010379479848164458281645951872244954786954810709748901469106944920 +(55,20),5691880443126462488823112743987125646468647002861529568348774797304227355010267611062140898299761639846893584072717127731155 +(13,62),266609801540679384520477583177683390306292411520559367779420695948145008884818596117580303286883231616620022756424274551856742806581265922855110307254767300711825123730 +(44,31),2755031858997892404790012668707213032422925700097809351669669878899319440477689238611730802838501287256589068336941731412179042877924800 +(47,28),4074509675776516525033948688585688309257671593365181182969865658148004153763616381491769113378502263850262352968279836445626135711160 +(50,26),-1105322683575315540128735331110668370254802112787691399337078279670605268654732818096340857620515304129373441518674246427337689627040 +(20,56),-1132068273724884609506831816624938940435635366519204322611621213958224936913113216801408454468109117812546773241984922569113009671735618574362357166357525460194787471520 +(28,48),1048726466051050428184199298796235400155210393128470748679911365012142006489866068936414363144026327892558408550244117310258300350432384803601093807181040 +(46,30),-10373249230114326669032135520978208941092635970028956840056748236015123166461923409175016398480475041344139183667649696253655308965632192 +(9,67),173479285844747016663089135329765798553313036708756843426494113227763253547766562454673581602907623525977142899649739307466188944685248644349438902588112 +(43,33),-5403149482888905319037315038130095128460367719505193724224413583794451062602667095104710197529355093590641302403057350795434736649514065920 +(6,70),9102899400442830605830454904292993763472518436863058228590885120774208798011570122529164175761915561363386687881961660939271151424 +(42,34),-39604814166649572718879824129043775340715126258004264997785411248298770622311359174708249267994278882183774808874185752798917577889182999360 +(7,69),3089800617332021461060556193197310456688163177988913258474982486019901289064124959640267634022141467962951168753317814960669207224772866240 +(21,55),14498401231660528952182889735009486003224015910413381817250471812589455487717682222664662590357706164972858774496279188017421853384721569167350137634110965664541671296 +(23,53),-560396444821633287577443276297627981531936379831688527884993772973558782338448796975395821520964330927826376618206454349534045729969046416693988481100356952636160 +(62,14),-796988028093162233082250256909016157315473376029013203983060172493227811216876787923966353990439464053957756289945600 +(40,36),-1905470029387284284622766506890610299706856872625347324835866198354600091554385696159792298199738766609825129375837934848997599548266498755200 +(38,38),-82101497965772433050831110240667889206802352637128850999275309635764117746746387509255769058620415578483162984717268690354610680692489592647840 +(12,64),14882157594633788008778680062375565308846396889561815895025173449355137566461890945792111391940593971681835916065868978682953949946999254911258829067443805777559405040 +(33,43),-799760703471418813296252768155412815804970802650293685560916958426253125204975386481637072256342831362416421459467328130121321681964674150333836240 +(19,57),-29400306942975233905981929889541460486504090038610218251474381394626589066279608197734644799979335438863610974311603995969447464818663014667649146803855159930750179066704 +(71,5),-139505508325743184352889463646263283699635556852291153934583726718076149684790710840903603765230479360 +(53,23),-562127346278052878388316943564549324600985927605318626426158833311719897835522120269907065116300080671869384608942365240905685120 +(4,72),3056669268778264292073824476004414609132192872132646214327944691677394426503200175085634749339232728536763264 +(26,50),30615136946464809842439584295487283939032474305188358926649611160743805722023353983319663225295399332424825689303469527711413182369592987400191701351940896704 +(39,37),-12644439791065307378457101702496270052739904036210398952689221606152942808003457202784413351112440052302436703671001761675386349888618652972352 +(52,24),-7589624898796820380585152362216681342094653783720981207565538758618083281581179194131647349070160418553773868061182294499507501280 +(66,10),-312293973351810976761774316396204635765870687247268315077790117702262210544101203541598824400492603742993133696 +(44,32),-705719383324209325637682077938674343079308111456507947846952709168029992182479821981599789389998148790228149586136218598391485349278823440 +(48,28),-121634841658442045101560917411678476359262962767523468388952262627549149019650359022380485460172079287405798801262280296194449667185200 +(72,4),-1080942495083588814234609547567301366600938823529987650698393064598757590345090883815131837749661460 +(13,63),18042303393391570566961717031366708835857846001154644476681129853220898632912724954452593999888922947493404596461954237895543908561700630028475179565711288984888257770400 +(25,51),-1477685606864974559470791971572304899595909458520591140465017792586096676105748291192252610253424841810583157416907830191601689971179895985861237249660148332320 +(2,74),383964747969214946753637542946769859651955096457426142069895096606695846527200 +(63,13),-23693922001009602498595547963201098451449686051770689106085741351336759618435162482230447967913735963903861484508160 +(10,66),50465178080268436261961088218490780916924366143294265512668409885866476856561457601466056078780632070418967138397836711287797341880798221667033604405607342240 +(30,46),-8873326950638332374684329289883197063652491342607962837504095373714468808875894632722308195073841844207258064115801721032007549850302260507247403277760 +(22,54),-107842242644497140644025785987486664012934203520299437085007473218848894381936867638271278326538349615371984715988252808569330875092333262781010836654288557890300480 +(75,1),-79893249183558185088338738470093800724246201714757580697619956557180967066581771675823595520 +(35,41),-21081085188784054867496591281093962110636566042469155873335995415854816934306962547812294447050082218763818347269365342329260738714638285746516480 +(54,22),-38493135668431116022949935469659723392359016594719647789695527881783482690683531414154342444306626160825207536171688323092492800 +(67,9),-5733774300380353970145776621773353832478457992771930484188022519185578184887763269734931769374427226128640000 +(64,12),-630312357753967429381621215906833715063409264096634763532028069133241725366559130696961830220983218566604724545800 +(29,47),194094427045585761561037720458313244300708188550388632271483603735526940551607946471018196936624814412374535310136708087325692760213487044594171800318976 +(11,65),2144196214943249756255985548856243372496419235896983653075758634967316534317537125003949074552090496782712724826715337826272350990649303213183852779612677149547008 +(27,49),-435664581664715434450697579070854654970489809370937214164524177920795333620295647899178722221522054875170808462898197424258717452762756107292158043001000640 +(56,20),-141160063103342406242300862923123979945229922744445873102001110903908632072659754545058545353675111649451444531588548159293088 +(59,17),-16285256280329521024215711414454714679115889148903855537744099596328749519870686932912416993296680822687823712203621651456 +(65,11),-14921314397698578588714252485215108886802770655402025189820588350149615141301037801532090521450925340516656034320 +(47,29),-1157661996685243656894065268797848311778292021488091303692056198182209646198784076319443283598497665602109782257550336064409158918938240 +(15,61),146711840456050917257238449216982634896173711954280945448660734328105538501285342638034715783076237842344692570300615610699066845045272200646791713176544247949483508689230400 +(34,42),-132685302563453995686438887821452584949463970076845408416355242035639319592207057485834389294587714992163970148187253789286509908799442363531433760 +(32,44),-10501671345082115579291553257788956871149121081446657854525859205540127246693052557654591545959188082535035686897366896061419119148332684762163352400 +(57,19),-7519582072306663690708903116858915042708631243692186891914886845266473568181859631496254938156729742113813268080762605942400 +(68,8),-91476522900145656566682465805076260261435686395170918878354573642318507626021144150641155896435694358004160 +(49,27),-11990333747745625934042551621269116518023871381670274742261472560142160926479873966246801112967664781073893221054928690958053582411040 +(51,25),-94995787568910554334167720155539567326800128206935037133802031865375591229084650528873557817298869010458216472661537311493590173696 +(16,60),855546856309383046630818233877660363204248310790769390706214687279856254029905370158498429205519693978159718600394859294092150524952939769188720740048718451880616392690187040 +(18,58),17285046051444710564469778430020292668539273657835534317212056885741699729743455518107822652415036779763838118932240971785285031791441321431949731929721774040334871194481600 +(55,21),-2430650885389610962339913096838262463749033558075061908440951871825528130335188279856445140711029920312694047665877581559961600 +(45,31),-87837902468144152191916043318157230206135244694940124715528965727229855109254599287002301332637862874099024792413967864439529985888440960 +(24,52),50671692766534293352078322424526586470167707519103765246831431081537464160332643398917003002217932443391836883020151552919516529197914607442142608323730139004816 +(17,59),588510456364864568022168070825774892188818718677320149446852855360338426695453356310525658088454238484434640983300061577803686901841550842990593951657612844874894375874132720 +(14,62),3907904892376677459835773684262597912338478786690718207279416655300216571015296636161369234660383052564818279947187978626250046909371916134992598659540841228885866315214336 +(0,76),540 +(31,45),203402089543515867601817987354737999709691624358217251109449102712408616944421726893843931624983807508213521109118177281329952801971302525276248775680 +(1,75),3715950808498011605192892935574575525090347485112468368 +(3,73),47190035151841627189338325693480565924276694771703681999789785581596146080764938933012097947840 +(36,40),-3322550797317710552854756914650064124097338696178620527408806924758868489075560814288928103509692409265098597138237324447746444794865400248724192 +(74,2),-28317912584311183245824741741827335839089707113237758982687399998048717632210301429621982808000 +(61,15),-24103075528108113149852632059986241628394487561478463149560290879522065628534088567776402316452086048724522154476822016 +(41,35),-279317539826912224502552081092903694067264585497311705217635297775228569052907508129891640845438214335070293447984266454195009375204515142752 +(60,16),-658134615465234319465691481604698357126127006402590309384793456117238167915413511225144522966473957842036983087907250720 +(58,18),-366414981299910056541474623408126964961978371156911161865848129751713072713196970710550247549330736696126958460293224656000 +(69,7),-1253217731040392646643690976892472161170260014343561824722860139575633624166496739511796037861397878560000 +(37,39),-524948778306923439184442334920518258439464559368220959083897064263125038577147357437321040553458574685261715410795707673159202929456413348548160 +(5,71),1163556745166345867496820355047008453169390040609353561219455537675350162610802666108894849665701492204804590312250779200 +(73,3),-6489413387711967803024754548447873945195429762973799264786882434309619199126489208820092349048320 +(70,6),-14521603054591630806960026753477438220103836828323411752624213795986810685940039526445191690358350750720 +(8,68),73898165653314575122054001234742311806801797810808345781780051864279731144950802641367101740009623185016356951395133695060011463701250375750920020 +(76,0),-109372225410821595324373478396453060230373245488082911738091530657018254624780635320461328 +(25,52),-372267332936508477027727968268373647858394880331689786735600225157388353208326375549288033367534795594397755046255869087801969208793725006918020186996981476001820 +(1,76),8879772850080882815464531546263559204388714475047723790 +(24,53),-4524612641152500527778530036683596834766485667628668232824016803126705888818363243871351979538193342356839534284328722251253045333457221847788148566951362712938600 +(68,9),114470961115648986263353063997094555628597013607609314845695622110029031140635659437814517005718262166296458500 +(37,40),118261308655151667159573862221669280038658549516885130294377937520637130604506232762503215770019405718239543060423455784951816218925311819405235707 +(41,36),65774000010041394982867607619378583157109595374275254259289677569406316005138092064952798168974131420852860930639762728847832302389205251003820 +(42,35),9508008857009739563325749722499649030571738184578758217899499919584261029403066273982712346563126793884078486540003377091509877113611194197580 +(45,32),22789503443161911103358251754640396423922108218259469222110769296609399464684355068494443958363770328753654124648239458365360630337256285835 +(47,30),321348742623832497413643982383764653518193271684754176982547197557825182390603661050297595786028580365180321994660204729529120257369848324 +(14,63),340641956159427770890300510206583114762020999998850359925128089213715530661146284785455901370511438377955537570791188901350915603256182194997850563408271573713249290618809000 +(77,0),1920284922788920180570758403566392029532958553257155523102946148933518582213657514014566183 +(58,19),181557299147532186410053921865329644505928026655871418886594614891963767988133260905795646099446742110308780284324729746341640 +(64,13),507195790828775743026403591851093487905750733801974059559559806245848139504067377990572040670021492665666908044704160 +(6,71),97999175330657255772735522709309489048482718738928260116747530706394250846674581454428286884868386433827624696312360789042705210120 +(26,51),14991238467466751281094743664662844886187740740741462007872080843165404146987295047229728778749358107334576646812942879582540116990510505012625025080370113540200 +(27,50),-379487162032509046481696603335935321171910595211197272237071823217777356834382082975820445059238715103534485818191996759456741742233835140954288991814920776554 +(4,73),19668835261086862224438897328322150502826987842790948846840176497107562526178966952092046858981554545152363160 +(52,25),2626370759380192770664382974788733943793044622733442826888742303503081571341443399709614420727047340545011198225881541486757339718888 +(65,12),13248847693810856508262168194031249553556835260871209018839005791284951407407518652066882816203996562169853738900085 +(11,66),79833217135071389864859218772752911790610861666647337268631322221693541118291839276534234174176599474533689133649306180843753265408596877206817645487533534370754830 +(3,74),229044589693925820099933333817093528093195206689382768064837859683746250669545215655716644396134 +(23,54),1423297231520026414877488963500750601641233497764359536850387112327807542329146589570562028669744882973996280232978736785929419567318734891468468427074216934538257734 +(53,24),205025610989609166204604492903490966258064376019235989522941719893626398203025167554993852489359266165050703553861120296591316129876 +(75,2),510041084079873444928321456529871949829014989605485440242546267233247541157764255064503898352550 +(16,61),153950312420016869562468897004560795930977509926988893474072595129116332485307460729518600450022304059039954258084667224947731885817473369290068025481714985060598299408366805300 +(36,41),747826274362890790874898613692147833430967001206680762601093773931238038704472661092527387952254651290491042237542943278920104495020294477561066120 +(76,1),1420454719429782625551104930221064602676983265782488829391244517708940495969166362243797033140 +(5,72),9737439358400498337675509315709274500344316342614630090235740972588091345075483558316427596614978659405965648923913220925 +(74,3),118454494516962689173451266283458749138016328355201483747016566063907224266801887334894072323182840 +(67,10),6339378040085680063079927243236561458118734523505561743125604247879552845219532443185334618689662584383581730060 +(32,45),-1691481274263072081891904084447870773922225080179681255123943446736557871537250896143011123142399853520114454245704278038845403788032639417347254788124 +(70,7),24237383633778895574032457949230902118983647803213957654411718838627611632658802406119052813509654321102320 +(38,39),18615826489840331910566091959719679037758199589113897854016613320526756628792914641616292013138323686125655509593318941721356762878207759592578000 +(54,23),14839454581326470478767273783707923519852521350278326453902841234597025720546937061531116288520071481811199629498876326068729103280 +(30,47),-1010705224653954058210908985381027938970278659104366737708377033626573480828111699397385743263292561919818762533242548313529217159321994531736090011358920 +(48,29),35082721241684329014876153043300979027335194951894641441392100317346257800747538199358509786981669013279257799328439576662946581767712464 +(31,46),95093204228581975956441822122085211308519382083859591592890081438081124388530446913258724216976260172977754824141957387632376691015269667910751765376650 +(60,17),376970144481969715536310910279384535530387855456190511676324307010489694280960016995559781684033824989807595257670286660760 +(46,31),2779534216510834353198185708999595302899732570589691911201527924907003846849517431146123411792239256143339888631013099810824825947660218880 +(39,38),2893591569441268044913682664429987485743075238455122779718865107032393348033333874805842483218150695775973921505543148466414827686107543533787120 +(7,70),42547857010019619774396437962912448288806140004079543223179047862097135774412860919824684846892359523231518665422118196704028877909676055384 +(57,20),3483226906041288116292352244933531696005735542020717976575841915894246394320182019470524323367802387522707043530977436167482319 +(56,21),61322249749614509989111699107385423925816735586300798861051728998817921697128989672101347016401465199329967348819136958666656680 +(28,49),6972788048782668418276295373913511589128279920621008904768403424136533204851510178978769434584356752195583729065615797175803912837460766020155780442195485580 +(12,65),723209986692532968495644097898584911730826565399226077265778894882681183414591215835025784067349028063682771194731395833590426879237047825743705953330062439024463482544 +(29,48),-70536652621383079515425209410007754505275642753375498235870147099482230185343228172128071555521823964795759099702261697464592871464221977576618204832665660 +(17,60),173979024132278633533383055041441762738969016536019813237688463247287482431402454655046135129509253891041801851229838197800759354737732777782360792782609429717975677069754577174 +(44,33),177846398599245925028803842971912486323972480559555512486881978530124219852898669551832268263105069989851505213173668206323756584212897255120 +(15,62),17888687242025803023575795325003583534437455907724654502374461257547046753730611887238610096772533133058124129681084954320664903272466828040992013146693519730367311164442405360 +(50,27),347220950308386364691709378813829698652165839164964440695650834823182823850580151390675327325759999431534766285293709693660200835786280 +(62,15),535970674320861733426758707729579054619480731068507453088121174701809290261260202448623362605339786557421749862989542424 +(71,6),276627598372611809698224977301452445492044026802372812343102079806539841285576768688187183590262303590930 +(49,28),3603975644725396307270277986540431921459754602259103097458212962555989859427892375825764441374184479332703268396483004028724932106911050 +(55,22),993250057931771283345134722266668700158410085952434990588596424263522957200819677578217636948560857928827467327069557529915682630 +(43,34),1326826882843296346166465302077442549837689883211929622457680352180927384054338061804062860334675879396592954126912696836313887424455513392254 +(13,64),1161614974158848025744874095150176353547864765219306162689232999495481409863590132861221164046580083155027026630304688019758510154372025084090361224213842240691503508819366 +(35,42),4729494693895325488271815392011887317621806970207713422455685743454112068177352649092682964713738154066504253839529188985828805954070202166481072800 +(2,75),1357576517674151850214155014481582079303135223933773554448436774964605198665920 +(61,16),14927708593456348752490024597232970723577646097482315030657137489447486273998812338626439147554693427270550629509738002265 +(73,4),20004790727926928573236486189999564204707985238938971661725060739194095199499804298511407332756274700 +(63,14),17383592617042155013577072549815892206190329625003424257061452763007103810481771725512116401217951715784984679564681960 +(40,37),441595151256438788388545487775808395165085033346841295613141304636881031981393650148998871316644657882708458702643630702592020723572771750360960 +(9,68),3897316900892671543189197602601620066724894607655282979935658356727136252858780441016202913912831443223118760910672961444637147196231056715067580364506315 +(0,77),540 +(72,5),2618777860741758770703803989455848582360278902070537222825615395943444232425574921083321416943757406756 +(59,18),8660365120529452783065676798953133456683580515250260614877981685826506528714665405394487825153751400441512317594080985032290 +(10,67),1454531344821659841008894834190046221212608025575761235803751061021867897315839725696160710489615694246136893638450640928769082827948868895147641247602799638080 +(8,69),1299066111085788493543061208115059098009952213150825730179234363209338060781112598419347053274757873466645359558908191353612931002692120123210829984 +(21,56),7813215423658339745465479233258248835207423101236519784554445078023869553360614882043204880971749004105856854384550427749086432276589127479610606918191223768303161069400 +(19,58),-77258763268059579081751463952074810530233337893817240127544211318729119482455047991125174218176663304478958901532436478663742513347235750009168370183244894608998040044775470 +(66,11),308137722610070886073659502914550019972495486861689466889458845544957359066189559230137354535423673191256854371240 +(69,8),1797041729548115924129280817642496241039804337803649012464923130216482091217799265542512072283096499323263620 +(22,55),-126250843730097264096761524883808051209287703967822067772148186187175772050155764070713734194730991304422279569241508990352482271368709134418246637339944416801326917280 +(18,59),13180864373069279878998305548575422349691551677982566786590095188250769784326531993016334391412033574701657742053348803031505266842206502717730043824188088887770126505461455616 +(20,57),-10751263579496657135537735084778367598194511405876190656371023637606049439742985363567945771586684092964853088466673675102775367754703417831117899626923008947096522021840 +(34,43),28857992320319154117882616862569263215229732056534992436388432538929389559019828949698776160909026327621491000674918004395221288177299853001955093400 +(33,44),267277227359319756489960794834302801611450334670710558147296605054209027541305639517583960683407841334685792162941694947446785362898094716547634785025 +(51,26),31276638528258499203003958905733328208545254016303568496317773308570830019527537599482990626411185865067824988844431242258531409307910 +(49,29),-1055238485441575118112812832400794776294657181175999379807727578471842101042918298789734767961787214845299227034232613068375414784041625520 +(60,18),-203846136867069926101913948626496964166164660174629963303974732209916412725754768585180517614932689970137832208291251336857420 +(23,55),1179117840710666555803939190364320969527056481151900107341320866086777248921073146461309991346095439980118586932898055460370493133259198265661346420664213833155805021248 +(22,56),-55866110003099936473829143084807613306962484105557736733001327764726427803542106217248797936147253347260541182166830849301876222275605408753330474680608473649184154514368 +(69,9),-2282454848661723109097239510674872491393144951945668074342667892263274552968770122027722751349530414392801526320 +(1,77),21099393326634537996906767482198522762867685271699737520 +(58,20),-85532427091356835122458011455237849585914954201737017925849594857073678556056970265359068305685505362438937471951599421104323816 +(14,64),28070846500334088751726364709364554152085371656773516005349020801309090197112539989282485441353019508591891036323798010298222558768960408376606502575801757972130541175885479790 +(39,39),-659027144219137489305349100669876106319789030605776395947203551053334049779806922224803492578010110136078852044922437028663016343806947301650562960 +(3,75),1099377438752974394278228703347853996566335161448026292861020582391814481699191068984436868862648 +(17,61),45482190567452360774462180414251482060575320432770959823454723570992726151312875006396376036895612289702653521709819938068806210017450961510241801476767855175553538403367274975656 +(2,76),4758964652451519393189711026494640287242897657066696504846210632711471066140248 +(73,5),-49142814088394726349722920467633101844114201815383276399213957843651285700562008415151904831738828186328 +(34,44),-7793257076685491227420319355002746105577258947184013451683228027848075564641591473799957437641189808710690326164728066553947566936274765357460371286120 +(8,70),22276676000391728174553694683106530721724781386005041620550361362090826311830947232362142631143175261203008833512552725137195612560341878671285346408 +(45,33),-5812791999020205193758388102847532704983214896024552652489289911923683390291699543481647183003029991323037113832958824292853500859105916784080 +(25,53),158888659686015072243604966694226287200811076413549476368841589434451584424525898668555411915565502979947516185456646065392940577599975658639525457679810222653775360 +(57,21),-1538969947159978516398529104263424771311962838347851787479381881596690067369217346296672979993008570346396877597078944892340653400 +(48,30),-9880174876188511900895471725347450559689371406576293129809460861322024440783604833502381409083063082015853999793330956397648815564186149896 +(4,74),124846718543263673479614458453315324441976758018314248821335483323136764183013008425269579947603109296290596320 +(77,1),-25264735208174001754053600012905111793256171915801242248835380727641101338735690277238759100600 +(20,58),433835882065104834684575785994417236047329421257740442944704619433350143377402401972640468826502739138721020008462911657631213489600106940628236475317790222165108168873001520 +(75,3),-2162317226100754841051480034650961063341375437887944905307994410175167647114072130737336294671441960 +(56,22),-25485319696923057206412180471360410025931982939780120110964205536585615120839842701582672371712872583799441554940094271729549546640 +(55,23),-389404897112442403159030851298969894098200051798783054560169667949817204581981006922070456423084331542084746116032016256728376908800 +(7,71),573307880718912592729015031326773701536129119485461746064550226520500295661942401120235218567054905024738174740583641083485587415745571452800 +(9,69),85119123058578633262680725726146792708923193202357155147227282504955023486123255585107302348106336315317005734350410907900117462198644480177826632574929480 +(71,7),-468392269088235978263883468768956892892900359203938522289869129301389751437033987687938054455436615409555200 +(19,59),-39003579011294939446968461271363869065281307010321760519267259482329751735604984848926326778475308474196987525041929202168770489679577245752832889173889679268383189506660483840 +(40,38),-101661970723760418495887893357768576421620952555811223552980566085741703617588887759252995534536161340570842109152367400839757847978477696094017880 +(67,11),-6351811856848808794322105407254106655450701986083069882855232982793148001984007397170317982666661801904044799452480 +(44,34),-44157966294067737966295792867644812953292260856148615586915600401953015221402907283791285723789652201981675299697148890907196348347116180084240 +(30,48),1502567431783975551448569560062846404653269902102428865859784702108370440171643939797644881263114693621129528225844921929644047004593686987849856428164728030 +(42,36),-2258520362958001140345503318824206356340575471734726859506993172359113478311875684541752544966647808337454006649651119734876690315798488096509844 +(18,60),7159015792812854894000132354479471987422954151782127926127860915231232164577698667019820157777581778997071457046401869068697082718823904021109484216311426961833830779207894456848 +(33,45),-10514215891205241399141194274210231298855753317261584633462151051055335083272278202402447358786775747280668650890600827892973371014386815635237905061576 +(21,57),393042835756098680840141825460375480069198688681033588156018854325289287937599770630723702844174032561770915540045520166014571793001084772571680293806136106123644104290920 +(50,28),-105999971382184120837232281536696019705321232751873865413346927784704780778465345312920591715301758051758820433564649613327451074886759720 +(63,15),-11881666384461690626580787773073660071322332204662836587529965596668815073131639470026503310932240184927983605963534538768 +(5,73),80179208150850174580712400505994337222997172356954734795974534921967956878871499791221204991980680413697504064908984263520 +(47,31),-87299101000992914172856594327241649460466352591333031569318529886264180134818212519351938492448662992214757189633908303556779627974708163200 +(10,68),40601191023840230100978482236124481472417586752175534923996625066149693602718607002040055639337120786118960807867216650695488597192867568816591490698221893629180 +(76,2),-9188556100015789720293679792134517014534723397707860686640662393334339288365742951556029829511200 +(15,63),2038562660580457233716890904605482662903574613067306176884657221677398619524273121318554917738266598806097270336006269155873603230832434400092956520152744381845223001191408918440 +(70,8),-35266969271502639860803458222288072418506907632026497613349970490110118685523683800681233896811330675273216290 +(59,19),-4363908187278911106941693559928641392604927554056420599480128354894044475383141032331144246656284280534664161778260745365253440 +(13,65),71285824198410758906426688763790734041816625729275170355860738118947972069739366935550882307956723036342772631845065341249664098349764051704988293680095661106812363655016040 +(16,62),25427524600782716982829994803283802374968054584937218432956061555729722453558663194504132665416377589380431908116162458972805046131120785330684249170680281148503600036423041407440 +(11,67),2866046006610711889686186109030468702883979325105508395224005492692968084262565798108720415250772949963000797810856128108350298927721435412740371390199259629903036480 +(0,78),540 +(52,26),-878900797353274891588663203650384132829028317947330020597597465209848353748431212760092600301066545092765865875290576332388916183760360 +(74,4),-370173999716667872616045545989339730851031379450686158853099884853474411504243129061953469454198345680 +(32,46),-1024260862353771492377283159520469069980032243875564043898966021017918478213546433965696086753994913322558997000870852147589827516906299215038211157087840 +(51,27),-9983053683418222773148760507495594380588748799880220886888985617870759641977703893343989346025134534264335331068027173561606643824086640 +(37,41),-26622421480626143236682609863372636809686168875032951536042107745126145151561891910360027796742415471571078568090551586789418908865353679568484821816 +(78,0),-33733540681333017503695399943778155784750105433994605635019976605294824935849269381867564446 +(38,40),-4207272497370891174877739804244649932172013755347742328159219104412853592452086982302844664161488543475993857540288329358432515241073641395834634088 +(64,14),-378129447847628091551221818637347128769581245062355569781746797535264969491352630660047750149268608312611841379161972800 +(36,42),-168199022216037616573097268056064336922174654951331728990492970818259294686102525374810104153321369469326320527419776240586966016470347735768152421140 +(28,50),4414995942852429777565847731562307453360640413974271423087126330118925885933758900840580630441102954050016590047412252052988891164094695166973617518046738200976 +(46,32),-730558105681367018793558211997106016046080582101475592055382314946911946430064524919882988606325776108003530777221515127769995179876710687450 +(35,43),-1042428184811922120966352616081730759277192250074307776656312533999564889732092574388861213222749642043527062586013105820036598331690252536855873776640 +(65,13),-10830972086571115246289073945177634725769238052951131039075640649025154968583869370056297151967718959141866911823890880 +(27,51),-140042726843366662569211848102899579522232383406088459022600013651132209345592541441691764883565195544339520170862578066289706990057539055532697462881960142990064 +(26,52),1836769056023467418681870767570064262426253886950123227546789305619316089190524807871284307757404195824624383345158564054745396993072564583193246529395197270712800 +(41,37),-15356127462741217776140350558798089891991832598941134571882416094398507987208852729604132050985366059764130832432979259981441853777311018024201280 +(6,72),1035297586939852697938979007380765389991251172376516057886852594748592855740925642585587236960969082660948778649632902060982338472450 +(24,54),-17882014905896495628343237575061052725639383068322588349586534499141556891514655503339055057508879383334319028585816040440812957517560579049203915415661101045268902960 +(43,35),-321710933274016859474243438761949524432206523667677018814296155574683769519637060875812902731951164634677435583552537081082257394394956695688448 +(68,10),-128489119253945651863212959964836500184941172721372739204806241760456953438509804996424106181941327800117233190932 +(29,49),-99145944959390468427730306843475560546532300864376345991912308927254802950104644915932906753815865213295646848550135558212036343422935552530699041398775211320 +(12,66),33712738453931893489806677221774092569232300081872055120033540234004390574191582601503471047698320764111136952086627351239298724346916954302128188836958674637072881990432 +(31,47),-6597936039410483335664912109743028028013207730905337216229979899806406785832338468043170718180011880429090323764037710446546955570113860178588891153463040 +(61,17),-8693234454177703156304980961520366964942498250583496937758530087592532710362161183248437947883353089551060312366609977537280 +(72,6),-5266701292291765106578642187519437466209381844742433120188938153312824936711114556998744888650021613760700 +(53,25),-72130812612616093005225975120787656963190287976044578883678082788704805547784209946034956487468167483784983088602492092383038659484184 +(62,16),-337433916149005894554691231213013460768895375409765793871648653788532429501546563659955405167527143849659818592214917406910 +(66,12),-277899319489013752647464320274982601271843183591775648470261409676169134604813782978940844573528412479403429259003520 +(54,24),-5503606883946857927349609138065567248218471092700993788904170462392115074952428792172370650893058456129041060612177094156594742195570 +(9,70),1808682761316875760465456906480894874765994536489364065114309543192737881083729824636450322659674182408282038793631935866372309186032060295831066518172770286 +(62,17),199741073337282347129867665975328704606019855234828850154708636652106940260360286070260124881569135969390073273521807476329260 +(12,67),1509562153100515106011721755395713044517479645943493188719506608687765789523206635152162974613580252379198155921546534922243697032734289723044444229082109392489800057679120 +(8,71),372878912684148692286437767329290012073031830108322080248889326016948190957256882111437376760361626389746083492753424872869104172687101720652475186240 +(14,65),2191958769724993018602270677114748954118792623985670509815548542439335642276898967500510898370522877611505285766284969851089230335054915105693842647238627138200309629519617314772 +(64,15),262616258225477134053859135338378599946723931314527769941612954226471834276480483174418041124154531052459649882066254691800 +(38,41),948881360174103631130190730770801212939598949629331920660513673426399183378345091741303576214630055794887061795324818993932074925051448946736793203440 +(0,79),540 +(55,24),146828850697695435852204783428760311196473116290705550722610806910498362364999505639519349448674989561887902507068713177109422491214320 +(5,74),649827304726876265507306704925293337977783652996824400351276535903546144565087572373996953585056365120581994651157100841740 +(4,75),781939526310908635234871433371963881950952462400105084641505104218054567622237400147497412824248553659988644072 +(57,22),650350398388149196933093048002624260111818242312283639247501158032701824051848736731136699471483090894750396760414522393868237987150 +(78,1),449539363263388004732751560711680054733475379248621146067107098994974910418612917368365243182580 +(24,55),-11191345174314569717895743448575933648528717557167993544706767171139048636476316694857275172716365128565033827961471447579993453413007027168300876383590801316047321212648 +(33,46),14031906570574399081091369493104495744660114285434144506063905465247287227995216297909331639186366573084827628343473878180751638882068468045670855571826340 +(6,73),10737452515609408459828254288690635909555049406693596565666388457954109757657069656856759540757877372366361372204353187101538741831040 +(45,34),1459733012595268364073262564305633207965840709400782397935208364458023287276566446724250896217524879811676098354271401357806560089973814639632630 +(71,8),691435994271579414280977657033108241371566624074835904709614430867065001812429705744578227865238177077181665895 +(61,18),4778880401215603148942277417423436758463640260484668635555981026859160243455133809182336570859898709221264210459211496846265422 +(68,11),130703847712624929762570496589580024895620722208718721898642286548049878601070813674469154841309851318829045823883120 +(72,7),9044984339809907928318024992123451374631107120456439218852539369858043514487471864325641266591300126048905160 +(76,3),39473751302558448073940494972634117149433304695866307733017512033941603633674935750709118965726727000 +(19,60),4494252440093497969161229762677300101589040042074145520777112395535696567625803050410880266242032266904948116323401968233523279721893610258920301824890569962350417089601946660329 +(11,68),99321857085600964250221264268602336215604812678111093725130440052566932090457672521976213472104848284920395251344126801504654770689595065484696132030618290115726921338 +(16,63),3876460270856633367499870204891522533494962856337324388790646555657039307450346054111988901354309027440241025638861643728299403353044956613529471938584587470492553673627901301744144 +(53,26),24531247602679174203256100871580287709112387509610754745354459587130982424414159331239424399167643677473529447813430707369886969962366150 +(69,10),2600410731740392125367498623778802392434074282993648512531391771784496269569426828875633118938708920892686238820844 +(46,33),188642279164470864157806363557095636017160313039456443506925171860079090943381843629127294585008264521166077305203354111968058505543625134451552 +(50,29),31506847100562830093633450019951131946641462031376505784320315422383734066561324508661891756171203971401277482934955311639385381352970742180 +(10,69),1098589997967697842678129093140828836866634403467966966792681342000953539733301790517568227883669275482966707266122852628578999868834002490248293916786464991197920 +(27,52),7626866956364269940968920606113025284665803685569458663725572133058118170153474630208456984031935578584296864804793832356775304938567446786645692149966017872419205 +(21,58),-2637515611394985851308510024432424099501340134261091091438767227540752511952472487937880161292959207400835139477564789308964916861458846686127205616094434137035266603781319860 +(22,57),1753148025281961934672830653326809143133228236906065703478320576724448256600609102104027261368306726431837755151869402930273705695976990075822062023362303764758823465556800 +(3,76),5219540844626681935679246202398256087310627393143290748385408053230261767071638793566967409588620 +(43,36),77120767810051152832968306241294830770296248826406182954612128729719426253479319699271931708822456132184463858231007260800835520142008310455155785 +(63,16),7602322510315500370017758520777399061394112561382950295397014935019890338441999119120175020062671060371371847489169576912325 +(36,43),37451539118916812745153867036075489267222828537154879322385725006642867247123919761053116997493111899961665330187913219413015886421997759713975155104552 +(49,30),301520582710629832013579567215279204439789075221099109289187300741409008818121695964798682189560019420297695027858496421045106681820220765348 +(75,4),6848884318582107058947237402735628277643313438449538228649885930545886234124844004903304748152363829755 +(40,39),23273394876849634909633855354818927906930424596594248251152443961729187714412515675577777355242706115725470859628629539373862818815545524888060002640 +(26,53),-2882971589605400842025429782279735902765798499423618799415015380532714627892379222025945718072918703151889474048869918885055684295585414520204707844506994629516648880 +(42,37),531474444167565837263729734815019717364627024970758902233865647141095092905446327505226559292112752789730397164970645622060714723092412798943574340 +(32,47),346797003501342359433803162121735077969460451680007447600999397562230100132490525384830695307811684249586431333129793461067879742701265173213801447205466920 +(60,19),104433043424771558384744895675646345883563525226798803781961667770143388156431061760089417960912480272484622865118937738033913280 +(77,2),165571259118670330311813386355647652484052719967232109109449335037125946533467867176329441326742750 +(58,21),38426008392449182187579367774839936273146366831330415417830671494097728074213625651851645248754837904391439446541285041989433935820 +(28,51),1124341032859191909125435219311005834318210601130541298879668799448800087839426912981744942832913609039478514407825029621207024578408757762410516098997408414640640 +(7,72),7562978771571892059443321597164548133293686341687042375116718261734615364682368591193086301725738882076801030706975392890118664951406050458010 +(44,35),10817588120379374879316730500579303328060681107617374663024410865143142703413156984330131256844251847649632768147349081313025318436376735759708056 +(23,56),398974625395664058184895994731186186728587665618248357403598037860881398552564535218154679583435508972913529158556593072293223601776891989088331072078390501429842146076420 +(39,40),149507087884444902360150417714644531133261704415495344916745475851851699008766258239879351518137374573975793082234786477177355936773877940559129549578 +(47,32),23248299995102259004969771121281607853777014551285400446892352419311719563699340770514733652532271168770097986851103395234894987576192968011000 +(25,54),215384254042752218306691410298045463070100219692029232836833946591879683609959828384898786190011446260203655241814608841830894143193048962656807242898422587756345646310 +(20,59),279975599044240232369351526290839258511183851786012586998706555600515249660379374989889116848127563949088790815194034862582059790509716826453982139589464437940131394617108979240 +(54,25),1968211591930013689344496286275695931809104002076246210283861424062526750169613262802319685644119992360886532517661401084856955064456224 +(35,44),252230688113010465163738594259773720937615589061302521096305497851469921542834067536638508190878388221126854846360625806813716304854706965936775872534720 +(30,49),1298188396919134962713189013227813799469678881936637016428228006217392973373517082521414555872101564203206154207171193292738272062020782675728261109250911914560 +(15,64),217854210892372848559718571464502166507472580371774022371946862951314405327076655505261012459710334549443565356366446301774860217520796510447617766578258187053089516219156337611850 +(70,9),45454500983641294762004534020578539604311094983099345057672920703552697169560165679359434395287063622902287400300 +(56,23),10159143711085833802301708789826058393763004693061366738932306458882628395824740700564509538366930207433166561538932779882319767588616 +(74,5),921890550725371382593163774392606833567541724093028640673485539570069330417639837993227222134432523961192 +(79,0),592911313595069491187003552131903854229983416515032439951958452625783527486897294342948357986 +(29,50),-47822916617269806511118014914185241236978711152030570822880177925890505124255638500326317698413947898358462271566565688153700005722388648273817840957311521513762 +(48,31),2721549324428302014811265219846021007797207062109005080501453941415901696934070676735145730846722448816596029592707008421550664996473403658920 +(65,14),8203332624449010898464738062234053277858828062553479350143952055989033981885589188613486503311900839840671154176335053020 +(17,62),10650195203760382383630172476603664317486916021707954138809157328517242845429112549961013672871098591093024996334080019479673614790149010441833783324770452746398126798435909552522220 +(31,48),-24836327275211164284692236822167298876971817251018778545009351067085876018766280412694796457025931440842440479603372150088803118814542142611636117151449297092 +(52,27),285017106933085095073647473656367022633004858929722276831784489867924407890417455072982911164692981336916624990033145186727293726995650320 +(67,12),5817159505829247120280570019954539201151323488914506612907134989379112793339415981207263542311656557125289372047943220 +(51,28),3095211726166960074257474847425470032901862871957789869874102988318386500751510112952385977039688937807640606438829684894528627209031470460 +(66,13),230750992248936642220818798256641457325397424058278921815295980984243000606160609917886641374154198392123743107327995040 +(2,77),16542882052947105694328977952996942428451713702563568848299255957678878750086240 +(18,61),3110998591903322836920624954555910149787239332538415788171144337147951684603270132336349819112108204597969400220839238007824267206600072438167931271733599240080559347929403740712080 +(59,20),2090362854873651691360382827319358057943137839881762590686976747995742145018883363043923961160401137449523804704386165470619326238 +(37,42),5991610136414710560235183509762976272446239643239438121851922839010295996315852451847286213677545422701556141598464072469550222540769581424257544845610 +(13,66),4177105562682786412194070128164398515883740762702532698424449736421987341745465962052219073731163635942708439541108952655430707058483934840948482624191784961453527345566763530 +(73,6),100219129284507485133046498119035994124843112385537093867188849445745835516187781296809990475497544508406160 +(1,78),49856549170891958842251367420183010655688287380829998364 +(34,45),1199608185819109881413830689969305935470460362294831304138441112396602630018223843728141015161037904198303812266404176390501404364568677205725293624313032 +(41,38),3558524692852943042970995938065208092297183386743079487844659847547995720380996824999536094798472280220988519712766382567870388746640825839843591162 +(46,34),-47925239842243267291109091366431148706550943622465764949586208500164971537134405737622161347682821520270683258599316991128314503371665289516332160 +(49,31),-84220749204947946463836738165633732111944062072611497404728084226656377605966341547130629931098571541439104469188152437565292077049502896296880 +(65,15),-5787783038702306703404318412010271090977457777672160066077708859215080560749618045874400148175819368648835388347299040770400 +(22,58),20413342779739554051573098440483324523450962835418854529696559333290102175673548969811123154717927697681893646846314833644168220020377744862832774839853130750708661868565370560 +(80,0),-10426613023770028793831706457975888030905553269097427569703580293141686912238895941816089059840 +(47,33),-6078454507714470272569861762866742689058313458825727720079023227793335557832793655621794649509176614869622374044326855011041653063156135570231360 +(64,16),-170729560653238200940876435291058352598769836859479216117860660153984408805222048072124134829549306744171653395117884490906360 +(27,53),43313312852607387607637251234157168795986269390339720493112073527893231497937584290577127136401946195266194065716278807328562892800157718397971224794294284058940036000 +(54,26),-680189324693559315063615267711934760213716510452629458823047259299620266070730549875364164926907506549809334315435635474516822609375670400 +(76,4),-126700186536139187000161342066348639650875104695029940079072740601847969833837656713110632487548407153280 +(39,41),-33815386475574635988618212066390064185883847583936051747265983264020088874020923773213661087026545777454923176086186997553087096315067042646395172473600 +(72,8),-13543209072722485207864746717339484738548975135442081962000817260499023829939207170328469957632782438437657056200 +(70,10),-52552317142982417455382611423166692449029043033928308996424517990827135514388272151035205906466594370968194032985600 +(24,56),-2551305526632245200813011416439522057046034117704664422022642336230853711545523047376992437454604469497505362806121665479178026448913802064333747865713524445191251016179520 +(78,2),-2984115891493177867753893626417620914572608606039595650354483254899783540184524715832205511659550720 +(53,27),-8081570873996090005554761770846681016119054299417248699155704767711975742539646458147410187193701691747498651923434574365847616491145715200 +(28,52),-422223244333368514262552460907890648085375357129625668848638532230492286323449770792177782476425060455570574034059610592713795739444135340276731873511850702457945280 +(29,51),-6034816083794389350290037954014912094084136108651483208976994072927499427022268651303801046108065870599849815695447841476968302010015816305442548639165848284738080 +(74,6),-1906064424451546746782857154338432335633294857300651623097425365245470253246177134823678557302598064629409280 +(1,79),117166911815072628796159767946293255087627981864646164480 +(63,17),-4573117027091088498890102425917237797174273089078483202779624571206953411421480056663804971196394923529135497454101358293780480 +(43,37),-18300613059150304160573167892952554417703016408896377221863482150536184718792742171662091983694765052223382523246731697616601359124039647587881392480 +(25,55),103927546020989547729940599770429273736076935933831873755994537635423456181569962576224254886693772441566791115287564424152487867217899248313329940618987421678673612610960 +(73,7),-174537600014419790360094337350668074588843248321547254198303373888849556383363511307148661040300794590098473040 +(35,45),-51316287791520932826530868095509231125168184077772628047627891192191741213427299015193030479482846992887733798429927232555154267114543606250190596895585760 +(5,75),5185693047237011949318265112017921657722450269883438504119048228384753485370621335014100889874090632835373460417253254284320 +(75,5),-17288624926471096420819044150681497126223438682651540818973067731655808594892232956896370008344004057912000 +(58,22),-16508129674529791721726345045127002751251785167903668848709547917226039956813810472099204736475698063670667465405200803918800234180480 +(30,50),469954110404194684110077844904121935784332435189360775921553530469358537002457945959823318435595522716249431087457191026860115046518650398824706089797396528004160 +(51,29),-933920886927062517365997584735071044344804987790610099898337769432583653455540238742706271603215531123865902999758251501978836159434778400800 +(37,43),-1341664228218176990991243821067525762916294762346453838998580164102855790895067219769398814600162117135320158650886492188263638091382094230344994603447840 +(55,25),-53367953305405261620357631377296762130473737307347740837258987760828794354421119328090581679712729527668316563726801956612638635174604320 +(60,20),-50852785823483169929468154819240580423456544301502967602103736622054044831983089808908453076372751684508928111620010543653860900480 +(59,21),-954701408636732035119811148616306089114451847089848984904291765732779049264282980097229778407602387009111466066785924011905136121120 +(79,1),-8001696261622813378531378322183618787356132377648302333569034487262058502700057883309550000508160 +(20,60),9197998413470613856862437023979706073789412040999093360634986870712946235378319936852888002485977041788517341614193066149245373695094449099365536935995391010129694884977265154800 +(66,14),-177510111271858645892484995001825565434747030295492789005587097995267331365565753160405109250120652311446842794070921442400 +(3,77),24517411496644598260967947997743180582993679410993855089632787075186121434037042481142601949760000 +(6,74),109374548453733783197792073827470601665592993803126278584550957552750541804030163588251147942216068193754966616524031522752947093413120 +(45,35),-361415461018487085673482221916605180451215369296397997545184491164008893252955585180883467905866458148587288740924219053631259961042896691862410800 +(62,18),-111598690411591877771551602963232476261269157228076344145106004750391919956293277523094810695539221296370507433350746603940979200 +(44,36),-2618064683221545677704392512638741475253991137552983753533964633407070298614277459392959048889097295881827550957006680355006410035403936569139915520 +(23,57),-85545929599315623763231262793209921947451490865811787290120273542776046689365385898665270441381926976999619406908911742641851828913513956944057157322303999548605177025435520 +(33,47),-8367649791723114213458454804230801257971262579834864414954495058552083660366129403476488235021049325457157485163769718885793963448452650681330139569518414000 +(16,64),548114089465670842738012144362492440675848490488496373570357092750332359502707626219229648537135244839764626008133405254551035631177047051176679964420598782563995420246335674125685440 +(17,63),2256143431908513542534199930108157921711300829034408700545008529445577473921972514769386486792282345773498526623432077167047580184115118658803925452509069266781454874286471805239855920 +(10,70),28839748025019996545894439077286089281318507395676866403074829400501588513289360840377218743037168399255091381588306855520331460413080127831472405920408623701120160 +(9,71),37418572598868433934486257035307222034240636307274392139099153232236544249023357873916629331666093230810188117137854234351134165833291726961303369761830990320 +(41,39),-819366151891739177609770559689609189945228047126598498359874617871989996825444900337591073096847307800313702530606126749585826824435618868448058248560 +(12,68),65012541814035526414351510323146935446296142416928773965085546291986902841170344221703469624844455869049164739468834957965867136015887422038173465740513477436245357707085920 +(32,48),356320037695198581489472071436528985639188849090842401864933149607171367842480420209973715037067495693926593174221593765053431825677439905230035128888624949400 +(34,46),-328358046772414733992731186276543633711277689502750751929369717013007947855315094316776467118031653732041133410430049964044966588137297402593538720666778080 +(11,69),3326023606226821854501345236581366737489329452814941792343189353820198569202542459387595648103114457946082465371783730869381161161406126360767464239497154422187194366720 +(40,40),-5303097521411958882401599219301685339709067779533326231484859462346805560281959534653202535458382601429108055254562374641241755325523753125302500442560 +(52,28),-89742386072566607549077244638465104706173392621585274513905516150571433811299013016134348640661206122819814477106940845870676702839551705600 +(8,72),6096051047875473481971893849451968921378690452988318761621549283468725781631440177692071354998768326338889047137380680096262134011824137616647446302680 +(61,19),-2488610436396593659495667748414680031754201201094367308872064642642002318393261584773426927569233883357740365117117016316483435680 +(77,3),-720639254240138351633728600599915167808302431764670933878013780300439694499003687449253666155551996160 +(57,23),-263545019346392473916707306414937991971076588746058750912426592390668227945913203378997959567765328071048451139292858124703183069991280 +(26,54),-2489326160675125045624323205372472778703855146383507976651370427100497637673488442830395802295077443971421768256306092068602310305300988370616289914451383552511323190080 +(2,78),57033920111126056693487877980827618181110834423798587636767942911518631898782560 +(7,73),97727097157668600986140978016916259569621955007552627818352959876164553154447489793836943715668400836745406976247064393056952306322933547658880 +(31,49),-15834204134153172043287107048308911880636806490739369541798200504274917436266086303574025539207400085163024028107164724342365982949861178737902052021892890679680 +(21,59),-1999176766367374597947371901019455846917406485718714630723393274067101216909619742350875547323146346245194722667636368664229983308601436952522487310104200250357038028071472242080 +(38,42),-213780047953849135496624396668657892409646311098356041581492543509405890942170692844342696968165828209420785193443966465002547924590037094080590835987520 +(4,76),4833829879569912171458263102315266703207474821741650474056865599982143974974163661753946387244784848510733761600 +(14,66),162542064609670091921071766014133339933197556488719292869689597449738908658606974533513599934660148365768966315950912661325352516572092933641090596621503198754983735037279185128320 +(68,12),-121527464594789505259656007328870248248687090110599647551597450290770992860096485151983608383113447062367943941613428480 +(42,38),-124039697191121167050128188701880558340650830369663363251101862007860255109258242875284273663307441774879434334276013493864043674339381547048309052160 +(56,24),-3893780090003923425346479398412561851743925927464827925562787806616866309899870062363876121084930374015086276613724525150649447060126400 +(15,65),21899058655900740188243302217180602212549991954928615681911692466321437903104530339429821385287698316941648455788281217559638168481206740544211613153211337963952798183389613599844160 +(71,9),-904137471789283414479344428432101558105741544826558524298904502493744591735712739085061710578800413240605369866240 +(36,44),-8645583634254996046676950246161565875596914442924777251337144944692289504616556090586149631412971955284592300978026932320023639182645339282373269243691680 +(67,13),-4904942875892178952347043648216821723788595874344344191546438741667535979564898186139328862843289237221185425760131432000 +(18,62),1137992195486098164949700877674957282688943109396069175936440828463375060321226538947257802546873419330923550831664103728583875764470484005995726387226757218774899872463549936753717920 +(48,32),-734434367379374909320856881048812671737738668966084825547586826483264461454649030297059762378475328135607886368116661273665347412165916170983680 +(50,30),-9134319877179717580835790924396409436697596471284854053321962736486448105880799972038770219347394621122981901621904998209945750070023000625600 +(19,61),21684717495138105083040967238425994417192580013510514525989961935464474051197435814634538325160531415245123719966748606973299785251179421852657142438876751112862288013598549222135040 +(69,11),-2684968195852930010640110231750123823753300985792318111072881391880237474072969695626930984074170056447796377306652800 +(0,80),540 +(13,67),234093563990705262926358555477615192284318264408182470187320443490041205057732280065816600094832170713112961364092063479512672524312396920203023321067926508305325221619489488160 +(52,29),27486658943308796277913715738989697334213575085645417327797072066152199342992891324837182282764961884010318579154058905228661814740687295020700 +(59,22),416875583871901672768569235384347730414714237031548894657912257578228269056257417373411033878029071634861238946569960594482070834528700 +(27,54),27459592384508913592423984866023869257225779338741865499409379720867464442039842895339501194360057968139792911970389392980933473377409517424335406137473370542469423951230 +(78,3),13156712078747643324059091875002871547498867373137676111900887278821362219059695358548054575761384933100 +(54,27),227617188486456493861715004561552031909897320190722779030768752142518453282314316574787996358523808686286157214516824553464938564604506815220 +(29,52),8634142638407975726643566223745048042055340569922540849736777353597624886267978536554068049807649242324366829579941444892228788553589866315224590784868875569274632704 +(1,80),273881808077640314015339956122630269636268450377392386348 +(12,69),2696266497250110068038770753224971868161622219737795885333923718057267763625395012446651191041739702529252719358269916997379715963113114466026894192967725941059923474867209460 +(23,58),-189071060417271267923420729385443761976560425146619703675295465840113677878371251598863590264432979172445877132025825682731765569680716426841854650023892560961501646898965289700 +(60,21),23605801001829332065353017784722807836313423261381566287178520267400081770822427740587323869206757068590484832040795219479903772926220 +(40,41),1203793469960178726185256019304354573861727782763785835241025648954944801461265016428122508822246594824017856610186033365028085539966533881087605507931640 +(30,51),-23517398161072067170123042828969677332164523881983917830167742298355801041360702122425786884465844123820943230547750051798356527849961561000241901423592883116514280 +(31,50),-3902880949995915403421104207201690057231991838500481925063625084367051862703736122658345213883707322515468244195717526007578186842093432904243986631472218710923216 +(47,34),1562616359022040518156270038468629653378962587609871822213758293404850588101829573145056878264804847102240993307477112684641349013472860389516097210 +(18,63),360659131705179317387354538186330123025027271079300436914363844887428309256748876737526012544351070220621122477327343675417832343738530236775791929256854138937803944919424803513131788920 +(4,77),29502031734259875972635192748951713472882500034105662620163750502396632318478612275245188542324966482793898522060 +(20,61),-101462575187643414902772925124331042991502929844040833890544057606535032575965666243210489857834798827087856656358739894421309807350015263089805927114183320365425383119456248748815580 +(50,31),2587329911575689364272878529134921575631486075985748481925629169209095558883021963864847657173859385057531934012256949396395190981437940698989880 +(35,46),11085150457969615646961330865507182636340239088575180937974390478064455314574979880881235745481891817701605518489641503448494541911941871820765050864106594340 +(56,25),1438193084781376499861008328265310176847077430693629843154762358704113145028827801538529888065349264935525649511156108746235679141070696408 +(42,39),28742411715397846279847986934049013180538676122119607475121347344349413626464737106252701615404973942893948906542142690253564643862074823931518975093380 +(41,40),187640192523408921245604334600850525046068747375015035186277101900682460941844881389327259461112951360028043125911527771954642610931209581545612000700530 +(55,26),18738714837914648391668565795433588570158477501827427875077229320750326011552340185874896029715902612328268634417470644917955644799036656110 +(49,32),23033338009678921795359774864801865118270267349622965043777863706187508807936196770307719339679355497776831730000159615517398043523706767135550701 +(53,28),2583986238626361612412041047522060761208369044579882943296804785931387128763633620153214523761239309154106730244687380632381000276359067821995 +(0,81),540 +(75,6),36233104319733722270154911839109273204873960694433473883796630332279319258690402988971302855249651338029448600 +(51,30),274718976534923089340395366184880686950487597699626351084109611775224704900395239557783654303349009746651499608068271614898238913459676692888982 +(17,64),435865255131066587052035801628429802361485711580470352080122268627269347273016048853018990917336021826503015284021473481003158165383114069632301452387540463368568441541324566958237687920 +(76,5),324120804498169756326104612386448002715682418352525550865099800202949799406943262672862710423952501157787936 +(68,13),104032057434101368460348352216887132077258871032321413439698434722038304484244722655755900032518297889490523465923687684400 +(43,38),4303777199120154175591650707223514967305875524672272265312717107983194414604353190886990499269659529633172639137407343783006663802352004101514745464020 +(21,60),-345390150937988320137492063394118449842599418032522964210644063115332561768028569504029972289793399663011736536651595140601020299425014488195520916621620252958862710717030421799709 +(13,68),12566390246512265221746259143798706571974689031095286064114734810858269588235431366911257753904281795348198282698954314691933621258485547179275163218095172033016150119524128395785 +(15,66),2076359077145399332934429011507175086300401858923467171628215035716004666955213939817590743570795508942328181977620982944480236235312868642337189681961296264156860454813938343182875530 +(38,43),48026367590165581562657754864694606124113930361124078730045986082727370436578238579859370184645932776479143250189322890270496785637845971003562860351577920 +(19,62),19446263363198568921520179508922128775096133790293057316668443319059319148510943929937333037100042254146931387593692399933640561325279755810207289215051811853921994759840114179332866472 +(11,70),107735333045902989139143643582224491617915606754165563474133443969214323759986660162566441589558889739858242830042141560683120218703304967945902495630782769112217449864684 +(16,65),72185500653442560745887408979455857223210065189093432592137417757283751417257257063038003477686950420766980396660165566850751021232412586699347442841321242933685582330150337598581366672 +(7,74),1237564438224455646450165873861232081714366281440564341988638099273896420827468612247214941756379392194775532995243886135141553188006292470638900 +(71,10),1060556394299629428554237885989789211872766911639959229440405764649066420318597504870745207796175897795272116225844034 +(34,47),182958041390044500394589314345390888565861421734355967563874223015637559849468898038061415920566348756272341676878404492093297043933513997987208942023450531576 +(64,17),104342594339647125321335196884114201160483543695912543743722770958370439024197477207890295171545443806957472797546336513383136380 +(39,42),7633128898305824337547079561947208325401429169269656810086648879494764509859937701290050877237828277427929051853162996713649667890700208209162966567427590 +(10,71),735133678001745474213520463931853169953959674409221088287168575026156922640207994451326828507183479016970830983076376602960854379370572293910925016182009954806811920 +(61,20),1231595287202775883375808871469556082247468058904554531159625794402573724590182393541701783802003957610950170964160031598179949658663 +(57,24),102658959318183050866092516598861761747512783426222678233565707190553466249866780113745781410129033760218912615224121905118595111675800015 +(58,23),6799267817860661120103834929889181539230113882222713169862684515944938981626807215381887143052783990990156715360149325951769410783496080 +(66,15),127199696834823109312897146597969815372204498136800721329981566313423104959757930811062735239944408651062547060432849580694800 +(80,1),142479919871745246511246590052917087458335739608124055392856048118267401161815377981965511704506380 +(3,78),113964229684615039794189029768105106454075022678539412382593890952438064657578100286776032378876250 +(67,14),3831523326992280782185055485761587943321510601918419587970203389812692778460457125944373234261167892740930910588281584801520 +(5,76),40760184919450202744960831771124434543473478364534689980317989234699793143192993357270940742623507900312723803989214470141875 +(79,2),53794398447308135219265560848194852940912115737132726432429252137010496283166746005439953724994945500 +(22,59),14180448415047544567384318594555446716412416752886922854274371782586345527578933957976011296155301865422293542536011953448692088004562391770906986294175484238934362171476277725560 +(48,33),194465775596481142048423386498122920599976327039926623393719902818233756590258645401117544482105349792326726079605358890734104215118844453580380920 +(8,73),97397252543611881727986735980766666465292268144713969634137015021613489495397327564270949918417610862887171637574598825033596682144214466062572851717140 +(81,0),183449635153757848478932256737079949061471056378063484043759235441274712878303796055714663141786 +(45,36),88339803244434629996260216410701699774788961099691380420258204709766441821306820724990874439180058827345994043686294133605308128701435526243434775300 +(70,11),55064417740360680360002053377107350008860238111071971196479830967489584090148277121723506055057465763849570176377471400 +(36,45),1903146001271783756823819928309246953464539874369742618256941361306140991131748615687087271248455215631667851856140555172741278176352441483209276838354461064 +(26,55),-905488142267908645134275542713627455659852636078389451382199995495629015083912821493260510707107864173740725065738384369236133825738483939713580437558736635240367173798656 +(6,75),1094684222189836427649075207829324108016792393442834765484461119044781757122520970792366492989961423764387150850798534304190653813722536 +(14,67),11468928472996883995183935196187391495149214651390713137870318861586584799730747352133735994580755941970532721753041151668398689707311848824605836005849807262945263671066449106641064 +(69,12),2533976864008276511718179936318129567104803640703643745991268705699035249520895117365553729222606752823987550501869816125 +(63,18),2596277115707703762233295668637039074019950649340116805752598243323999980200423110271136890771140595552849500778205774833728002340 +(9,72),754229383192648530582600070553718090837712494792819746004442555384012783412055284284056421440987820893510129110154468525723758642949621856262964478178474319894 +(77,4),2343579062676900558429145032308497705378790417476466194333346081618602786149237087993444343236944330922360 +(37,44),304258647455566070731004492220186522955048986283148860087756498346803258150240265893989452293565735461700762829479835109411282313785045399861504637230247940 +(72,9),17963432914048789984578330639214065854477340399237227681115190851259366426695685315985037057812071180622516609026680 +(25,56),10151011320530933529394721053668218040735428726111286973244578239158411168716532047804202877011589876674810972351472005863672813107247932450537514129959672982232028434772300 +(32,49),180025931598957380227202540618439464927051164261620571720906567505924208601971815139851248261868025319388654826622154088374709292123547525240493061068763966156140 +(28,53),-588437898837227725957140856604595222582564260935182609710566794744287374047004510270297641647047131990639733180347111354264244064246636129249100219117698105855779733220 +(62,19),59059060408846330851156084221763696552087132041159750515701434162282768151814472455635054028455175598676806034577719408329623753320 +(33,48),-4468755966068543770555299331225524224456283431888317145417201196649787245088341836673537255848743319198572481560779214353927491378829795563499559406869226786210 +(44,37),626752769737042152504278477893810927328663920395310106790966918214703444103019706281818298683991419354279377171791435552194127447453864294978015978488 +(74,7),3365595022043277543058370969679841075043414318578171027290336974048230518312206931598885317546360882102175824600 +(65,16),3822232762365660727518740443209801489312488475176500948906670555651173105510622588232705472065710439973112362869506527978315965 +(73,8),265025910373767542976512658691274107829695389432336233149731668540210225783184447955863496919388001644178633507905 +(46,35),11995966781504654364796828421869916657591799350838769197201752568605899478482681594033937492037943191758077027861381345837325038391721195061188160896 +(2,79),195051392383798974377861687788722502878879121221721354103066497554337683761637120 +(24,57),1567169542658123784509740301898875552336188223362068913495764654907005770367172110539291237327240084380116011793728105195093789685182605254027441138530601609516906525732293868 +(8,74),1521618449189718664773475840162140916871274627111473973858756753947844958495328540157438421140690495459832928128828756423615956084836128792109693722239396 +(25,57),-23190992416845831563451401339394087466804732785629284216479457040827429297644500558708556548037257925064884692304039035094223298120141882114862503008093024373068489030246837680 +(50,32),-717176914125212662378074979589421493412133251424079450697784857492164705164614834839844251662315351409262935271064706038939706771219513311239187750 +(67,15),-2787907688089186383221804489749603311216596823183286626234327798840285322982959757389356513228491263136703738467042085039806784 +(51,31),-78913684413922331526388933356819987509624129405904194744592556844485404688646289541526432571459388904886180830342274401189911975763795862189416640 +(41,41),-42776248765513473969236192545622529679008619000744797360595062646799152769070077603794275764619250871345523840116752827710162132259208799233731611282015400 +(23,59),-108185407260403826258576781508143868346107653271314651842165013727675770527873145932694604767025024241838580589852145623122834220681247614001508908444314691936466125209002180375104 +(43,39),-1004137603436682880923221141434487332943100514041153769438413375775979392130427493594799134247832005646550328452865178637436617604723283697098331185089856 +(45,37),-21343300943316667267604251542375594614451971081118753778464956149902530612801916747743863688042796654892981049523863721076398143239923365183259532084080 +(22,60),2853622934499064522261171668410333287720861246476412659145424565139499509382425039911328282142416077089608451662804819293676187524327268892388588192035566826398580069122461421389272 +(70,12),-52737474234658687013313885035473323402295743545317915615833368211445076780393510879168830557521992653068683132566498137100 +(0,82),540 +(46,36),-2962262093048341040637771097998622031645259385992843986030727197861480994308890602534288519870331783672570687923461080541719844565260706035581629105600 +(42,40),-6619127151063855895924447672622773090563211665511566168172433916784368078882663595419780205493913949835192844996782874000711770530539961956360087349402800 +(1,81),636854662817043990866138338354059034432333778161325241000 +(77,5),-6074663276723282859296651166536909498624874970505791679481086873509207735269966551200234445262512693862278112 +(52,30),-8203580848981120313865503464466710940043553141460413405743693904319421295918396723490119062101388743792895984797276844277154017561547262808665792 +(82,0),-3229275573787863546285941581971504236694225574902407182792793676905937788302190881255449072931074 +(72,10),-21373938978954667541448629387288842031828648444137816172936746091234047964448103452464675578434612616852251144348582612 +(19,63),11651681369927028301956998929394757180461770268628808689155508409942766958499077489559842842140931354715637920598640223794676937209880218773034424822617312458639625464284471431556147252800 +(36,46),-407363798957022223432556722389203474616560300367025832679996280345862264708901481026147010447908838977544532641321981126019472442348409647493390817952785140880 +(79,3),-240212835947449424932137958914014640249685524794134831655303793167200513481724623694386093007830075226240 +(59,23),-174479564893997994946884094731996735518189359139385939587553425628037860501449718371804785609914226908963079532790101822872373577619048320 +(75,7),-64853682601861442440344715988844572630677446665910351935825675850930537617535042964354352156423876288176567111680 +(17,65),77304215057171766861373333574671617241249910863280111412134578132000677315958172586406951041322790279311256670798534593651867516101243974697103759285385626572213180351422823291604394859440 +(60,22),-10474563055861745625352019365978107095213731209181682895283016282813474548594759810688693221214561009438503138795906316210578969509695040 +(30,52),-139901531253450338574281003544339606593470984605530386979055482495009328842080877248767014337003341718081149006553014422379980375855848052608112350732847462694411147040 +(15,67),186162700254437869236880533437575055303402159618204427803444846247837286137515233922907346875197859083980261337416424886148223772135890948357813260979393424858807886483863319523101242240 +(16,66),8887967956837620144414983192073282215120532283485316677556243428236635741661600211550122700056992557145687425407689756455114729214185519551289260244538553489622002389121046561057424203560 +(3,79),524331238656041702266485432012061551524810261012983779369602152956762575318477371238565148233629760 +(2,80),661800070699079551062155374557657251947776847220984600055536222597217384046132320 +(21,61),539493958908032715282883072241845460289867018493846097903658893601895249179548861416720530283724521289857115544747250027021377859852623709450697473389235872470373383187065019527333640 +(37,45),-68316356762647739927864676371979344339208701976922388419423723241167919595643887841218885309081979418778841155401193866833058119535881219375808075048977456152 +(38,44),-10828847232376474853165111870977517509590514462967054578211463845864906288305189794237798042628221900634693114379084456849713323376241087604188133150170409180 +(24,58),1887635930948855699683800971174051058127012524758231645378488052701024742326958090570993825184375368934468989534418289681108434855488245017783871991778962538255811356491318400000 +(13,69),647087647032259709357926031044920496700467044488480341424512264373873799320660795594022329034114184063079755783101612991703709241581006064077786862745796115123431878336380239051792 +(11,71),3378744682387244749411632092050927234418392011043306762487084120828201003549978386993060989606054130934799485699432863856550485350756083296599412883076791248419902517009920 +(74,8),-5181591562503259861817730653480033539467896262888170219160483042024785991871135679541223965113862795808558931262150 +(63,19),-1395978151002767618780250247171140057620751613712202112172926764217846725860590991097350070494506880974071129761261442796629840393600 +(12,70),107807621139553486866538148862193330010170876862236138346562862897894419411782739289283876966874381941059250247768198916782167093444333244339695539403050131503180436933917734848 +(57,25),-38525668593113114679437700805351458989173740302990685757249267114499380904860704632438826604502188505216401832516656587792855882622637063208 +(69,13),-2201763653843099898992321784771476044866921247280104459443011248554433167281650283392143187309875600744193072983326384359080 +(64,18),-60179661180292291304007356177874915289155591072263797120137545917299841099002069575996423617961688176520548753698895712950514543660 +(4,78),177816016728291047845752314816639615297049670516146321734153692125460405081161893348857984460600283196430443116480 +(73,9),-356496543760510117753000324369644653218406279171538898021715557373439679707462276435527919198018005285523631873527000 +(80,2),-969944168624157854742936012980526904943739949247425057317444530464671599238398858484519358157700655980 +(44,38),-148587750844827376859118667753947926594546439157919576305660181069152656040364502293972285955769824230286677155062247073868287437022676652027508717090280 +(55,27),-6368912839076167606269145973339141760851427701214835180175996752727545565642109767631959118373005233442804583143659404926018207442667780761920 +(68,14),-82502428623693717234637089512150776529199808333206061899753355650890863603861277818121935785166644504545451483587376378119904 +(26,56),77506873842598840016056885353835371232496471031074089952613729232724924576846410272401155928065136036869123724004526351208782824491977900130516237532246615684303351717261120 +(33,49),-1905908328683110916803954118099808893127007703253032633876876515494024838206338006701038692005121380388358513322338988285364449179379363364843382424727111161545912 +(29,53),7430860972275083515746247991732377912864799351097564716180788838525120793620722157131446632036745714312292418857231567191553701598909624220374225790021957762048648130720 +(31,51),1460737522570936299804697155239446643945326133103678739572046775134332780512373288165379956760576650293798064244798840034277895393337769275880633761040893045039033280 +(39,43),-1719067123293151335968860818423882265363361974005061345875255713790619503970810086648182233996505259975834552530259577973205520181773754437107162629113411200 +(58,24),-2691256848925197057776618160532707347381972174082670960766335961783759020978168453351736905777217012748403198469258964277852254759304998510 +(76,6),-688430812926256674409261934186090260316454077226307488628367233560825729132080794516668343907183408065159553040 +(54,28),-73897744351855068350993662619843747419882434251859565786336429400504391342152454187121631681424307219538530563741452097304125258079782452759240 +(35,47),-4333177110154300669113020204223319051369509138460170683715051136923201985995606689751629511626691823098591899093116004346706823457530998561790158781399705067840 +(71,11),-1127468240432502597168600768602061007911949207365444380750192244867001360960715316841174751238863270357045687134644156480 +(14,68),771451833179272820884389866644872799497574999147438101375636728743096081222214055562365203096956638600586689727359055972859697679577094809762568890937093861182211928218912013218497280 +(9,73),14821765503572051215873826915441140240325857982198951751960613348853732390858284194333345050517463511361093682340798725812169471378684140229782290133065733684000 +(48,34),-50596475974293889383526328002966702230497220214234628093910706982716395632681408184474363639775727381408473224858351391096651035250301506045123877196 +(53,29),-803337306311870235609622869477867677861246250602039197673366771587760156229545798310253183232039700722670775586458076932987375747103376342544584 +(81,1),-2537923837918119163155778668006612754482679190208570941955287546522311748802669446884713758181984120 +(56,26),-513000594269800209336422363658399187541998959562482910349466368443157085273824762337057270905594822804791301663798765822541381162950021010000 +(32,50),20500544824465476836899926518284083362739142030752071324060899406750876221495088953946479246644044276563612620859486193649058482354183227734082844563981724601895760 +(62,20),-29698688627060971643505508158566166091592788346743841768083826696414669134830977555485407360534043104757495669271849102786422910743824 +(78,4),-43343928376182156656976674160599635566627696242473031240599707382897859993323528720266319709971197152454600 +(40,42),-272479584492009935394442336120978571346121305086557645260486692875811964043934227990616093133517011658102028618879102333582011635149112127633852512561967440 +(49,33),-6177235613392677582077440400921245073029348581118401358852456968511776829837494034430693940569704454563430123597128115692979727595680234963231525120 +(6,76),10769385178607327427197594712687832342058320783265616906046964305000037571878708498066156084589802540360379507562955455050038762615826400 +(34,48),43822940036788095969986451740742553379357503907680830092345582393145071153988149753614478245213044114882821158408743096576639458928911526634935325135290441220350 +(20,62),-69995671738545076038459508031679795228203040760993208567874225357591496407601901459340546490363039384152621814461756327844162119449073930650321958766495005621087182949146896951951219200 +(5,77),315666474324903687549925619557058235404516688582093592076667036465566213266292821430251638798075081658177489528279073414016000 +(66,16),-85312153091399609669195054935556716252103300233448821610576297400320705733752779287149732844530415188528075198166986740557320730 +(61,21),-580949353352668001335320053866065767528124112755740851892627910752951679249799120668696470837239985061985835444055006960794539690558080 +(47,35),-395522952350997611595992773161528682215058251426380637474881557285747276539419339605183548406986887022373743382514388267822432307072444426602672341376 +(27,55),6843848175298656536561377560492936591491173034321352398147452927242840717514598504604507820507292586267475685298173626154631857886328155491502598089628448020322509836142272 +(28,54),-285283789772206915902891682763307281772783770355397537008432451673298888812420368192571354507331145038005987054250059390595843207835152466566183196542854793594118811260368 +(65,17),-2372787719905628580276647866206006786518072712389083201072462020673792969250103606937158330080532403499670030859203882379740325440 +(10,72),18209741533353500350569346766060863761024257798262360784174007127566934678651528513700938743940625145834313775590463061221650607297048304632330876002057129509104059030 +(7,75),15365848639948750333042501275070897528434393411294508051419018136024666568188410607698544838277717320865997927776150388873430084082030426380619840 +(18,64),100923823114243411510033453115930365161058974503367470574142286513968984558053935393319597149050611694157359653379403586150446468075619453520643327185686687814590733910491359678321785134116 +(0,83),540 +(66,17),53783104263325546973801727755836595945560288847185481652605511382543580473015013884850470356526493913605473161295490258180746739940 +(31,52),2011694862490489049371877553606140778555982249451521971539139770939212976628345833931870662018349620513868018166874387517669038673349911620033529623234033274634706407980 +(49,34),1626900205689452682554632125312559589199034609048935385423455783778168166843542182636558422774682747615380103299360991165949022042374976022571004463000 +(2,81),2228088525100541031520451336917740779104927166544272696512682963968622184166937760 +(21,62),475448736316706370127334734917837325594298375499981377378444526009822486228563517410696024705476088882222526247527148319440706446302998552910241409816801147590373073983010702318972196050 +(13,70),32006230566815258785168771173732423037315232835508576494808990373510407334828841708693551233190306719186009932208627283121692254780232139835615933059677090780887722966717861515634660 +(12,71),4160370156957925956315641456109408790674202884505254364883408768109596483480077316456271666115311261169503760217155054646539252664609460285078289906484853637080420366327596005776 +(10,73),438663983214574045071538018532700173750228659954566534879141874211846096916241254300993511953296864713065987931141784985779323533671416160549919017415930635042900349360 +(52,31),2389804570959960227305220535567362578272010239555333153204633952146798237950794597820892715986318685907157527614011148389469316686696472591838711000 +(33,50),131373989521608725735467710084105776628549854260589998677087733686458008340715220515285615450001706403913265141127702414644129669129179710920708578637670667020964434 +(35,48),-73064976656364259712445279247871104649802043756465893130011680601214879498381420395201038267454298946540801068407370542824163195737569930430122170615368069663835 +(28,55),-34105331990204939335832210273598704682456355279455565675717131436970656175525642136384794524690092101764999340517821902235616072413480448084719136714109863019148451909208200 +(51,32),22171255467983554074297452552908685441420449569062719351519644527100663548601743212896962494042055144513516174754787150573630476017151118406713137660 +(24,59),856828986740117826120577957417017904842194545322355766964024630522284734190868157901843098773434310177060567480824371654061794267331293298481241203203026460846255153648417257404640 +(65,18),1389955811212284890619772530769783778202054456033963115337589704134775366307071491044887359770833309783163742781497958752085053353930 +(27,56),-2919313689766117750128153273888699853635723976426997734089103751013298653179178404257454705231593936779375377212767800438620927832863502278139766422637479489222948119612266675 +(32,51),-31204129771842225176019272176527257127772421736871927002110929890211330111601976335367950168693978843556472799648369663986313862463778286709795047492798826022381836704 +(77,6),13073967085714505410029432808108139560904130655847477777002661679636965832711519341982311987323578205456460416500 +(56,27),177068940284373372574775393903891207812684095855179061617778692722543901526884812207296757078452463620543128833614574794717588055138736541902280 +(22,61),-3210113181078473729051808192484368959323074224641489152441845373707758853980468832535090204934406886469288313259085402393168774077840562757294618060214743504236663966259199986387833704 +(78,5),113817673090696820271303567205249019659652216937918177953834048073266846689803192712590630992789518885723004484 +(74,9),7067172604976317504102722083137051608539739568080030248152430231316794956310959576428554239691456352955107486206651220 +(48,35),12953432115733764538531388121590842628063564615610392789563985917605555057175934174431377589488158079689213259906578772468323554345403038129894063473696 +(59,24),70163585126673490095821398228382540012628085113814876183446820946155337723745784925165569675130071064038412175316097624510017189244764748415 +(79,4),801538816721808963229778900154121748992351869002578889320711393335462892774059479204512350014282007973837740 +(63,20),713142249457409423418790191951054129959103092674447331200746790508694410090085715363778007654207932826617636529203123935065140448978228 +(72,11),23049331789974278660589359373330996879474615544549983922853075336317806127462648711687038660074219754289501947473025369000 +(80,3),4385952259963375056468286609771949122311557996584704580958605907187879791983555764904846777350293594636640 +(3,80),2388222030015806299581725945259996850057422190026636209448973290018791402299685568013636883404473768 +(20,63),-7752128221933060068240657779849184646150090748960496513026337733211483105489534194348944516759996844900205653762620470283741030772029611605905710890952527612433678806000497058060205226000 +(43,40),232666733650882117350729469950837963978472184530556093470407312199684502733392588925928603463061572723767525481904886340628431637711707777559509227952126769 +(36,47),119240452963788707720508497679132581892906180000678802809176016744207598968857304161946496291381362238600210398621832946002739500882809239765569324559200206465600 +(54,29),23318276186029032957805339425401499493389339502063166546829261362066719985453301028058396820880425070635738733871412693021871449951486142764163500 +(60,23),4454155992205669637988825861252409672901631508972921310441093992684549729063486564701072639630364504119610197710065480956614515722139743120 +(57,26),13958250346033383826321399290964068932914268384730828449210450455785636885289050101624946025581196116374237813609514341037401261409814935563370 +(11,72),102685494395809941882632465574702878753207315093378356067775214494632150497828849795539036568412930103253109689907988467562008736390113803329274660633720516351583733346777815 +(45,38),5103050335245514468514256461091844664001358242747338462775919273400128012738263080356691337958268727046704998866637377067931984651159166611252545450868960 +(7,76),187145111584297233772288698419478690330360302004120840249567525993880113351941591685955500243434493197888834112288776440791780595240240143016553490 +(42,41),1516323605838034269851478359918963545175880671679135550096177390476346841615910923974355951386014973066804049213124968677845008288613143594953900067173134300 +(70,13),46501907597211405495093662555318464355609789865568070544295656336968131547643130624409802485252484239165683642442502962691540 +(18,65),25277601612684862133890149079842442074267091501345088498062646946724252012436999281489225968528188819958143213671312193549069192651852354245732176199007639322906630787700557644830063868168036 +(81,2),17492121747193776327309670107287160183228159067961250147645348933481656645475491386116458745200040577400 +(26,57),311001330706646675992189903208445211192145561234059807096805337500965669417295507772432560160692491495517318775446951797839503232421988538554988792135541092264377372870769524100 +(46,37),722551568620086297312317453769859883847292136081902249102608968443584486499887050479625853699669223860638186545435895639224967399211318643524423712628040 +(38,45),2439944652221776611235664108764181849185198572386981860917310768672673388374037012780047340932812116108959530622155700444592980565813735428975926747835857066488 +(76,7),1248864386721321592518422879386063401767595849108446459366951395932051403898002261242392355692706705943491122541480 +(39,44),387231180640043286758483039177323664387583136664949361339439291912099451828560069991489109691169921864075489863164739550838296867267833798661718103173117093440 +(82,1),45222340328155471148971514091249577869891379242466723107516947441910822172417120823021949413108813400 +(61,22),261906812520460276113191084354217340059982830879453276612440918357246459389662782377228342348202758888490142865357783615002126468303916890 +(37,46),14933086496585697307733886590504981937875239857631478073908274315827920303185742506289615660409972631257897744426297671478911121434482942430129322837688196424610 +(40,43),61522152641851290195064368599015982230579355479116645970202404230692252676314929479642241146085572421106992983591945832420819787060030766241878148200848152400 +(34,49),19345045415382738303405602896728784354875382227183076222289625121347761107325230872933798665826122905289156337996957264358724386609933179929632767589846861007043960 +(8,75),23257315172169568831527061992380426533025614829500843480188518186941498989733506189310136008186663942545938302953263846035667722259962406438420740710369888 +(53,30),243260749181365846837473321767691846752578307908696971336901916141864090306715164328521442822624638951914082147626356827098183189861470655794151800 +(44,39),34923242875067161585762577961813566531067424776372233090761160947746569071208832442654531379911973112774249838522663432996774963850281855581789462021339120 +(69,14),1772306597969628706413241134535856832730013284036640966294679417353636918783657930103035785980967946615692575876263826435786090 +(41,42),9716201576507518979082455172582641685534779092654430107025840494106677031457864383760629720692149375742840850448553269478646214393652965011369158868829312780 +(29,54),2713458084642869264122493645727759121667552294046115956948919621428418758732356503790066311249153873183392346504843101316935556836395655840762063970886248647448414181265180 +(67,16),1898575210973890258580744884954613945730302512506931991028937127196125581569890604657039039284650500330189730904673622863799812330 +(47,36),98701069538128760772015011136346147455976795541971243712232668511354042936639695594488022698882241245790830128472017481578360393706713830363572530249960 +(14,69),49553424246301976861745258117001114523076606784055796781059301347140381924538975885661187553588590902984158167079333595120284190406292113475273620819606710531859833266645092631095614560 +(16,67),1026564651795327398650682689131874157459044950839417084559686610262396588822057835637799802675066749601576378824084755405130198460661828358849142486534440228401606175213491306392170200899520 +(55,28),2099344306630528734264433674565920253560198798862590150147209195516793635007158147726015437039324866911878111877408019658431529963922795581199220 +(50,33),194831424055206335771770121309486614456168087274194584307818963658551922450626755802801978772426342269736262693752555387448325839071028380558430264280 +(25,58),-19224272042522318701184582883442802302636731169515594719526635306725992984700626299818077545626199064018652119413050608640866327502305768934341965225000014914046719624452324998530 +(5,78),2409467963882412620399161225709547949066852465856869936176302178071772975910036648298485659460506871446957987675732614168541450 +(75,8),101217733331352266408762778562761623072930185517888373498461500688103971571662291130696384279262819678200013500305085 +(15,68),15819813774837050825848041025862337041467962817621199576589166799185099576919961187366653151536831281123498837806367085952452083801722525509064331511139919649074240007904817459414745040290 +(71,12),1095587906147843440023852514060176117977872885092836499987159259170931345931272434648781616347424701731725778076555515262005 +(1,82),1473257249404856813039337030947271276809093983170966810720 +(62,21),14232573455418360636117240397648620364232211858068850270408514705279970240811837724584992306411770922854809986414541139689674531835015480 +(17,66),12658084781838658659516467408812961114066229679095211388589119904542802877496547282196891436140483308889626362895668726438144410997955661584567039996728540634766754827350300447512542403692914 +(4,79),1058669123638189776104046138805924478430538365173916768871092953528465787112993099098034964085946123253377261879680 +(19,64),5479861746089731138644859683822405740074803211932111279855176475684609754520939853727774737046155791044768023033406244124955607262124646864249249511841368860095204493091728366001534130647795 +(23,60),-15011704420651243702979236168918977307037020359198771731807846760524383552343780386208629493859798403959935457850646580381335836131464651731981692998284184119889602305900145560845613 +(30,53),-87777792454144880169145841127374976568497768292543723397186770997608117241977527219239450868220168164270665739209794672312462091196371275388894972896598553670791282047520 +(64,19),32868734323078599248685586615589947348689644610248014821715619638503023678810537949795659465369215355015517327199159840435592776212600 +(68,15),60942883921551194428640038260256719163841598958515556547244028476785349961720628526946442453879572082684688464745140978638502112 +(73,10),430190186344771372029351475586802423025415271341646622617812621724173459621840585130366992175327956779939470012888020250 +(9,74),284153695862585853799643364467735794893637136669212482597997443473560715329666625929115709071879844166861143068795944939527602211118101792789067699293330216677580 +(6,77),104180866381074964479797918599525171883627384786927571688327817787066954957447139473219241674301536498080321701589864563443819468254814240 +(83,0),56872562639374679888152183733801183817362489577871444268543047722539271133271236505821303558446795 +(58,25),1025997439138596049706641723970242824739869052275573131767665888550329943696472200191369230062441890309099629446504145320279678026229087488624 +(42,42),-345843317857450697862973044405078956171492942101552707888318445258930539128013829538526220839876845086580621509950359314401911694376944719052509778704278258080 +(62,22),-6517747532153322698591908104553418385739971312564446812596107677613098092160696641768950992720980523717631857525487736910130391790841645760 +(5,79),18132046140527130339864445436866028990412463432996944523706266316625659267139992747799936811525709966256484556690177841342496320 +(4,80),6227708357099854963486072175964260424874563577877357817208802311775199971266851993889716755295934661538970669235712 +(16,68),111561682791442732372222563937804057035218593660876056479700905466172480159322618009757020813556173877074188541626518249053739072143295471659379091247305384640597039469443016245715545867708544 +(69,15),-1328777752959975544490743424252721575495073560907916944100150468163759430000937048964180052578640212997939280880502027016706279424 +(80,4),-14820735309637981032458305210858240033099271891828230610870449676708170578587163282244432856059859163660263160 +(45,39),-1208756380262198198048238994502663410002451424139448058223255191231759335117317759131049581109220118796585778561794173879365105107790894859502106522870049280 +(60,24),-1819408673007923559061573706030019257652329883816498414486253921097927414210041383909354108743036604854645808712610468122610292371372630324640 +(70,14),-37985389947579150624800519247960824955802433337834477376153697103442728756022185258375627309920781379068806913729882682676032800 +(65,19),-770987727301655897638283145900025021472593287697162758882343750728768782722578705620220774452981934359116960214208187670675149839035520 +(40,44),-13872661205784378402763078269017950036068936178624038895180264597051543352602949244565422866619985078708684387776247417684069321964800737174134962456620294972840 +(25,59),-6602613397508159743729744367538146114606075316162887243068303721978312164230842862211071229253303685435136533776364017036805722667910371311009438559652286409943423664802370149980640 +(12,72),155117472121515907915289711508693716498366790707591801824084108492232836350515496112482148331078174247041347038987462623451365097367224109107987197025521302990389006777131900413440 +(72,12),-22719992124031051417213019505625351514463864573446999895074565778756674153869847980748139042506081701069799248381391417336360 +(0,84),540 +(63,21),-347143787461230689350526548990624017370485096018060598066661080092482248423623316889070909982920987749982014336928283617001973203574780640 +(78,6),-248171631491217203222576610260865149729933175616552651177506220172607833138308634336265504051279823935448614659040 +(73,11),-470491441374477385695753236837066270873544442684409744352744978732582767346819589837707048421539413072819798748211869629280 +(39,45),-87265359644859330130150943060560287246148552234083087849252301248865173416991982547652467835020459322263869513051123619865473792121088034600508062580589090587072 +(43,41),-53589583711294425900482637747300062512750930928734228783032099843328321000429080238436294325685924503734521879510473272996711969725744103507990839362957420480 +(66,18),-31992545868639503218599645297401825850070178455260545425895801121662129746275117617276070689897896432733754508084750752408041326157280 +(7,77),2236780918592699085386826871141173374821780985000930677999994902204481371045136070189525119289441771411204840895866511001953490563921185473948096400 +(71,13),-980150139656136146803452515517033717068205235395387285882533122251591081685457069968324514228409443928816710623764334531008000 +(61,23),-113132134105112123304920193157615695208106870128241965766937822282086334114505086959017819643356287900075714624296320659777876221200423209984 +(81,3),-80084768901519544177606358863850996034915771614795785628862286692953495083756453640880440426278288310515200 +(2,82),7444402083867824820850383214389564304295414319260817872666784760338667371173968320 +(84,0),-1002085752761081163451860034174639194413269074789293215497706231924375170750715402157078846141597040 +(67,17),-1215241702370494075860414416691420391863411544969280012778753076163717192840821767855293807920755394509967007531814141776324944623840 +(18,66),5725746280370462095401231423933673168776715450990804459135896156855541914292378553089140992756790643604355186263233923701116047797520013551662673462174848397903046221227050097025456891420118560 +(47,37),-24313239657684693708886424661209641143629265580761338212105715161594188412739949513285170731574997911215892660990873581939193603672671629562768368421685760 +(1,83),3390929996510923863973195621275401504330953836887262998544 +(53,31),-71866550331413976566964395860013642408833797050454156799594362270337757329285267403748986942153506732171762795615057087318281991951140197259529958400 +(74,10),-8647232732103250048667439204450520234876015036205648916267305226313796323207708956404051131597264605577388575668648221280 +(23,61),26095572583637569065972195717077296684144430544004524566633389515123392842493224131121501402502943618574753009476980632106906486149339501104406574006656502811322252256859199913903938560 +(17,67),1922904248095575450490126211061983866778292290703047731387973017314515974606832291540071719686166978847012425836298392961853576328661102198823725801340920806932070326833841801229302591856541600 +(56,28),-59253024140774310884316790055343994573440612652159679300774420139401318303180965819719496927824858827892511527991325828009561516468850110756280564 +(30,54),-22043130829000430862843522196056012815656255504795062792906738001896158740239515877137187941259977164349650828778309938551488642277904088673565869865971308487329391824634720 +(10,74),10284059524805455724092071227501872255367065248835975253566444118058218720418568154676247895618211415603227680593276109281337425236876476925889083281989426135426326719520 +(26,58),193504022206588333360315543198861650827984999579853586603183489048623129478397053040249598326766980393428961331329095061483412632272954173831746227728402196037434268977859279804448 +(82,2),-315516566559628424434524746095827396605587421554096414598388307670828294097127737329323714643693604638880 +(59,25),-27168803422558537469404862724487805865952895191318954618618415576137492835284813903816062643846556107227206530701075009294769375992304799154432 +(33,51),520540009121292537347517906673409886480281178745338379236911955842381265482445134941932055461215653221646694290673619173329026233115345375743529144272030033665812116880 +(44,40),-8145823518417041069183139070935845501694134857412917024754906641733467481149254472111820471613527152101831876648219853446129396704472977438644881497472575424 +(20,64),25076384330539119523099050313253589920095291892244396720310882607726832803479029720156429560793947133954355748713336068497539055126732995379003880020517365333158747821805442176827357888643200 +(28,56),54679612694162826249005850372244336952078400922586489724227615848503976224938286164827735440929383696096761195911215924206144812192727347785556237039825052511781821776346269120 +(46,38),-174293351386389063995443684354020212007590136466309929870246381297905890604378576242303183803073211027723413744305321623219689882816214680332767192524711680 +(64,20),-17054394600784867431230827584721476508386485214933447825430186950560247176921654655216524599053320311713213115736652486469622209692448308 +(3,81),10771126429661778399546974642888040972668123090476005110925725900039102707191311705491558641561005280 +(13,71),1522573798851378509287801534991656787214146197767427027190376586798786899143840307942305614655497673762102681933401951101153986712935402618041317155905524183761260867066387818571725600 +(76,8),-1975507629191268264357141813341071099520633080779230035636801238991074230171538656125377683204789123057510145569974240 +(50,34),-51948865229805219013278391069741583081205211713142090804743028319415411303137581126406797168613046562388366190519212486280024432203467101779342041662720 +(38,46),-541588527191219438665328822022451125252331604354953004544460657125961025263066031227743984685728561975019926354959761556740996518552572904744434369376541651657920 +(24,60),17824798220497076026768314178429646224443261494267439224090951871116098384239735347462370269844356481673096324972883961740865405649352924132036049651740922951406446983197529116255200 +(19,65),2152103429519823138729939798243919319248442149161266727433121053612354329739314280945554418516763016022618228141041413127015629934683743889597184550557456421435864485033064784822202002045689152 +(35,49),-226554150071508238849937239445609110977203220547628289788994342095503035923197153432621724822260504033365309893673356385547873286758196849181876110852218128696316800 +(27,57),-3913244135651573674988524730858068567457596229344285237636193330127916153363328772163581707899520176287565679264722078985157994477861977642067438825646613128689656186619857300480 +(6,78),991378562232033635896011927029467833092607396201614559424497782319869412788103119442151469965639253343354092426021713767657263139056101056 +(48,36),-3267429498293224327177330050469898984659212559375487491909794680923242410841997267006927742921876226170455728736351912718167727504167630968246720116697900 +(83,1),-806071103172748180096732387735006395657172185738668962035343780806534670953621818091570712027412741760 +(52,32),-680585251595583654052671096109885160120831387370204922293076451664636253422631633752728081340077721064444298168952527909458178999421774281820952362240 +(41,43),-2200309511724211209230718693768939833530937979191648312922427089029470923676231212876946271830244499567795270533965112587187251667457336281078492535213779519760 +(32,52),-26596385533094157781459227511199486213861201396317949046506144705996942266879818907191946231477253078511056247721989049926421879307909154290056162493069690659334681180280 +(29,55),-159912550791781284187893417877144446824391620785765026060096801282707496449409336769624602447527126158960685616481871300796064233888730180453828193425625384829149785597109184 +(49,35),-421361639169915114982033486361599814470044529427207194171534841363522545137953245296943185706818940248869886459053017623424199973906028778299364969038176 +(31,53),962781600740761309090482485972288705048741415041137555731173966589931313488350944162123524079586657841208356507206633856489222065429223528896247704914814648470761246300032 +(21,63),95103488313029673995474364581501919001839301656122044714842610674216642611570412387169529274944790784507155938146410001972093214737536581166141971596037446574396458588678374074299468556976 +(36,48),-15047856357938320135174467040462522391099503558351308628518291942026673209461736643681523417560643898252336349895056430324765476229356415090132823829467173247826816 +(58,26),-377524147599633406637798139115532645004800808912748499777090755663915205600263744112912657733647619445564628764421879096311225907746754889090240 +(54,30),-7163866777542142602541901196297661228258982238463022888987179319792843940196554240451856616450202219876634052328038487131576911767101459324448854912 +(55,29),-672320708992268356139377906946467672027799958368065032321173601913304348807955924896322686263117133265837950905414197025740890072334562382467430400 +(68,16),-42131223331229670106749182820330124721062227838326452262647223714094910268239657030642718527863945712194905882913273228085189650080 +(79,5),-2131928356511239210707540182078858017874955784889425145591819761251895761491485507106933637991372952062865038848 +(14,70),3044513473021523441435709518446213146287150711024826779967472584748925314611878397009370246050950346055413411786903338765034722730778702256516425863176895536325017065316249760005605444320 +(9,75),5317759388880083437087658785040425584963112359550401397597065864643697625661558974370556474962654093378224625724488399164243732163155563379252029839313533929757008 +(8,76),347962702952299098968126138939918446329751024690193606167215674485564838209600646593363027414821746216455661112460539062132445126404650504636321235871898560 +(75,9),-139950095293793719804567667048272086351733149399018267339449220753492245204956615917914158851442568120289985971898081920 +(37,47),-3740584983041563586234384795881006622041989515104116142560149018364333181463548962705809918949301052734205691209100233420730302871924662272733098341440272285747200 +(51,33),-6101788753988597738614970674707232010366498245481844776762861358925506976189815634750052111515955904256095982690730917531565658135963538479115998976560 +(57,27),-4892166748081712993682372560216590935628008856375883104215021100156107228352790248979985965849395773762078173998815588771357432288630843753755520 +(11,73),3026864006421397139096051458595407724954435398242985781587917166734393417002749800702957838731886283154563739322769879720263593646862113185529533737257000913626637953956113088 +(15,69),1276894116643374705038863204250412622123908749131241384597252606750880046074352445755263835114871381951890829225311078744796776087121757935740301802850148823674539587349290120338500092375840 +(77,7),-24033188440487129068965007420337013530405718287798742980645067227012265719610574490300296994964454726693830574702080 +(34,50),-6893602661744858895413944205873340446958652557949205694085491984090187090774274868952069399862472539161779773703287280813411047920029879676579475794671755260300872960 +(22,62),-3310408694580323297783096458233552964122607189381516115632086725079345119051664937116467406382809389947659603446292777593213805399968669267150883705272459910275220255468563383043913421440 +(1,84),7766059047694140446590077676436804506629409020329379851775 +(16,69),11438791124181936522140228560795754782934163010671489118592704304398914418270062459148950212777339225301495646474447021174975505220814656203512734548289476189926570292232901203355854554596383060 +(17,68),272155544581791776757852117609007900168758032856173090260430430897312142536530388262138621186888867763056066145821417880168099618205873332551295764379193525013566936242807142061926666988138874190 +(58,27),134340140916922292998830313252301872345392360760936779224960685821378164456597914133410696444636127247484592097411229206242970405896132109741359440 +(82,3),1462358310008204281992737565932708547201219408676929652885071524928508939236100549316092989509523557970448080 +(38,47),126743915385651873635522232997364944350283425142873761915329675723828950741033465531524180029704742175336374787795028049595391953370247358551700326942739269824599000 +(61,24),46932340946030156952892846897973478722658787300698314439450312270752729354411074951403366299905261549764027253735956029200265105671251907483000 +(33,52),326856659730307750071339130609029121961873141771794784660828714466383313343021569090524926772508265980641446804461700329906237142852442644397701184550142723738180400962290 +(15,70),98086691907897880529627342550470815119110625536793127685110419299312011669658427165024447682191757974606075456049435937488304735585004389097016037584346030345746672930475587904215770323241180 +(3,82),48111389147388014535833094916142888704280438694688099057530077854607302523898415258967567058061168560 +(77,8),38524692336420095270448901266478491724741134761812869059599894348802243427947697718709219741753345727098822257666825785 +(19,66),729430207220188404589086729743445882059726254687693760594811876627929020389222028485649994232814479479960650458761917634355401728322331644672597644952702474205284320547160494529895842017410293930 +(54,31),2146311488372371598335024944794872237628064215015611257536862076722000283065677576638824118540209675244886814948815051530828557442746181346491660444800 +(5,80),134565405249586802403013116346080008872662154429527615176282683143075744157958418707866093330266724468414094471601973558797140040 +(27,58),-1874094634969241303171995456891058051046115171411806100912253058197186936706077610964169487245042700407550497722030921596857528607258229281431131998544204153658279744063001139976430 +(78,7),462200378199451102159536442375343049455003476428731821824234928692752676930924209744723110888726950214562989304532000 +(76,9),2768535265590477597877796819439409819921516915386275633481115624765708327940460769309039631881167632971291911664480829280 +(10,75),234801957234886242161202538199440871707652977690216859528543599533109092980196172273203991696859647564253890659933247804545451815935088708942569147253499216512933940828680 +(11,74),86609016647324105176966449901578516321352235596910819424699153776198243076815480984627166697789831302280670398479888389964550837664606189706641420423717563759080932456389826250 +(85,0),17664710372650792501460492600253158463821400752561104831399847832184033739379324401675038737489583470 +(56,29),19257387158939708375921488920734645091505025651814156291769244245864190745005664383043328817659254602947317382559717633141293172581074467622030264180 +(62,23),2859337946041163739276135773376015908418428229058736509407741000748864750155929740085158786946956940776542358859153692835639208823613563497480 +(68,17),27374599559274350734916965607430887364718300820141659258463505865958763828367143175694579061360645006368926364666136697819638061542960 +(74,11),9589640907122268167398322527808365663219284495771291060419543745183439675603743168890121885039696265251823809330599889647880 +(40,45),3127317935365006199376727633710791667887658001908441562107203368275546372378589682340115098907563309654053447483555356548512211642535400531120065891912761239115000 +(20,65),27818460048813098370170530644783381789921079369508547668308796789801292163890181989395974473078903991727941245733039486921820225349535998567439925746838809966751169974350058869190963378023602120 +(69,16),932340308827058492691540645394291149423268558570990298130841810387416531066485815410369685162155301209329340929966193862042318157460 +(44,41),1887378308080841674231177577492089226528777978210035920664527872655532209622864029039800890912461282932703015205348047905248644491292977860979499422173787525100 +(45,40),283946826909066741090240389562695173831765156061594275296082850394027527356463930687896995209672685335245538924608973986691126415086337794637807134215607200455 +(4,81),36205916616739468652942776534735746912501331460996408854672056976700518534760168735985229354331183355998720473926360 +(24,61),-261400853521545425270026573712535373077715192234340811746139960566598153181275799669289056369957025173242977007529592749672937826185885433472816884877216922780937384237716959127488022280 +(42,43),78594005612694976573239207136838733396589169681429948234717051915134352186602027892451263599908411810261702760094181503555011044169368042112862874364679470837800 +(26,59),44686155326492253909481113257943321096264145727426800067326918937454656910343485219736466099685953395583879141452813434029870744876079645146975951034796747789140691576159012138626720 +(59,26),10151337197401051388756146809401535597356535210630449306014200780492322175768133469604260877947882290030463991077370354610395518704558003824407440 +(73,12),470352122932750271061420237797429679341334127818723901043666899148567428212480823074336152958091261389464758320309604757174115 +(18,67),1182700035183481261093777164884865091523725808998000571357608786094225106128138921123758573213609985099331376761000046594340024555951969607218524336659854571772428176178057704029376937209039674800 +(51,34),1647309054020957849004910972916678064404836098610562906802571086201358532559710525569669314344679873852723079416607593411717715535495453289554227336842270 +(60,25),715461353425228297357657406524785822684572386675775355446034163146603485700404840513449384952065159499182712595308181281788357633237578308741460 +(12,73),5593239546110435440809872747162197165441005032671802945859549301809243963304603294483681167027833646514323976079597664972686269070864587014736937382460499674767300613567711551075780 +(41,44),497185025246073068106937230198757878408126751901071323261903790358196195128481836051226732839041636153258920046125986725424831872809748018824972366902477599437300 +(84,1),14372622386157308160977443025653589027501768332254351284330872808289367655655354114312232432390987470900 +(32,53),-9557018007160200964364805064743802724485243934806513789259578255967924730106879775358004844533485591054525125624786091440645739888174000623409495827108821356040614849077700 +(30,55),8506541283089077996294480795204741262002136148678561097424767359196483625959870155308754677300246080797288470332366546289516864614173541844660927988841923917133014553579402240 +(37,48),725568976992802467983335448030986497798689389084489673767116674158253177251636859707771235522480695162946473380784604480881937608968913256469530491450625158852149135 +(65,20),406225653355208371567197881539749130666485006428960786439262949271225069487693829592139938800600558503460364429387361945502705330433434175 +(66,19),18018476380882203100654904172449762970535219198301879321035725136661655004142478590623138306436500613057310986105420575405620365739394440 +(50,35),13613578211426051555561456711779668695973342121599152552687770427766872154248811144187288562728713312225673810411717026061997107448308916353538237658497160 +(6,79),9283235248295939219850713780313087126656495924576938240433820782796188004982125149778444386587069126379646425754497067697461082332443165760 +(57,28),1661782220863101603944979039325529983192484236000124826332918054391118119657686270654611259799406996952329319944708600184654980568755255188132836625 +(53,32),20746297073828349706794053394286834647792333957787089161698522090182616080947307795951060265365422853514255755862387123073165891535844259133508960563120 +(79,6),4708685387601796099255978343238961683685320691990657645823461918596948025756839129711674269106054786326993913355840 +(0,85),540 +(7,78),26246667292513382493089087867745210519014083561430015675459226481797350178016574840067955965935932898884739762076711041078088052819291556556901503900 +(72,13),20618658086630362239027900358606091960808645434275989297185753552257762155295591281962491629575645169056533206218066657303023560 +(2,83),24687710867366361530308465654601731945046871940509276423991677400973010767687137920 +(25,60),1136919622419644831095626003328518448692695664628593587926612821117104281769838389065369710870768610641605932157778824694942481587628530222329289961980077699846499081770102616829216575 +(43,42),12280499279174672634406038847841162358397820476372297622232147660508463754638581531108201467097769628086799672076150833197810526125424105505209508716897474642360 +(9,76),97203152782062959415033559100928771859335678332673997633653624423319601693792363033310156663348071800294661935247347423562472058569503759750199913728408882973386270 +(49,36),107459248285294802714946742763506034582853963600122793144568984955711484480504407679972459560622176850438063113852309192717896352365092663852973911972514440 +(81,4),274009155584383011237736516457664804970769482136282367013020449242270125674360187100972585892639066553878363355 +(8,77),5098482378626405559789408923119341103486306900728006508001163597546361487729532602780830109578343429334155261511796769538609505399140053830965875097128674080 +(52,33),189763947310776373303757600314936649767740006537195695698016688164094089973692679176595770225395429371560811976791168181091278510358305197151491390929580 +(75,10),173599900544531055573733781709283490448889366340045700794327164273714189760130943419175602923944988991245044255198408295310 +(63,22),161452403691773828772201254307103092726829199930360052728332818380921418750168621892432274691199386656214587632780007534637233837903498782290 +(47,38),5918955752777268203604173798163440384099649054128025987205248977160610821053727799616255366977418603104418354386065083505155658030255455889612436983737600520 +(67,18),733897506164784086708513291032944096186147421040973303723223448953272555249527597947121764928614225827000340290611596613715437086700220 +(35,50),161899227076874578954555850678879784881916089746376818112809747925083512288568684656576256283358030398128385804573857109270878822876181474486702499253856592892288454100 +(70,15),28899980553932944950092788165007403787132639868002000354068308135107133604061561045629286045486525074615934246075171358643393048720 +(21,64),-119769212693597177327857829584861948078162779333953317638024358449316037126371105819589683584675084700224714796908210622988219399607090937942438057220395812282282994166512060994247932546927160 +(48,37),813062257793299113826940957052675980574422763893386513633065003280692595006991972821825915338828436932716158667571699301855578285093811858671465957358186740 +(36,49),4581752227473661725457921401662849869636760261067161275009507337212371280960180525579008532040348390915832375350871971458480870107416981899194934007750516046380668500 +(13,72),69745664357813354948446808802170581349988951145719950925535464187526825623377773033216694964142329876103489413139881387052552999308573462892430371332028115968509467047929929808498871175 +(55,30),209548316229854186719905683465586985803630016258577209698803410169525309299673934834820579417279857843892724588597969862116430912860032998699038302920 +(22,63),-1026959877655317306310038731706882809667129217959879236867527357922768333049955646591428390801389414114550206331702463954394755055541161777622352638680440410128718505912920715037264321146640 +(39,46),19526927147580522553627392887710777877914462844993100795000814811642448646251931931076061612100199203092958455963834238458829695995721487570218462944002708947283490 +(83,2),5692246390103688500354342650396301102131901190841534800881906385788515764980116767705881766879449447447760 +(71,14),812320706803390344585445001340748327106788304858066612215275034950927544689813190531044585741249309902972340733552681706632953180 +(46,39),41623604320316263773204601435610548488025389905184157696874584601558707799413359573994436316668189915428786100345593332853175937942172136159703728444150385600 +(28,57),46693219189902704295425521135430998312817592490575497493168030588251416834392439890878691520459139841776168086744272542580003194714156946979321123378679160300761770244275816533960 +(29,56),-840796112671197016611340012029388277464732991367226768080438055465275298741903859065557407127377689602170231195700063997932701050938236639312866238532461881330082514520176258825 +(64,21),8430810145351159521835763195753559006779328737168732237487688423632324353177695860122194032780456855793229649972836185619359460661544423680 +(34,51),-7578761836516113970377657059873853460993137228539922801865704699127421542099921419172667838081555603180456034253053515966093415296061427279194507771380082699126085682000 +(80,5),39922158938254153665354039761018710104676715020945245271995089450048371402538721205397718021178124406652096471980 +(23,62),24077126503785063608351115128627490907831228832630293422886020544849323379454578985393710309446157281963669566646795348281444195422454114618953998435233363674213141804996603041251890010820 +(31,54),117731645165349851959705252642521412886113431933932223566422426355606589890655755058988167541602006919168539612739581762104917012609336800738149780612805817894965613643696370 +(14,71),179183262084301721747686891464148630317131626977683534269047060021857616485660236748596329139052135221463880727167687838274031073416922587959717740514753020854671215648619992372557173577840 +(52,34),-51876878021351944676175429661767034565299343354104275765529929388187418556879080446661434175072675416978036463208153737435705148994245161838683901916158020 +(68,18),-16780365642114365515128095782006745588722495340744217356086232271373002217477888244717945292006017808716101370030457762951480235345071900 +(16,70),1109349117388508635186365594128894834862348984529032951884924957386282777018225109304756083163151697578464293997431237797686051992155679057700351151156411482919443918122437454659196043620110558320 +(1,85),17699566967251160363613012314064580842576963430166208580080 +(36,50),-3355161400127925110687834878124197084633699490285232358435901146732341989455725589154113765698488598670515425032418221115875371051349887327252813116068287285252342044172 +(72,14),-17333973978349242541093969061448957557526527860766894772336489946018514088266772111398677446541708854357047521642122727420675877400 +(54,32),-628065817708432107243874746642250366794617952768362550451076503098911492359115772517851728209576163199191439742999017477857978648943276618131662342012404 +(17,69),36022801373104402032154698499139679275702888429016098560183533547941413077829978903697134882069149730968602707147357469686359857238008043606889779788843278710003505799732098977772822483897905612920 +(50,36),-3510853940039550550333748143100733147049655214609046007316175045476048504662066403137854309465106935761341088031404917347885664044834500379446238336175410740 +(7,79),302486951715134964079092450690734357486360094498885679772244888871148323148823687471778935349994088956078411594596504410072829108481967142728170866560 +(44,42),-434786082930923620749584752162727691646481040758573511695889367592197603411569326257812797029690213154584443149538959768825889659487242619937452557435469277357356 +(78,8),-750667007975594350504367125333324038502692926063380854651189501989841069236627139011197946649709022243173919546615787930 +(29,57),-527782332908887506312224342982705997856269014943019086675398669677330637518712517433308893292142196344191862351969491639757453835543034352789468963277949355437689420457498997163840 +(21,65),-114898172734115295943208686002011626528070363507093089317278458208473836556455763646300711897257258740429079911047926163262223308195692259535595178425658760642289709681607445232980983454556391776 +(59,27),-3667066446118056801836245889937016649353448806514267889865340239587957522839505783961821849615429628304543418530655685649797854454553770964609448000 +(34,52),-3729077991717530941588658143453719188750988471638447059377045985186382685186185179488801119912732847908068685500525188458268608423293132594794948126077440677138392173489896 +(43,43),-2802138936723308299441852743232083088535515847716259577061837931040904783801953003138434175760002141917867866394891182130899329089466459859525099119218305158831960 +(33,53),79954819217741636615935250109134600220840240118015821644390798759767918641410592824363392747842629996762850756866857829271125381508710517332599596025071531066014844230985000 +(51,35),-436853185269489098816485141218203697364583411259415750690350559256861260372841310080718732835197159548499465451447697252034315040695385416312350890732945152 +(41,45),-112209977801516058321234029744133124303144192404128269121020325034224816626962957294470659726597666874253066814314764909041668867986529684070352186871222924631822248 +(32,54),531211992655869588662452018709520910143740978706017566739791172918833438848382712208822187522340819815170376634050615151539656822672448432253949327312992214954553672561473360 +(25,61),2819824720628160350510395357986083296828045991738232688153824710106218170706354266824363615018031624746203736197065154366020139163564333996459553460625072258924934126602190812278650617960 +(11,75),2407464333637627283806794708057244245587583076325316171107102515276714128770622414723050386129050000561770948670814317257547756954774129844453839581868202137975050842987431091200 +(80,6),-89300715216161524019463198982434316645071908820191315235534127593294824486443665798204726627721377505468529138762640 +(39,47),-4452143305637041901608553121610897358417053600067857429738860318977060248614941473656350776971910126812700588866739323462762209011263039665910493516215019705088431680 +(70,16),-20576540576272587113608037131299677418190623055817441616597806324621690238899149755275847374781240833013348033925123778727490011875280 +(45,41),-66213271424292942291581116274065482506162782020897991759038434129098333320555762224606570872602225357856659576573655531714629884239021738665006362860988743042920 +(22,64),576254766307459363163183540543565464925754939376794292673294832769236734502251761303188627410713952882737522388203190762776498884823320845337464203954211018189975779846955517518374317855959210 +(81,5),-747372178493835505691021975365886759864669102800391167935267626768468044286398900301815083654545057108262144414168 +(58,28),-46316544036320879602850867189299245533462857141117793103377046240294260662095484229998836117072564741177819129072805756696685218961231244289166443560 +(62,24),-1204473758919666273017561986012254168358849263176712595931516653329511013060318151834721570059131322613361539007084403704048088927828588651901710 +(37,49),-152787212987468458105560890623863496235770428914516940984685221575478595225171085253925144019686922098952319123079964411163165496023671150526017925298086996141073248840 +(49,37),-27018774842989161776152447647146922964684145357047476001475200500728286734667134681996732043711731906172207633091130408202881678475823323500862706599556278000 +(57,29),-548047663002531249831463760089808954037106234295227454521416490225657764144389186792025449927760853587823084223759531623869000114714169617172093465320 +(19,67),217853939644063729424938512643927501005155026506935147633372374420404721586024954639154623667052201176611644267963494496242235756869698010267798461212711691351854600877566666828328809417488188331264 +(85,1),-256352539748385002464287496389477853436760063392276635034410751662473782491537571854292961166047700125480 +(55,31),-63666254729673165827973568534722208471744568978939252553790892922033086809812601403303992863370121590043040666139936168406024697597284300738182978731840 +(15,71),7183933766150329865674295265028703449923114582237906732717674115130224214023180219264774275721233341890809933310267903473559804704698910964572118142562567442378137417661998985060595685899580160 +(48,38),-199824342895356160353772670629287311079574529610821988669125734242463497655115571963068110644079996658398090572955181169784486747275810444689554455449604777600 +(12,74),195230110526808579925365369861810385710922494404937983241724426154354715346817650700602377616058544262417066630802255239912653207219962574164422735443871457510099965778169059436305340 +(26,60),-25301591168282922377331429749817171423152014549049456694130514839829552397381477523768656433346903906579444668070401647175896386240955340077372002509645668028433970547587938642823555192 +(10,76),5224331958699592089573896840167760084762231343210205349509662099648185699424987688776067424143258974096309632546506386227901724125167629317853362087661050380979340189867860 +(5,81),985155062429086934735733249659446965250738954921497224381132376753527246351812259420374750274047365173155628096110814286948745080 +(27,59),-186700261579757885407031258623964459308186822133686443094824863715838924527811353932897222732625765124191152979228122550666666730039811693026183185030621606695738157418590393047364480 +(13,73),3079962390741847708832468517853816339921200125195688714537472380875206488651649766601542043991177110949113315126597480942830881581615447176811651459857436579221938875739449893828536976400 +(42,44),-17809131271887307234514900295777810761352568948855993467987477852678243137032210285758780279921086723419743114784694701736270345879394753565589892226673996502355320 +(66,20),-9638668813299933149111889791730492288031124244572487695054269638360424503287879860231754288140748577873623862299095831870840467776250082188 +(73,13),-432909744037130380522199581502362878677868414677855625534555000831003159874000248812481743429653359154006915268091924544752254760 +(83,3),-26703921264273294931470435097034144879300078500895934897157976885439290072267225979689544900223337168623192320 +(61,25),-18739362794026604685950315156414800054512034013020819829171527410873350145717987155884265829574739864891736545758118795482783704825744541596976224 +(24,62),-193548650051425156614909709022048631071138127734894485148147925199685999712840423248254105292750537099087643948414830333854431994351169671687118321242033717634727141496348349864510149200672 +(56,30),-6088877166556170502501598826237788581917795828928777024741601028000094170271504882874692997303323058001013371257725600195209030352788473611674349762296 +(77,9),-54712686800131454120002675203511136304006199095192071462686952616579167079434086223685169855972554959538758252511272316840 +(40,46),-702603182660024869847707161298356746743693991311758622670653424447944165975586039668729356957907714676179007414747379453603454422299480945060302056742411290955345920 +(14,72),10116445360156706268880384127705187767360989853577117278641001738732951665915539185375450732597731066982161721261494654791971878636489127646049689273150160391296748132553089406906236995494018 +(31,55),-175321477040362089925874162644335872942477114418345571353036696276129286810847297103343597520893816141493880811121641756566845281624190744449942415858822547399192273565935277248 +(84,2),-102712916857241885992667939863246517554608786679016661658246883709285707195655997705774907425911311845875000 +(71,15),-627030237497142275888145783716844478261436530715113502358125514425062001841653853710419131669147708287612486943060022323629445571200 +(74,12),-9721026646592686568826605509388906648518522682940832298225086202542705168369100618182420020890808383502015704733126275326688700 +(75,11),-195176419991212077517135974346805538306494138657857747870451316297090204454927704450454629507492036759166342400091064673667840 +(20,66),18552791004060801822919906569172959721674287507278034267554533639510663654966615787631837980211620389524691548381405327084069090218915403076695850888703291122315128413918513601335545263894883670440 +(6,80),85568867920678124315780805367141562637236834643149498720747913205032608462644311279931439873052038508103519690259328054741890999030456616942 +(67,19),-419603399257270120558621585580236554361237897256234018645146557267119593084844704012175244404739426990235680945692587261738118777684758080 +(79,7),-8883396367192146028812046231593246532479280196356783896261690328760432382464024436535149926015146587849290467973836800 +(23,63),7910615570203398824869082313189266078060684129570113774938632919728827878678752260367230206230690672968670409050753731795990015152459694523868225643428812816173274061405621902894816374994880 +(0,86),540 +(28,58),16839021792441869138127808597536427746393164418223173465136180314369886200986848950635441215879119745032021855872404199898291112243472517018131603965471581403266240462266733075579600 +(63,23),-71921911578661426674083756334148137388577680543084427543056421838865956077734755797541712667965241096579072372760299353746305424543810219022080 +(65,21),-203898658777704406350922312231513228210192943812853383918448562810099496578119129997358537051754264085663568480183745381619192786276533813640 +(64,22),-3981457999513055349297464118379267877773216699146114284550796901906667141429156988656133946463410655985997367724179824320106958684791398860480 +(69,17),-614806093350467594221431497869101482905545376913567806486996787885662080793922382604764524476792245495140850447457325841015854411620512 +(3,83),212870395812574484748355657159424060522638114344569725657823220328264375085035404182341327603036708800 +(60,26),-271412068342870410750988796318644017769836128477890138584338301192544260852495293468504983044096636563053186994180647948540485630148161797154337980 +(9,77),1736410464031442122714278756851681931184137788252332623764578732087945044927085191135593276388540999849151776661725312859763700063099589102623722219167072699138371000 +(18,68),224293538432890881301622935670559028826974596001187882702354030873578733604910943162856184111443136737828044525732814025235286331625275744702850420429507822255463648284841319077402927658658268194340 +(8,78),73196748727205946203806625561014544877610162968900415201798438900257198217069263710440908242209433610199494607295999811450790658684686802995268074305128679360 +(35,51),97930590682038633180424794648164427090127261494608054146618985759149312951172230735639745538860740027575565969396873432743042219025048591926552297232018469644641022251840 +(53,33),-5860819557644299314496599144613263142170848495008382806089983114399359612733176699156783492334720177448553647268016490404936915242075897504756657607714880 +(2,84),81272834576212364510828749293084494297197637286870985365409781275449576776574442500 +(46,40),-9851394189626012265550655814730338162680634272497960186189789989336456866235756373988767640904065659799829116147462115387200943366834048115173639621830555282082 +(38,48),-27637064104224523786197408466563180343137899177569409785720355953021093282999725431556984581245296525405862242700271627647587035552386212482675211188160564880910129580 +(86,0),-311532251331680023647499082956224529298840934442824924681718349323743657710469821657050876069044954468 +(4,82),208072768857843950279274425364302647302167453668442629911604881265950089263333409280601328132983283143674503014949736 +(47,39),-1425643173291517896838666713400321006235078641721337098877511440242095691514157196374920804364026696199045467405503840785888246883553385981233734645009793389760 +(30,56),11635599187754753568472257492594065744066227652172205807483457278929271594598306491886268756150608512210249960859162626627405911590184743248113274823798181138699266202285166752330 +(76,10),-3480902383595143416336744457852656933715005271088411098442414082955957788711128055674508253556974321774535867224624422691968 +(82,4),-5065376291401082211675035417443616485752242902854161382128700735011963381993286472130798725153586634028394226840 +(40,47),158779836529652093968175758780436714378352902884022809897641021799881059582802379622903570644018447417646035598686090618140084187046052045192899248687196589087820443840 +(59,28),1283091200735488292588984087892517789652550105109855510437747285282400570785650792620106081349994706544958608449848288262687641700487319201033134541365 +(26,61),-30887133375202368415847616879479126679164925847911864692220811607102919701385004248551759361231190596646762719625779631748361754286127460977558454800838613630416592983232317730540357183400 +(4,83),1182315076603168255076642236175125798145681421737824858016162152382678241956747336778642741923386064261492932796563200 +(33,54),-30809882665076648446745355684993075400287547194178806272550531492753288019032606251015266257761175221766814407387973422540274503036031795067620307590400353854242520854798066046 +(9,78),30330477863786318237339774058433310668406760189346169369163271965604503889209436756026695978422391454252176586264783392903622237184444066515521715806187295669685174820 +(70,17),13767952040352335819734594703185714148524718634678556285556879513350463748981087552434172550349147921548487232460939191155971905018223260 +(28,59),-1429526803001995179598548030238325214853326263943273385245363298508724024336822620381722888191484909345610566424696046894651537070687671556034387267159996937532858376605275297075606504 +(10,77),113351472680865094785977379237599996499032539470283739285453231176154182290630162496559866910223764749529700978150155804498790122390138379297210381110613457443939542846920800 +(54,33),179773114934106381369801567404380789019301483492171586315535801618209917954017194226406440854319346805429824148609164706210812669355236942959242202502975780 +(80,7),170633540834763603242127002382366546667782349796935767177373559421104596029428985089626042618256543259767926658660108280 +(79,8),14615447737718710579520136756109797654466787670413719666350547053599008571958863615206807490642815133455139275249761279165 +(25,62),1650179076142902118438602262898889132016878953822669406067338788951262298843392768187860766617566242024705034291530316072618838035565993778886065057984056374206937534759231887037610499534860 +(68,19),9737619204343015379604783509050618543821685885549005519661192724450629777908283198525294688927190462649879236301283261261147188366825053744 +(27,60),404817328621527194060564616035508127113267920937296461272440461005964228640520487153199437844191473898252323774034439542018075797170433989017218477377514104219833577380434560902297832163 +(31,56),-149179931574765540528352400947649873340944950976169107014518119514437893336563299189521752015245563244836335580863811399371563283875654060241714574823295862441182616970103592606725 +(1,86),40145975212838031764563061349736335668033096003465585216310 +(5,82),7116718220316444088663522891980549563368801550045886631571654550339084761282462393209013185906151968987575649965751613512081310730 +(71,16),452928691476139209157376574412002681505185189405160466274127540202998047045849396868763445773761257015485400098755280986687295231056260 +(74,13),9072475447809425309740540616083820063121681379805644039302812135192859867587417982040615882597940076794919331193776032296298690540 +(32,55),2869032657888253964774920041493995618373326302933928223878394366308221196599394762569754893641914247963878137698579572063202736447087667885888005623986504216965421974780561106216 +(58,29),15498811941287578945678782721699549559775386599006548041047108583722236916806852985314041488459766636731030748669344701712155869057820380148164319336792 +(0,87),540 +(73,14),369108351050580200544570557936819387887991640718089800682740977767177150603489756781198188467251960974793202901991452425638142540730 +(23,64),-3210332299866609400963110173350894340144069977406928029592521051390352795740274434694402915544726721548846537365849030879345794787945107314871729557802598874915247132158558181273710395530403219 +(86,1),4573776101107392076880925851875235247050841555972190089275416825406021852461831919705363185714260601358160 +(51,36),113946468109244292821219836390150147042368467581628626151699976112017402927307928572676269660767535933645060285394031691916568218011800459676841955614536243545 +(69,18),382459842225092599812744440256686761406957313836178126860874257309176067700674341340571168193415687779257867878915676577290442495996395690 +(14,73),548641309301933887876082942640098082188849918882178837354403222571070865663765899367860500474600829468231981410273616425640206951701659969249219749994144506136928282216029297228696247624048320 +(57,30),175777077966639514484749018686675016696603174682893001561711064195486297950185309560229080429191897093168633536872396339626436371920449758581330222757844 +(15,72),502518613704032568985842682998570457820029869855563128465495872398018124777649212278900222499379989968716257397127856714981224498169524339124028216804956205300096590116863704978981197373895175610 +(66,21),4911271070744840184380648396625102166615387789384027971791320510187738599860584488739200758861510973504792489456843613181641779915846252742100 +(11,76),65059130078777466319040612007878792924887859796168794358567969292471194252494961067470183522078413345589109905005148511930752357968306645494866213765727402102022287713932934718095 +(35,52),39170551339764231182313038758458486144844804209944897201682935428472502586959533403120614953302240825466492248136402116145746745395009857729513796611966758292336922694401945 +(64,23),1800646821023865720346390151639431649442610356847173112561933011159825741625785184491369035156280519010915486461096861386582509725752835609828360 +(42,45),4027299303505361543149880087261084018029653768898819411069001990313315556232856529481320218351304157569161411737568815799085199110285370711980335237154487569835454720 +(16,71),101994228950312638428567265019226070189593800417831547402310542989414718134882372967956639443505526508816668540250133363148939775628686305601804883784696616315309111210374177846390833608519636875240 +(38,49),5765070003016803325762916363176121142730274639521011948620938192117676916706731032071668227826239244499934417024143509414013881140807483427011870939439660511859573732760 +(55,32),18885107513090616189420852334674019564563566282749385859265411665270643975185994617920767153113038558430048597742916265769331694708012052910673262825946805 +(12,75),6602343153916525601663919752661659557915337134068913246451684250366983355281502325606484839194097168716714429628700302885503473706267304581155667101234072356604776541918552518376846328 +(17,70),4473977457122175471542433763565153696323662907755609484843847139786845744811434948295932321421396957914825117562456800694994813507708587866549541568392926518083721392603199170505175370255874225372554 +(77,10),69713691441395608536831721580018541415294716548731381149152154428947538883881241765261337596847867122579634605541179539593236 +(13,74),131259629076406735291291742652383112058099892463533845415994771202979050234198933614691627513922110736453470931668342938341695871571718548103672041484913639997840790819036664260773794702928 +(29,58),-130018203113474694907023156065243666434848668948052845943165154532538981159331815983585136091202887094995845872986610220227716795263713147278827740968284893543541510503864325941360190 +(53,34),1622533573099230704821255908932658575944919577635358674010300023629504658282735972502991177777064893496833372988920908758947326494126576568462367597448717910 +(6,81),776661822045711339151333025844801392246974473168013264333236328060951414652495929507974618346289317882164728550857158407940297185007625819520 +(84,3),487655577628403474848153547006380421323280634841645604292779041379243214820142618071003104886388658217901828520 +(2,85),265632807037403125683341793523051344029465818942082706992151326572056143021771886240 +(46,41),2313023111552837265382645783026412526689425187720474603914365077878049257286792063054513024680806824094592648488273489633209940441031054077802713935826893950691800 +(72,15),13572312273649680850455362892572572642465692342647344654024065293943596602468528012820419380251269732444006292634829211222277335702448 +(48,39),48558287839500029502103614181581298762305812093443868601808026416611499502793910338935436515115841055474052952563155144256083495525084597498539049615188354470308 +(7,80),3425236114028734112340341738928114682072923009213752654464514174521743770895183566352641140101471929121521879931882555990174088741368428296312991315340 +(19,68),58174369278208604868396166351007892003742411555078938065408037257782521986008021460194757082601151464378431018570465808984195379363294378667122768029271800193470912568457460699007235070848217948651830 +(83,4),93629091774941426182134000408767966723227947310086461867437173479525748642822752944300608868964428566600258076650 +(75,12),200583206031634665406388463032550068513579342176301293327026319605538399732377673043100892886408796017615418880044747950315829075 +(18,69),39277625158768820996757348104102358760208897917505533953535795558016545421925383421501859364413403733361815123418396129087292572479196778036574791005690411099612581296237587389900350309277080906053116 +(81,6),1692866373686147841958365770560833698295905631970595351887799191612117730397642200624124089359083351837359106555875910 +(61,26),7216448334239561745900717353278619466431155968790090159639944383085745513418059470763101540183856318883250815054616050487635972093719489746167038470 +(21,66),-31951327442340381714878785496823676968162336709649929975894268093955831640115002107104772027119821555242959704631101133931306076010336161580272408285573330276745767268251151749429872779248832180670 +(52,35),13923577026257532067604541754590848591984808844466159874112164330502404769707947528307695438426686788020949239197294873054538373046187709062970441289443116616 +(20,67),9459070922402132973880478346431213792507517667585956225219210574688307796255802498909658254370288314704317957794811904007835027770144275996172416896535890883811824713616763772917656027796100893136360 +(60,27),99518012218551036011639326612750867555543009239897779168108070417268676183400231569183632564192755931800614434765650407828108304243100221753700049940 +(78,9),1080185774897620556784817013626756887573246081990613706887981688364831373989416465477210645525043837921721161593141726238000 +(82,5),13987632216690408342149362563555966704127781030440844590769273995488733170824558928337421568946773557918236936955464 +(50,37),892142555148588865221365642475416630121788758043881963993677477201019515179808249767276421161648166613554889936064077138291644339002835248710502098494319149240 +(3,84),933127430473572109367230836419922710313994886775310433956096951499375067007698460853273735909188555197 +(37,50),73697913165121359020566331910346635105035663046805476852844285959167959011567048297024338879196256422213931528867497723552651002815106190065834448412126560103111583700372 +(62,25),488243217397841982330402104451905766299491676786875343087300808322217795895856915783977682418255032773159797636518657419323069058086870052393730524 +(56,31),1875974444025806431979192355630669953453844543142178401964771562175329494182325890486931532085035770617979080511972237297852979409479148688010178802784120 +(63,24),30758381035727122316477584618488270974409125937681185959001373468013715855757150001101296623412789047394287711701299366342751834580231225931792235 +(47,40),340090949932115074684403886853563474397485731757981197022838893694328815570251309745234584641588939491685988364738901294428430164594415769625337602652407456530279 +(41,46),25271130063750453153495206508178533262101717901430467739599454168232644239440349299437285550403209271433525970075635107236257617575352941505322505917588373207564772890 +(36,51),-1054614063321228688346587317163192017885292808539424302430240743686854841633915811944753047940447530660580938461095804434224391323813897792996428373688024264503227451528260 +(85,2),1853720949264225048111247848808749404660851852906268934993280832087710584653798976384240022202901059223959730 +(76,11),3966826646335969702964515492239108015950238456864600746648326890831221113686336860233858883715320393678107728392026530289696800 +(87,0),5496545691566321487347679553706333187411814266609302166375546253215971014459168087344994270775211815328 +(67,20),227840763003025431571721461358827650156157989133068520186884304186200936238439124218644821044511165356702116315110087437034015406754004205263 +(39,48),999977369469716415056977280297802359894661907958325493721158615057831237411079774324299255293543157122568283837109104279789922615271633162415797170651048203914347259065 +(24,63),-52267868744846087454774520387488926524816989285496941127479450115618557506623042732275366623429449586787687924891435297670228114257432381343491532071771622369347202672901417290157141262726840 +(44,43),99665618862865803313115581909645078836457055444370691222664972228915493911727244859232106447649001473762087139772810068814854576025457749801764359308733726772623520 +(49,38),6705498838781142347532489104346050604261733700068343125502958850399537748638353928009962531845771204507449244253414223667759158850917123051149639269916183437130 +(43,44),637124679102577836563093534382343029665126813048009215268947724053621050733921859576897272068307640140707650861041791691085563529705310626965124553654966781852866558 +(8,79),1030113312931796000821731691433988634494329094581733794117034263624803459643130344298417191938219988612110716367769900686630331260278523370275902800977257812208 +(30,57),5588409748545904398081397231412875693624718989049861110798867059772573173446285096482511707140939098938379620880972728615462271003184054437649615293389424731417792340193452730996120 +(65,22),97755879959807437971888528183204292742152909469372961998934737762321017969473558356935706576334561979829646507503138867157120576914842085243940 +(34,53),-420919602889585631643933878610404390614299567174298101680521197707390778330176665531810904434606825398529362214552244157920229534408829794695888106763375744435503726246620160 +(22,65),753929962955542174800377274531027690757929055224050620561083802329614509977881574648154879557108127259482659416365810617642328602277984292510255583666429348551453639388757956752501324796267262560 +(45,42),15341128234243412526758668492187285322030766401102928247679030683155596458360989023740623176808931270292830865939774825335354419791283267773806726757969087494455650 +(22,66),260792059285386396015706523185552495205418677101127833773211014606257583787673726058251834052923201312010804587690148682534269471726129060579360637076559670130646031494134202791092950378629616397728 +(35,53),-2741601832568067731402500296399156052458860488798722401373196381064799249563287546030617321174202143166480344679678171755905301122475288194109040429245639871696891870776963840 +(33,55),-41642728742887466173863622477659935320980135366966045215342243857185508522362922834558379882843188505511921040791018158170540022862138754945297386958277397860949456534962530957008 +(21,67),25054762911256746902247054369533469660832538021907476632900414518479399334042477017288460495081369798901930075546422415958673886621643239657443136093786590046194197348352444960209030132979463163892000 +(64,24),-781675704899443686664200510808647726885161699198791513027290192287686931311847590779723719012201457959329402087431788094446931599752291706651476800 +(20,68),3985454735785568329845448770990002944925442452348189463329807484216382217493683920945867264986304598777304579228006070349939110588432042574542846402846340005565703217503755754362394520484577645736690800 +(58,30),-5042142045101508789175473855930029944230232933525490469418927925303909731099225616163684697016569801020241824373829664778329414281681775148562461881216768 +(68,20),-5366050020451582745066621899160101397736121961187662832125469691784434521846673578310725683008823638129230515179018918677353391982906789719144 +(12,76),216514205596672384564263542003263445560134231142277932832183878460765667810968487347094219794002411278654021935899405363458659282388390723961888388565775156220552342358101111609654279616 +(27,61),334468238131274808767760939801473024703255200958401713182475636166137934555751755685982121715259785252548472397406412386548320527430136276931753346812350139032760567769702555338274800759424 +(65,23),-44876702149939677363888885589245830820335504379885944810432618584019818506998020425737263512903778741018647378266536486390170226411611861890084160 +(38,50),-1889491319941097503026771253250613137082271283431694245318812514215391620021925364182140739345691090643001122782015887717298200660711151224831474345271412836488261294300416 +(14,74),28617054992402185980294196398256052470513538501894798772223574842387572850971734792919930928842938705090181706876280554457799928152836087593829691549566875328790650112096610152733195085434108800 +(44,44),-22751009831944779369140107997322738324762721841902423788801070921198428659154450302011204860569862791587086441092503597962583717397837860184197129949722654468363539000 +(77,11),-80512964274175574440673431159280951301722820488519493475661022804720729606766888723233517486276511926630736871034418275702377600 +(25,63),289024326885943696845120232969878418562170740382739742518473495138238742828169276331559764588936011524299188703296123590001723812905922972424920590248999713737014694825953426173556982054093040 +(13,75),5404041641126228116681113580229110485268844889711975775179942742581042843254533218351896939520514123860492914698817503348662574283604766512087429973292901180321726394238992912000426341700800 +(10,78),2399689701197286134170701522490036483547892659611029355266318660387052107796129636698672260572928835190753233569153889469486829012369339743851795783100055151138849336048972480 +(61,27),-2685435533019861726807707314387575823869819281935914024735917069034689825139741356228942183036443710004890815238832346421036440516491374392358037156320 +(8,80),14217159213423077364077755776039324615179960146130996412630493095087418610833703187934366359274187043351934265761375035740348200634115172286745009930408931565376 +(80,8),-284342771442193749383805567875290932775728991537925879008004977485106386337081843602303896984621588619756685292988623518320 +(51,37),-29268873137634032501628125357393122347991060894986723470135807663166844663613753778288301318198053956632067625445778574830750817783229923141826510198790204249280 +(53,35),-440789045239451405927013446741956581970573104824665001679469862887345511700583423978449239577682588362520085380927377101717970918556125988810746549203698137120 +(76,12),-4132272756203340109064288546391757666693237014075452484790104198329847963148178394381914406573020049969097057449253088386814800320 +(84,4),-1730467587072925451855708499164923381724333730215809081039682977097640844828491600851592102966682189049097725356680 +(5,83),50742800073658676447238573129006849541461704172677879790749332435883756026812611970073515967462381711740300860754409464795406892640 +(4,84),6643978312451573344732436940517621546547833726732700801898561169026578503687269481839655372871766600709796919379704000 +(36,52),-379708440080274805622361233978295650829747081313515391814546310584646904440633803515420454477799124995875002883040245142465701006864137085665389249937681674332983015578116040 +(3,85),4053220812229228025254823560154877281295065972623302598950635658388602578855706313277974522130597157888 +(6,82),6943622196044952221708590120681684142931477156662486493731292709229477111938862026910971686646667508411718924792731985246925432663190090927360 +(78,10),-1394573679981581058060532346482216274697448811882315874597249296562762427994857237052718005042944662679478797292908953971705856 +(29,59),55920174080883205711829839775413064288674328371678471571252551395649339444225272835350274354666442923022101493776701946139238830439128440668900701535483050094345629122883852761708351200 +(83,5),-261721032644272303996899566664453158072711810379046969270895162866061789322363005691619953784924156397807670334750368 +(69,19),-225216569769556627909020315109084092026850918203973884895784362080159166345732558881849063321542455817681688253479473780992613858966778995200 +(16,72),8908805910393845768740184408857429815938849927474418946965194321365900564820133281725257282983744221710957256019507291492878599780410725521533967567527771815396600539913119944312985759251368923723000 +(23,65),-5163107937116918117149123859588023763902319168956341079604906775081429984486347016006442792265646920430293184107699938304096708899037199639054418149766562867977354082965143172107674566608972616512 +(71,17),-307450677462111608948650043860673485883262388149341515396147576668535468221412164135971093645593934625477535453424680328469162948615271680 +(55,33),-5477088467640099444732313139535569156886085916560555633009979529591015254491206216411661958574092398647437507422671310831389836520014981591267444154989705280 +(79,9),-21305521666769590968083559024999037327009605575663573243928001370670231270000776716440815341206253727626276415042772342512640 +(32,56),1784552693222617402226363605628680254452155239462675413520203058610795944623235070248778397010464240600990615813397948415103247498977401920299403278235438752815577222208721508556768 +(88,0),-97020306265504245672107589749146851160173699599701995759834867448324797050174582893653066638125498134528 +(70,18),-8690128348272447828464572748262544671242401425533619180228766965587205564915814149228543362799331937575779986947230033329513914127714887680 +(85,3),-8905695272166251541542379247410355912618591644039155178924092858246455401659038919703750787958427681447304983360 +(54,34),-50403504512682893181106267350795616182322567251326660583483372858489518648274153444784225866981390804149768327368299173929903800331337465083111774677616220160 +(59,29),-435608313415233446683998937104724188851669415690389961022528864747353158160476912090889478976829820882497712814313509196136200778460899936370708592169440 +(72,16),-9944379426233368178837726391066177254361157357581565989357864807302834797411878115743135597397255749770524750955056676310296204226293760 +(26,62),-14148559624432849037292326651747616105102292268151615049093764631246551017263626648901919301881462676831295964595617250767668415766236279607173100128421509487019219260876773436829740199388160 +(49,39),-1644462601919365692879184373154928387636896986550425312125152720961462115948341675581672453819014568417507708166075662637322076668296099697873926428084116363748240 +(7,81),38123199378093157896339122650903728566220664697523871694638252105415962457569692699104243081676587505901527209016320616268852482574948577130477115395840 +(18,70),6382531088354425821836388874324830050137800205799973784893879636943546651605362081360247799405781368201656325366811219503370872398992209418423234592377635712413555848073967247839439067720933618151311200 +(60,28),-35334438467547637162175774605065263988764272475493121488024434940626192838880883930828178766287299824639788312023839736615669396003760669553964123171520 +(19,69),14041794493219575083165927532170648263037092965765359154065600597145841717819057561569738036684024364688178075973210106994585857837244510875768342399349632860065217783964066288519804807669986208664303840 +(86,2),-33461061905968658295304169127456488800301057955327223274091347301836390871517519352130031791461611921409310720 +(75,13),-189787301350095344139728043747813958377795508668628836229770730082296599378501768732485906003367927603696847876814547686957758092480 +(63,25),-12655765898314886177757658781683319570426957587559957330908872072297107823837842124490585897757289139006592862002929396157230056762493660423046448960 +(43,45),-144464380128187510346147818409674525614645691953652616004476425025117758996419707281104346537153264291591328885540450960674468910581561900984048350856375946732678878272 +(9,79),518306029146787423382187965387034191217941110848231560805127384336305159718387812399543150788630431501428648445978063166201380971486317522655057860079613651325885218560 +(50,38),-223638468415235770897591674663954672938638750479448577158182085652559717534439788510102290675058421492962072342891157863855272681720408100163886736696039913390080 +(30,58),650106755502300620619479857513679343934884678362317024870281213076171613616897833800611704223696879205426190753155961511444162373501340659481192193764042877519364525852916634475365120 +(87,1),-81629038432353574959011842957178483763547331083998914023699426385071780692928239139589861603596889780092800 +(41,47),-5697999847046580021492619462314845497076381971943354788726254566747217131122794751416889231372179010585996413118388724034490792333377617124028325594975116028474560526960 +(34,54),659119191371151507109586478656386691487464410641429332360261632929629804047205271250338455453531963335074109324906752125535194456369445559796219201146391607465388552098642927360 +(52,36),-3673704248299228192030481438853370447500153767327998435756493939310040871388510337380020946507418275784923392432880031996627421033605085193113247851018814396960 +(1,87),90630639448533951238195117045946845642795291290037747967760 +(62,26),-190838419493010145778584979611329144977893090261443989544395431204576343432433255947340198675933089271534424535892359281850210141512743647434228254720 +(66,22),-2389997274095053056138090355492460771606341406903011380760101031874323034082524227164976199178957949853036787309318145878625586097274579770431040 +(82,6),-32078014277137263679245041548363109252510318045937065170775427026687251090939772241301609023314504269721178186994444800 +(37,51),5879965974253925132366788073071893546768521407135637274367070629669491290698622156385609031172688931338171591103417549105271388019772403711222966864512670994968104844451200 +(74,14),-7843667124763639319170103679176944187587185578951676304649684654636418374205946333468995851124565958002882730603455543388472645558720 +(24,64),28228266159250203092206674431226475783680075667081335262569490961195143721411995622526314214515494185026170516424350722404819434324890120701041945168394997411810132053565428898556053177791404800 +(73,15),-293103630106087922495222141667516966301167365019284932578803319859676486989395606369284952083980277374725880758666890777961488945366112 +(56,32),-564064472726559643312559784436319624048830659518662014342432006105252807987314741144518040319611879602513492210296810395395731048438393245462075590153237440 +(0,88),540 +(15,73),33625684160499852996358758178438846337955639221647305004644792714042801776478979735565561463703571804261123553434608313137175691348366852969975121249934179730416539708782329551192479422726994609280 +(11,77),1710484835486933775139280063338082921046034191512788436307977129753786600099297067074723005385021540166610765430413452848509736265466423836363376376703809558014474380518136256120560 +(42,46),-908918956330639448887514805331684683560859297331684303603013469131402839694524923355208191022823404456137739095338282118954135171731041205826825349395175666678923617216 +(81,7),-3275615465256583657350831649372700333882935214159843127645346638641169045128177430444884633079783443236186978728419501280 +(47,41),-80431574234452756568847029027176086980766187454782617145107354534848118701151228855932467171016142157752099060186656386070924572629318854890657570872469636276896960 +(40,48),-35847710768263508616720233581581154183266553209687847127419550248736947352108422178639805208414632186426703547239256474720106169812616566687631448867667862597559455652640 +(2,86),862077125464609972632113758503920108526390395904863214247315901031713071830217876512 +(67,21),-117829884249326001369069344965316222794394166337337025258976520227624443180187236123559905443969251159114222488363152253824718558722868493341600 +(57,31),-54915767990149664319327307216807574068249449088860932168102646119058769078831349892535011653445457068679106060228060712310945919628876800252524452326637600 +(17,71),522967871811151142965958798725254874184244762326430691537623243147604473097991562473070209260238466881572797324556576165725171529386918564695878710239290077205409341714138949229849996569802917080000992 +(48,40),-11679539121175414427091376735466415585891904154348372291535725869933338029511150886017265951459707145358570202914950615458202966328435625364810316947268437639436916 +(45,43),-3534614383950334203435942231928283745208182629191134442151642961478873491287357572309413232660803449333776305913197276082316411620454315280763417778881398178091973600 +(28,60),-5690069278339618142176796882936901040447078500777883754273818207811684141639100230064215120367586739257947849630215132961984138773713815792824629092387992238948556619513395722487501684032 +(39,49),-215631288047739994272756562779558773450386924857131724599710866908245378351611656518973083898858381521016783183924673965738100567874562263317596199618727976965384109889600 +(46,42),-539244687073316459795656560041232458548002112552525421294760350085365087016618901152684680427617231151834232385873728409139473958916781173872723802400813328599070720 +(31,57),-53928014273036261885463495721727536629847814969169504340034759129754516629078272925974427009821574778567690648347754576987445837123385601060109925077203595724161350865368376051827840 +(19,70),3090049458186450888754304662152268176304439954377081881948006941011082919784354985809836811399708475825180078787242825557201892561543840217950075908214654682537591096933587320747375253551658373699987176334 +(49,40),398935480631521604828655791887948674977869456300687866802337851564904780580857037597433008408331622978647937511278506847032333305678822960585826468191642983718108237 +(4,85),36931070002468268764632418972279929342954191573209233901233274593026733762160788611343952009430955596646162470912329176 +(41,48),1286216643928282326190605670873598376946105637645657881214202703871293123787020664070174653856445385436435655598672861018114044315631186914024008560506812827058773832727155 +(51,38),7412409489968809787843257577265033583060942430174191881708322784340752187970468487915809897928677981696968533490193620233141577619327539463186185817911525980533902 +(77,12),84998883542893033260604028411610122058596788095793563644326302331273711325307176936894502174230334685866017150303264032097455069650 +(3,86),17448824653725453062383431704279527262814741077890621985187051622996624761747239294650077261685062466770 +(60,29),12169410159383461257462378502199471245090773875850061445501625962925920001210988834912409275210990765448571470547969050693722296096955563542863314102966780 +(15,74),2155592664843966129350143568765780993091799500468338392888768045826803413055955406727939234792179077593315359343709048712060105402678098477902008552788677696056376632393477996295556108619008015443800 +(23,66),-2288085254062860626210136106572598545765074472560429930041918096394950968179519811888122362699191409084204353635081603591151064642676423757793467261174084111789760369366909086815274520564740349902360 +(87,2),604100722250630669948484767460598533081210035118584400432120885207816009571535329971403830930360551481272147940 +(33,56),-19778870179817037435208404157256661120479862864153460951147398192163828582743226005207954274009277515326840253914654788562349436789064212077206048560665782955426526430714885003716265 +(5,84),357190788499289870656972478383950968936602195331451325426716468910485174762534564845846220246618050811974577891900765647849862320490 +(45,44),810477457173771968895055494964868074787006200875890824728760842776949792125371703712186590200752029652311406953923378066828363068310491739176733223502579968323121619540 +(63,26),5020118779115638156870139994178307147129157522243667807708894305525874666739122580564377282459348864865366425047036493074391449256651560450448893486330 +(56,33),165757390734150108735504457305138778119366742110494707535775491502806477000177161364542492957825158531086392202323418452092126454526610314231218850897928273060 +(8,81),192513198588995090893848033549064594904641270227056075811992395201008443019529975197464018013185314013393485296530862004947979132223870616489842029252674400804500 +(55,34),1555267037027634835071116509893235184594695041782681329382135776512919178318088337168266969458050490662581369426515454207832564824890534165005671593915651020620 +(75,14),166347961221773686721378182795534427026304562641192417026391234569868923863552659577864148438158270407271261964627563949694400184691040 +(72,17),6846826369243306474745399924100534174405832187194691158763089667003623703910349273365969337398435933524334788928881893423306847806875668040 +(0,89),540 +(62,27),72063728210014014490900681588250825277256759258114301827896033701964708047562668981199453880169761400558009228880300313856112351288354605329925392610880 +(74,15),6315635372671872720786626240183775966381469563328431441541179958013420863958913342964016575694194824891132700514603539490819937676573272 +(81,8),5527717489724382404299114521734910420208620798246283725028159326559569808126601047438170080693873268340026521691743086156278 +(38,51),170872334238200691396708376528293038252173498119738737983110047847700916201471596080808406513286478504690110848025750284880441574897926566137709204104082007712729409187083880 +(57,32),16737084627005252510936436891901291856334911241521417129520893461694453911482358026975888284331436033887136412902848103724107807253749355499486308212291720065 +(13,76),215144345613255186606758460741642111912319388170216431144293246261530441039513476536080134395055576885459781404624874743394290012258527802627464889588315979694533439679286591887089605301458425 +(2,87),2778390878634762021376150550764302721813704625154389618026660258632217517858991831040 +(1,88),203655872604250308426425480715577990453035591435468406151595 +(42,47),204997560742509995864437791503545741897860946174162747325018222266349070999129281406270131173598774134288348754138100327647515356600941442594890861858323782273791950719600 +(14,75),1437317216773989154558349499617771055859409005329756369415866403634652855715053064468789141337265552654204586654396018666634385779204365112976148648508505293435277524670344702632761936597460877184 +(21,68),38308565035492907287286677223482239404689540366093105341292046110396741487794485107713987769715936822798445862639455520434608354032228629873615971506531740531978851622509188661357235116468056023113781761 +(83,6),607594374147538508768597369633086543392969262914085725766498195205790839458231669136387938487231601168522727972671209250 +(59,30),143731343139203051247020125177078196683386701782283649084377991622322333150371677875418334571930256125025727017290304571005423510268492544486339905954268964 +(24,65),38458713568223499119154073312381101932298782325286344377882202654823791199373662506407446613020432041788832453964312940234742128260680143624644558599364708667285878681084935601164676537583738563596 +(37,52),3816699947510400277183399632195081335146756128300545326375983236908199003797764261089113560442527107517110021041310751339900303638424510072816836184750801886584421272295240965 +(88,1),1457283034623173143587349981909910973544404384702673788134456633990435534793399428508371731693689259968113280 +(78,11),1631963255896305718986934458502224256629685082793706299552203595083792226005653962165103625671661283136685517237830445921484941960 +(47,42),18875955026957495869072071674364121611054209745620708238401046840430933058267705534076396478877245760299513242114225864301763313063137393291563827247577834572704321840 +(32,57),442055561147682452856798742947938459094252121214210519316647600217917361923859966233011606596618891757016382889564886349162983702623189818060150729267578208816412259147841539367058860 +(82,7),62845018589024041437476867901206219615061015810700764942865823282365475434927894179735957335742756076988798688375185984280 +(58,31),1597246199375614295021491126394794685010660586822582461076786341771587794420324095898187093700228233979910010672282246787030278589795826617155925819206738160 +(73,16),217793814756865708104808686255242563916664302117665173019921646507308660490841762486941858777137229487779797578432493197834192926322967200 +(22,67),-116603147768022437195779618880084990111178714626341586005737404546205836314300182713447363766159519589616981196824361403179485137515867214076303320884948065858393046401452640555110792234569401821644480 +(65,24),19771562370805907438995847282823220758454405547054581027324666621458238082927739302336017967042609746844572772728562843911686934419220980072571510950 +(30,59),-1071633565111741484683945936639904466935299308850969760299907530701598478780104553782133258292379245106205886572226430154546752250274420363247705439828956491969906684124807241794207346160 +(46,43),124936626594203814105692359055049167064414709619258589350611958139970331917908745824489857745246267628999229932148915398854888874550826298964022323376378530958197410944 +(43,46),32680814969646410737845101163901627613449828104947838889117628474886728060422618856838106668895639790571396601094562854656453669088572911531336447483952932963342820502400 +(80,9),419835993634934494449431714832099698341157085534127355054098792879473451218782377027867343258644707424956480268849870269364380 +(66,23),1113499695542565773184039646031011560689109350564135027869961395218648642321423461200659571076437985545937000291030888890835406900838662939600064320 +(54,35),13860964184644463821331030161333430791921660405020890334764131096776469715305221030513156933032224872248843647248661560216626080649175552982519181696072834431128 +(20,69),1442039092040804191356190072040068688757506567209116562473216374986158332049516776634031181575021645388649092013565496226063953830958178007607859293513456635080220130131999633590798524003845899813649438920 +(76,13),3963163716641481214977713125090574054826050889860991177394344104713612164901662885366099610180947949499883713344971106463364945924300 +(53,36),117659236255592625833589699470897992921061297467409139807152024917869943441108884035941159858631943738453967914431065044507372372058641157535616533661488775737865 +(70,19),5191836631631912118189317074781059617250164051947799730709239726631146021654587312880973251160364322326435465980676821738962731201596826396600 +(9,80),8669421904574229118049545161550360511805007155999815651256935357908076341728320675213931429443096844578575002759274606654310566705164610172205123281234155618692747912219 +(40,49),7913100793262402938198234451513010930904402120215777657131165501624656961419531660565038558738636066529393504064772098322255623719669704591431031569473185718906528983822440 +(7,82),417215976340755253941365698298105881233901892715064509482826733145839174284605781607436446206606484705609245874287643777500549494319872618223360259468230 +(86,3),162644178026573579035942406294036744360124349507278379460305084849584161946243196567529610392307293748411008967600 +(61,28),967424427155678349972391330783339548667213313469025775912234163272087270176433845557223529946686063044943364054633425427229413449601948896893335518956950 +(27,62),115403094493884001720528203763856674785328311653710681326098492663987509440051237288206786146415971056232495780410118892409102042435775108167835572116000831244021484835134763105351981266456140 +(52,37),954039808745201864592728440777538061931216217306694387209546317789701998966313195754180014565303169422718302941929704088340131006032398123766150547888931982026600 +(25,64),-321120714825914040764834815469675729113903310432022486532197254481273902785615014326281207129668190302054334338142826333316227750115829609113563498488848689257635653344431689823890248065761720010 +(69,20),125930101487148635520367512091701571270373078973720871914959486668987632815457851133134960980972502966586182980191263525600512014469764358116498 +(67,22),58190829305847342161885900119808278008084408256719066620442958008312478001383432169494955991582529725076142932503923713197555295417783166370053430 +(17,72),57690791311771041033853950975971073940562928803952673313579399501998887039158898884156778396257674290129613911237515633378651921937244221756686846406314442229813509323327146617268491733485641388940091100 +(10,79),49598447382167582092100556886064747272803966510693419218622235792499208310716121057677227507586996248075796066777075301475405628243512917332182811349076352921120895119897464320 +(71,18),196860484263776169387212069160762247172850809411578293044223176501788271298001535784693561003748881880212862342633062395361247379504789906652 +(12,77),6890708923353648014406944988038816902719416333702037829451851163029699106395714352822773897784224459245440410668150276312587237528473544113287725020482046941768343896224434997039491151940 +(68,21),2816078894911586044501959649480791042097465128028711941543228380307770202135041156741432537484571591849991605899567862237408687854890648337517680 +(34,55),555118942817569198453579958526428077961938379674742711765508510740270548621944302455123252616989010086681638131365559571886849126127030342271919745383960078869941378303045191355808 +(35,54),-11073954345658081660579659391236238208440621267680411209335152160786589160212559513346294910457322485678948106140726271968600861105332170560788439219671132927077642140770759080080 +(48,41),2783344638379445252997574040494251893992035741949250113773691559891988919972637850628271072083621435094857642062487266005208060612669095769292870168318370961939484560 +(89,0),1713235999391614102880730381162717678886797662734531861407626852651164264913005925610407881627228747051443 +(85,4),31979432546433276155362573504020783815620630203425652900726544776160436663910480709672582568710910116216883809520925 +(18,71),966533248047530694287241054868419703359120947552753728095916065106057778152833245718136923108409947423647017380073274281282373505322961007188193205939087899815598324607332343506555200094920222851075492200 +(84,5),4895790915755919645328596127594140010782020746475140061624012603167784964701948109321060388680573438526674860157758880 +(11,78),43781484927261392789063935724739079097935699871085683098493352023467131878602499705051876694787178776248547138599397312519525418746199655501691105801822371487201968504269589162778572 +(28,61),-3516034857141829556196184919395362322374913650221309543845864286298996359045604975739469086193535983786205806282582676624874113313111046471846736341091538350962923300130156235140522617317600 +(39,50),56746714959250507675757256211714215767129121524236819194831558222806891561713874775477915121552221454794324761641026838446664714059980609525782174802506242881340626996743998 +(31,58),3437121591982174463609366158553470499056505081138008549859863681160661718515710102278637662737371929429361659241501775203975030887945838994317668241655239845945799001194334769733083014 +(36,53),141815198916054971633612881756578537597308214457351305578858978662675528128728106914883179835920771107361464502078408507263869823931483813984729792219913431750057637944977354044 +(29,60),73998758364181267805054098868351645273462746501183810135791265614715753034734386120136577210095250423855463624639714431004952420051966023211478063879175253661016643768587494382883627635291 +(6,83),61166225471016344371259013107932586016968165894116381050028853947192535562224677034700531166368889134307057095379940606941502038723523442639456 +(64,25),326413266813129805666593978127671527358629379426349416084246167762000483116299303181543539392735216423061090189477345112632769902969378896489605380756 +(50,39),55364751966714363746856265434123140783985348495456655178342772654829465892075921029904470012951684012142348062899256141701745992746586935083326436470612492621769920 +(26,63),-652780417274467454407431204118437500553962318046082264198307085250077645045940253056333787692420021459549370102264834091573528768426194549226582639602473962516323698616199102241659557182912896 +(16,73),740709534043536239141443462430487937907576529776646395447201602500959634772152985904047083871922275445921111698496326931477115146484914163107629622464498867529177524198246824423934823914066177918810320 +(44,45),5175699508959147651847403955534124435151212912805021295251828155849911757213249796034874202896455930235926605300584892743702436364592126639620526208736524879521562154732 +(79,10),27866009514003740423069606211057494887389012672033867057312228307170065938810762893335882798789396740497519550118648953632930366 +(76,14),-3521043973842283129402706585052016995709159673519455633912760015897257342301176123339866231926542801927205208372762919217164775229668400 +(47,43),-4399684839281868959934974619777980469794279467190105117327065815254636290001602511116545917479658238871133355054865806484611611973870702451418082646911812258954969590080 +(37,53),-3257854429353893500150653188903591332388187395764366694923972626147041350121794001990187187409115156837097769610695922844180265160986809038958541185721235246393844445441618342520 +(43,47),-7381533025715499610993572457299586713280077504806418172119699110177255550643069941462075278030006681872750677696053658239589956636560206586197187633805940561052894438248960 +(50,40),-13550451567062129223207832107889080577710198123259531419262282300942400877521873889241664261251965643676964052561859592693806821756970484537482187556485867120930741210 +(70,20),-2945079278562148768620184223757838945442882168273646796726565029961165586931746890551975131102208611334267812514551228583154746278295695405607260 +(85,5),-91558674210260277145488771855081918447487849510079308179732304359585027087042563329728053056038741014160771720639390000 +(59,31),-46164042007781509855745029982977242878902613451585263184215791545300212018112523793618034097549056205205361497088118839738106509960196907538157929315740173440 +(40,50),-1887695774918740229297753046825685104739567010148568438563530423496648922383580589697926235796464524689053512748090889646909377191464765862691264191512283451140018399779064000 +(3,87),74457675083717885052865553433090839025345709039197822631162302094127988447564942896730918845118448813800 +(29,61),35162305878497859556334344992439176123810624983292349260093760425425081389326343754291086838581418125404248054159438199810197935295855639811105533093161313882286881881779277300864745590532400 +(35,55),-6867748900502464495491134542849954998338551965620155185451531021208773358300135484078221717175810252982064069280849781071893480168013466844541916984308426065039778275411801383829760 +(12,78),212993835050831930184016867439200414057113270605371794433536464527339161730709509098211787365469005951000784418072524518151793149578830952422698967168563354868963446106273616407939670355640 +(9,81),142003632208997133380418705266118629891106417134312164076537931172909196127986643970169760066065108516212365312568664740070671867235971791895327160413823169325926405256680 +(7,83),4491150531859946302732336951812674977941395574779101145050158901216636384431656991447046113562522778921840373317042564450115288380355823786586443538443200 +(10,80),1001404850868659710410528418164225619462303975932129531557320939052256320958650654199844749360145098676848026379041829788864082388142518065313844366658304444476305493254508862830 +(42,48),-46257337518761551941432520175017258426393537656651641696114567209133337808097118225859614839825325727249040871959930771784977680397497228081057969943411076454106277407796510 +(28,62),-814438247205481759653135923221002708099423975013497781657716918004098840252163983079599328869562671221299845291039306179118234045712408232191992464319246516864984777696875657869912014566694480 +(33,57),-2342899682322560554433618435338063152260075875708260368502155623524856275707752300952222714258384360537679367307114069718170870649367594740340822080068310444489847197739963415106196920 +(11,79),1091709971810858762934008020006005855348218063788753796849904435100735811034648225815304526136494777054535010233489450702004401754998101650846438970635822910993675922892151370423209920 +(53,37),-30896508198452322076332186872230614141967915649652079505945682463279730731269582814298775761122458184949383172103789524423848614352507219163153820410013629520782640 +(75,15),-135789717484482202128416955217881284919312196559736900975095916424233053939372012618999358512113322836938998931277627393381507229703251760 +(64,26),-131378531296668398743194698057259712225833868572338938316452851224770304375847215660252853329507280534480073477767420582030576932993178224308486368367620 +(65,25),-8377780574358565150722375189676899010101780372010835061218973912794156212852553415854736760691244467077005065038392200695384705296164363409508898749080 +(23,67),422160917386501309023968613769057904257881338726625866553924748154489178021621496748912430204915347482845060711081248836695536912147039562552110439671949550732592684972766352868327355912900299962852800 +(77,13),-82617150073900187525033668841972776265822391669753659295999647881897932278522205084431128848696362223126655894053512007526979455754880 +(69,21),-67051139618405969987658774334850680421248465085421839759901665128263554615019481978500319979447872731621873151747057116768804454542340710804360000 +(68,22),-1411111914693218714766393355809010145094165216685815849896793080488140738487884499660701539341540832292865462984543650760044724153232049407508473280 +(78,12),-1745759720015967062650454180633939855785391289035033505136300791291533848999374281892249925298269814322983087663725023767837856995700 +(88,2),-10908160895154094103556985826786914749016374322562140218953419434687592813892262379122814090447468495923700279980 +(86,4),-590926806428885531426553007284333966590483608178204030720555758889480872722941341009102526154000265139869866422685540 +(66,24),-497804802410594288055328111015099670134189592376819850993200410583405502311068313456831001753706077087680654949065473000809842850080696438904573200300 +(57,33),-4983515656841914459930462672723431821588146425037854036055941770728895806622023982087188530115188836773721911562834623771516257748245543118048569749500355404920 +(14,76),69591961201751878894479744934174731670573842214287357813828050357386814475418991002849161636712069409850941670038487791519719110512221124654289906098865160516176869015993279500201041073439431979100 +(51,39),-1852867494587092233072290619922829549696047384580192447265135057566709730783476352803548253265302898669987355859433649953816460178496015052557736503365201211569847680 +(39,51),-10245040757130596076115872397273428093343090197788060780601675968696829667004621106323388657218629597747736305676341496270836185251764997445609479018402590063645753778810530680 +(24,66),17387966833827663287382018320258543469825901208754592114432269537454439456858153422009283839482223761636367048192740939956442567873180877732857704034995252411915354661162609094607888949563352959107260 +(36,54),163038463395411390648261468022498476636847921997789610415277483377295784077247912179952018643909661398414069977544026563622644732595220410907572402683165170806725965787366725950000 +(1,89),455556127766688863635722073570645706231040247378975757186640 +(25,65),-324184714317479276751553922949656164671263112946697276254849767224145063345864783080869324489951226553853326686252318856297163099476294937645792922694759485681614331411881020012923989176563702565960 +(2,88),8893577208369805157030527268168220301118215576438880204371208528793228209933125732170 +(34,56),197967332583860996537843761001000372504400348816230575227263802723247423591494270199884915275746692239543525793006044768414512333607181722103604391409888218842433728473500329789814850 +(4,86),203101492558786358827682983799851610725419317552199914868981261539813958507018820350099843629999045462137763156090970240 +(5,85),2482934719328599032439734714746415217514008307804651558167207979912280592378969899219377804874940366363345055660674660204412747453400 +(71,19),-119303370701318943247880618905035348940382720238516700767151487859628053334967618778188571025919448498117256181547113429398462978522311941592960 +(87,3),-2970467903202678481004973266578795497383801035185179100341558361979920427188391902666023174056168908600447222102240 +(19,71),624302030939631447539560483755608026250358344936602326927957688717101395973153648187098143014458037034859036843150039319289122948628749014275675842098755060964875981360480932348975330999886805562047659041920 +(83,7),-1205047878559397584821410016774128255978725569608322159563639978025390409365504682280120612472657406091548061656969254259200 +(74,16),-4758410286465314975375015735736326109483238144045524909284153986012372152915992532203258531082941391227790862547593950910034677109249907900 +(67,23),-27509708727190485819033102669809145596021447037130558329061099181172148788604991040868740107027006364633270860941879923152923642747701700419093789120 +(0,90),540 +(17,73),6020993180788555906864088340878455664707212903518718506905641723943410059120544567408829601510419882286128523759090364355271024481317193183924083597097432734478315850678546643589455704598810646800014229880 +(89,1),-26023735442849760979548379704420399683810553539482925900675231070374387476146510626148077946552609195055295400 +(60,30),-4072180039520051133340327570018745969910143682464989336453940678671615236797829604357272703611841358719711986929845135609665791788429883406058580636279058900 +(79,11),-33036312919297763711274209398981285234679051502947249935210042674953868137668519528772256318438099895584955898815660620603885213120 +(56,34),-47671596520945139625200510519345290867064032692353283686154793243924436626671149463841969245865026416911002242750579317838501421631122833089350274878880819847700 +(45,45),-185088710041410925396012843903029181099063186216897896574609052625614360867863960609346905421644132734349784204364144758270327711549783470038235438251826567288101805643160 +(55,35),-432973635363738304445744161432932989535142058598702556950292447961584914017697016286475097216810876918793971866349646426489446442460599594027113460909548156749120 +(32,58),-175434734774093606647244525511480378940611115579390672252746514831626874530587866068290767563783440632182657004887039375043528019035879703253618679750856679307966699587043921971919628220 +(58,32),-493424398973582250843558029992269539459299411326587264612381500023635518745327237608528831794401175695451700128766222190723356784866137914330428404173804201070 +(26,64),3860505211827605248265709794494269891312904362728343819261199961811911317032843875130639210872560806015179260331297515065510952276873882349111502836677613891938628495598739596680525531262068823750 +(48,42),-657800672893548081458133224940534808151826750236968546305173361324298321613263470734380581840241947183486904450075805115131803777090121283010674545318497749760181120280 +(73,17),-152069632607905718478176877052805642230787738217640331891469076530731622298465082313704850795857738835083503289395762555049526453175658776440 +(72,18),-4446493206651533865528452577122520640718917831308077372869490843365766203562531373630327034015905587823393458672548255798381375749517307787720 +(8,82),2558624796756740776663493518277847920200917615336626527804896159287818555433711283237358346891849140862862046294312391782415867769768087591839095865448386666942400 +(18,72),136915619792483524237035703698624508731279715626636136847850480715125640851520879264735537990018040775144757105472942112647808200772378640938400705996102527100796630288286937085603828853603557746332568319340 +(80,10),-556199167789712513574823729472077254423948025960940188784950373471779286514171335354107134604121423289386902316860308251191342920 +(41,49),-287336689129228425925733933101075702131006305226725174332459391318884299772270697722050130475801147635205341187249794387010003115205794058677850616612681224258061465112579360 +(62,28),-26337337577798748255865219862009322399135524682474426198143961442008942635160275890829367055672762992327448592167763071964808620014873409018133105584339280 +(6,84),531052914991636571879288663020686486196052826306556165203031474037334404881995684596802332963536490210919160030443668172307019734950069755513340 +(13,77),8290225137968265660344285259408986158823556438323681642439263861587068799998376392927914930899012773000057380807702456793352810102702030456419675756308009402043138169977198653839333687257828720 +(22,68),-175274538126205186574286590895347025489783968045663998674797065483786437643150720475168056779900848381568331605724906133794113966673910119889629927342539838905016306950776041410012554029672994927029868940 +(81,9),-8265536087061646565752278889133163168574031900356894022923174905266617577472192353789153220938715093994801609364937963141234600 +(20,70),458573582024868005750813840257069944439981683841833401570133471502851424660538535557577284716337082893731189083033913051687339067040663285196529059609680358120584077869097535732334396052990686761460907206320 +(82,8),-107381895874577954762746142561165652414762798008294432604771399859688900765139670080573427133921677408237906247740439920779360 +(61,29),-337968102210893355982316152276720606428908968167339742166329153233553991600081828139174892766721469010673854780242864978003391344889550113614802200749554880 +(63,27),-1923380107009237168180502137736706852645308310385506699899100301928120348537353626913681120393552709940378949722416207395074819960833845181111201916806040 +(38,52),-63251406075851837179086853758524144273592822516593740148888922338112107502255677930970571446538220148369277739872029765059560547832724912058835710558243325299132322772450622760 +(44,46),-1174120413640167588746613323027093157609064668968973616718752121745962177720266269001245393885818725365636500172480611386578495357908288047796279526503363263312914856275360 +(30,60),-905236008541157265622566442861680184660399102985869091621826576764746038029295893261512571320657931479793691332028700913415395486020651471501678642360356856583314741911050634359665867029840 +(27,63),-17279116236205470791571060290795045459896277381976312332516036705178041080357908068266378807360560269584329638146916978766381751080718059892641656119917800525086654626292393013935243096805315040 +(49,41),-95829827660639485063764246329584359103981231791133982853618678107267547096684202313731791724500098728019774798442141561170245111892832680452994481381592320307673412360 +(21,69),28853871668868001213672617657957067310251909004339285176289074422937516726535058388258659494542470745162976458519070458075613422594298861210076598646216771162365131558084616176429972944556354023933460244080 +(54,36),-3743483446124680452866688147696381787979657334986959389130717761958089290270021823393553466366803960506723603139810532553245601602367196281700109214564060365772900 +(52,38),-244143188275904082617131219711648409208378504405113892777514383272903612450279396142377629485994499095079853193706353136856058302185419630527805500820276912644907800 +(31,59),16778895840433571627340623157879731025647148437664709702087548433299474453360988414202192504534609442730037168607168896725501604281926251650413362386639307275913010725617689756843964483200 +(16,74),58728329739304582783501833004454089613295710964093978016929126360338851103895645496051637556297561283975479884875213365618576250667625270145597093424277354531876073548002415454987585236897967752449723880 +(90,0),-30265608959203565995279703262316545981364597868868186650741021434233167529155558111226095240331266783062680 +(15,75),132570373368698628391901247743587087749815931125289976111208315604372695272856502338926491238838560322130687922433109391414196712120155724799840501562885626538999803354145167591248795144788703480582840 +(84,6),-11503916922249148692590390651365823300116551211657801784010830401211012084994047136875292156772003134566433599519074292700 +(46,44),-28789954769940840656816675220189834780720221457874790780496692829712037214898429865423884291482476156239235904487709699042705275763615562565290506677036840085569008747600 +(53,38),7990718727135832716984281500091377951814160655271931316657575237833097693061586383380392280110516095219062235159461350410155593763578040276497228088559606193034823620 +(46,45),6603417145720595463420441048303941796972422696707852492882110515085998104778866124680574740141997841553174089271126377935685781804110347488318656468457484088895206297397068 +(3,88),314991469526518533555493613730056604813535459334683513886011745279239340927883159913540213401513696979680 +(82,9),162583308820035525702837500149107427552119107458468071782519630470566128002142115861227024225768042086693334329165141165113951300 +(38,53),64507342690486792905835977259476367174154271803135036350421759609009221273791421211276218759422740168147967607996026982141173592893029119830606042049654452086710902387616284294900 +(87,4),10918256114649256432089938790206839297174734272743377921044763224284898408765841126557719349207721472750922475436904370 +(6,85),4545578970810914284738739596482222086552833459666157563600713680937695512916441337947049746000550221049187106920651410190643500587655828759124472 +(25,66),-125960410860868515501639869465710857470905041958538007206320699170205651168578013304734936941308461159246800940583755155099105600622813009194889085725195453957696736388493276059555492144792286061474550 +(23,68),1118691691780641216790204947579561273622064263977577266712222204048291289503706525818128284673494669319974960632732147599201462656377307712020735394497588175752847367931205322355109877945050446115633320325 +(21,70),16001107551700625150666621427020887559848207224615031670618929343077988036951089038669146294039189111477988317891300418100686633986529383219336245262126217544101342208422092428823316218967293111202010912282470 +(65,26),3420990163200390989500883332568692359887828229262191902357962203154348330976405778142021627528262025187310763590768686377723261859646082871019127405388980 +(39,52),2063689693059280427569444875841944628221679027229052113038397487294386996815161205894280236815709064943354923840055048523336066719756402436130192511133120514046356354333308044975 +(84,7),23093996062529782726957145238861836310380722641076437508350466371956248208955900887320546858023018050992794173643744903243900 +(54,37),994112190942104900361927172787730247522381629595889783376607506004629071144624705559648372286089978975080678369774449223589069663705611820145265906594344827767307300 +(37,54),-2151506034279261803989746879560569287023964739961774809378148773179076526383859441480011186852969594299483787440080945856800456467622580777947895969308858330688379242355452263031900 +(72,19),2732951413595076004335850028509603085829826066658581509048834719760122729120135092121922533022600790044795317648641491207168290481039920206092360 +(15,76),7832167870992433714430286269266633066172771957380967318650495254014048107622566044386902646831049950247316271159018820990140164645136306279082000423584154001074015551242512414869510228855886507505921350 +(9,82),2278846345731341912524510728278610018091738604096723201301732897470469338089331767210120888913115404276735810868611664245442546958309710131163627754860661098594383647949094 +(16,75),4447857933532585051105520437660759702592424824681603151898416208105163689686115579814695108308614530478237549786824249512983957510567644894775638418083132527247570241540962579104276662787394775211575614464 +(20,71),130200735752404009327707135335733765938554462559019239320355927839779157549675959030859925418471689266348586274408353532860120685518841908582365915681111589171406668498999954503936156641235027858251192826509480 +(12,79),6399078444213599896138806170610305594778151086040777886851609102657148691349296932200383006981183059123419927730614175804808515141506449831353069155655710952118249916756136521307172976472880 +(80,11),667918579659733024531793103456375217117701029972599946380164936099105762994475494353727706664773152830896733594533821412764159780440 +(78,13),1719375810898809114558134607928914226513834212054052826011888981942101133489008567522623351476940907992388182867181288859374281402415360 +(5,86),17048029601910631940966329310605991116151403916507547241533138101338095545795943529809575445121891892411231290673251782938408386296520 +(7,84),47569270964359374907430730214671067225483546541004577979569288652847300263574192023150100544244331203292525305697534002887551990583849675604790601232139915 +(81,10),11089704546450864354166720969492698523460886783249228636927412634938379937786990842579878439645160109490562203930646327798409752672 +(47,44),1019342207827893963557427617010258397713673603700723155549478972225203482457797653535541208784635920459402563750914525925142057203788168374877866830474592545049109401191810 +(66,25),214005518294231146707290356409797863927575056662616176010096599671641751165829026736131018803392488645021672531539767999305528864106729805120388253934896 +(73,18),100146749589155367371142125713593307279963858684258152963315554989466649052750634337665931015140136506897024375357584985170017262943964649155360 +(44,47),265767920067226411306176042533540819752797821461654932591741620903499218704151837204205714211562507158860699319777434618364435728529512814864889942393126548028723969609541312 +(22,69),-75010713760558525633542005484654226768938620497807342168882602781879672882142809090664400774502929256419029268146365820007319098333560300432243280913264037018137367364418019659603181660147074223112109889460 +(8,83),33390530538040209553463943792344771115336788377054530935897420525966990124390362416866437454749712272951606614984175842997765558020822766857698182334554600410775760 +(55,36),118322898395961728782170676250214823978849637925229298602926990878440142780940407806703299948976497441057894046309294150058525663305680997822706233127913934891817870 +(26,65),2940072065383953643603107920221995431569244153942864714558367319743216220014724751122534603063613803617347081693962945033914110614431093783097009284659802023472687759326447920145893237482194085329916 +(88,3),54253338293056402060859052756900803767010134469405312350975840803255072868024075238789850949758095140674413234417160 +(76,15),2913367213327252501376107711154457354717642208077982049549079444554932238165994483502239207909133917466560383456743664940591229376158073424 +(91,0),534878788436317418796208377254467850578244429918995217904271696354340747801166958166345753403299065940931876 +(0,91),540 +(90,1),464856607659013293992618036077209081369662640628562732588864718031191819102992634127384321950732314581044246360 +(58,33),148861320262019323943905223523792397208716022283829926543274412257374758856655675160242919200100022179737248750942786780287209008532562419605909008215041048796740 +(69,22),34085026892777007720106100092283943569228886096647082185434187508185115864933227302833847973445134278018050406140429801825130873979531902797483023568 +(36,55),78637890420599794375232486308585031806998928503567940161743267441870995156848760440019730513498662964091114994204990559450884526924205208624298068086364587656052861031142040093824904 +(74,17),3368723616766036935101930630188003912517870323212542318685178170639658084620189856822843964763979199304862143719737403123823431047013222119740 +(4,87),1105294382818303935742806937610087905753490787371723637164033587469083050948693520693255328209084664570752648660921202976 +(71,20),68643050965671579496327331636994909668654782393215204537136529398052186395550720383962292799831308657670949627448685102868146962971399003565822329 +(56,35),13435736107441928441916364641367295793712334424358312440466903318627155240494306716176545178251008107186727028477258993866003959523754285342037606228341468625553440 +(70,21),1590677222992309841637791213099930378532069452256889968260834588064304140094932165438755708450269260827359097781605335111951773034458100166571792180 +(11,80),26536469223952286767687916103787805130473270307773916163584646903776402068186168386029303313474033712514536974122655770823806581018846200862634232291165331457971938183673502772430810193 +(27,64),-46169268109963231808838682965529731099634472592410448579123196014252679448571785458818310197501477684202457827185242620898629875203411168265795193197225824270187627565273372436389096130703268506495 +(2,89),28277895375198499670621376351358463836840577953700795560321348577571797726526215038440 +(13,78),309464012187294500223397848864951622620469304195483699770380495203696586782904437775764661537144976508473762501361547321652418627602083550540165366075058187273706714335694665746602637531097995760 +(29,62),3506294566841482920150916294540860755775829965858758833585658471126044799419969188746872339947102691457676928698222724278220697296850959055158744784840888810732282206591740692866648058800468224 +(62,29),9331920913455921201866140558805601864283280586597204945064851835604084130462310942815523121746797650461122619424435478776083530086710179123662627835785207580 +(28,63),440294366019314429971475127312616036980154935855117858099183478625955989867063678588635530968920583542588309220053711148077252018807007692777106068023439036043451966342775638409776806107892628120 +(35,56),-1665245102243066410818649654840892795017181081294195779663502740144198619436895845917150973017017957178593971614781921099010556913949549251770855432520574115730844546660686440890000440 +(77,14),74387984725486273528861297290189909705889864635577532040415406039503946531430848464140011930891179295649369930429635187764670877811448960 +(48,43),154309003716660251620154908428440659377733859191400351059815015038880417413351359166156086408166663519809887819702872623508351099506972441914474856037088888069463261494360 +(50,41),3282031690736792288920510656938576889616527287329257077272639817326392699596978932839939102734480720042799436986553888499632106334855850942076083194273687596429810474880 +(52,39),61634070860118370372391347711288109185198089742214507579239077599275954879127320665422003572156927642224914707443086237857612949053611411487956065095721977265011607040 +(19,72),116478781590685169285609404926466365721372837426048905071600805740746847317872596066814682669274321576058592644978419143313627621537560220837130465595870961070506093280359507263649347879401868282892905849557888 +(60,31),1326006297073812646729773752835900028807765377907726071065638787408169629899639078622048956132416619642130180381717385475472228735952585927135119520456487906200 +(67,24),12477618001898077742784652241695489277343381329741744031833479604315154829536936026044285106348090394267761422712683334487793072462383981102503477838270 +(41,50),65985754832557717348824157651792298090415400955019094929846606176919058271837660613532472914828429978833183844192338253508341909905991354914621478758089418595254557735447121012 +(33,58),3635240751805142874923338447121139326681287246817823910341753970587451355474348692902627734761420759395091664171109466108217126464489464475659149443957260041839185899509734449982337934940 +(51,40),457635796728501057649081381304881804252622200024101828780234718873426324193182892931038884538656157469618633764987398996047862336157451344062651067124201757650366244824 +(83,8),2084517710912394074517973472718838089531577202631954658626157703039318445912017059396723021646017839636415598162644064907058725 +(30,61),-323575266401473758133585344282377179901863662193137770380851213848919803144217661629051470972543994422457014003382902271279990471770594336700898891938607202780030220811606083574674673901051520 +(18,73),18203621861965479898644668530621243952173425288304866122967833038771850148713162548702401873703307390931562477800147232590323418608478070462115460195363273634557556162008127395221759929350146072230709674584900 +(59,32),14454396526333822001947195579648762045146262034486569744023792751233920829510857150822194312933954755254109186795977805094854886959366629600617892237775131273238 +(85,6),217724629193048566795220369718543167190803829954673818301232713611905597280208208182774282975625876884249111444990353367950 +(79,12),35802986482379084967318207125350595917957630555053352001286986649753385716452478407895126957951765078702441959332284158773939695403125 +(32,59),-235690134701546914956885851605298993277322605143254956657340726465412463241534069129307576108817851496106311765770512208701577435119008719258282030148231739463651463324668037231954916068720 +(34,57),-12092996819704715470205116568589226887888749705268937748056754409102805196847000082124599438728811725152080384574578759916696205874033192302779248967518104864651746250037155691726681680 +(61,30),114682358491703986328843187593076046449448103371983898743225403753652963315589936164541152853570886892816510272963432989031001496707350750060578297170194872162 +(49,42),22815395967312584270801036391642372145307134523324681583796991247358072470378841198246057040371076657161618708498227937436129994501231720074786465613786452926123985195658 +(42,49),10390738804757167694081920663134534362588674681159032128958586509997431949626553265274780657545008717962442553106900185308238923838729961974657649205054409367341396749654139400 +(14,77),3251667678240811062030082484408943139778541604807739079744422326013984730587390026202792637255667467508301973699554101739040146220086535604471550010549193128171336131645564604188238883043787116007588 +(31,60),10433627009524599100955757555386306091958089479979757379339463083801542944439960734403836829369625591230483734238259297397245095352264884289783042758392274589990574960884949497170606407360987 +(10,81),19761231223923421191422709085119760133877037347774941064970055845059900500079759979867542848248564963521363267695558296846120229436331378461465113026893164426688119952389639621520 +(68,23),676794570591277618787263995813300783738759188879918251750574238097403915695892336693348409317537277082524437170430192088526339732836906652627633149240 +(17,74),595866353248686119355014058363523172594648047050104071752702362387386743573764164885519924030576973589534855733380892375395466783419287978657079256861449873954616167371363249371932935582881690969043683656090 +(89,2),196999257854096698498748347636282229505194683325566126557990313082524151587408313170985736700287763359839653987500 +(64,27),51064130395262520583399370698520511962524608081914891838880792540961079218271373468094788921198577758410695034290477772817622926322717356207845161199578400 +(63,28),713048803108730440876838518360848975481352940601059250876686255134001948402541734209238716068269405832175280709584731646339498143285013630987827118247946400 +(1,90),1014479199887446052980522558461560447593820348549353728273912 +(86,5),1711870921839792290592968774133202118261632707070172114265506678919270408175873498955194774304645934591756593452653508644 +(75,16),103717998302667077205322114040056301482223835571002933562817758927362238374820170650935189534646215423017347882088748785586474196983130607405 +(40,51),405536737429970116442305766341519896371081673629276438190747822493796295821565688395373328088284084239559304434536395631585587781609970964007858213525749160624895660275148275440 +(24,67),-1692152220048389434262812170586665727635561037981039353246482153151765211582394678524758890317550378501252672006105706861996661830406424596679079241052790069916448511086690916947337256499186311238730912 +(45,46),42125893675353754338508285684124167294855161509616485198746800443334585718875774630857466006957198113471581896137174701462910130726450019243355012145956511581071633765155780 +(43,48),1666403378943404754905802823208201701597813288348412264492401863325226222269152954212514669641262914012028823063311793535686290230583269910569955188268735626865566339908887045 +(57,34),1451646766419966990941700796085333683002280017180124768760453016834279639610636666610051814717827552871477971964311059945311907983798631101017920971829413172437540 +(86,6),-4119107955513094441155860893552944369376349519810701115147721518845345071389949645055736207920540364564121747589581116715840 +(25,67),19542830352430814414569283192633053962450749722635652569440238894018700280304463370784196403276135130281122706590296902225067988100460289505565932985824155111468131251439982628763760645038369102929514480 +(55,37),-31779809895979689715892567399445491342117650103145920555038894756158899838189290832509057694972779956862143463608454192746949359253699274579926133998457318702426408960 +(64,28),-19200590092847307438834338361687742063626780646305613765679498053118339822342813586889619293055978715588983061285796153970687286753987811724901238823867063160 +(66,26),-88644031413213114981963364146899585557370429253908761777985502757674089290729142193315538049210494908133779111823061186468529836145807555309269587984773600 +(35,57),660481610963417344233591058934196260319989270593582837478879374290218167497878746517401206281666496597418862201798670001931576959417524541162293280471437455647855767133897096868516906880 +(81,11),-13487139209421455626640181075083600407830872666755072585504065469426339004849632987424195034362613006417546227379043685078274865519680 +(92,0),-9456518070700422630356721025766571858236686973883030816402562376165326456086858680531897032883793459798108288 +(22,70),17193044624927327186192406626583081571378812330168015960646636441780214166226513031847824360210437472472519319731996861701357497531958196458791630588614057391961378726936207084807989599778516814757841492313856 +(84,8),-40436805724336890619144161095633889798329272023290837681824294041920082617091959366417870184920683596732926362723159570618294080 +(44,48),-60076634966311287736949844217941321481732753020785137265289104982091606814925755580900680253263883205188980724406644123650467101254944879830247557056544420970167963508952480880 +(7,85),495917831195440303794333075740727055591185327543237304255946669329663890301363742326830209088426923777672262107688928194424462560969847859146672394663611200 +(73,19),-62415686288029491018026693414879694530723712270495931538257759766596336540748267015921190972515477225313433830707955510783706660460518641258739200 +(1,91),2249225583669400004941803713624055155820374731352985448791120 +(5,87),115645363469031549959675023748640331169412056274312703413060954858177335849003150715027324128163940511121574893400769635850023732027200 +(68,24),-311392359031113277555667354296771706085533734938049306400859562557959670995201952158170281478648091952242238392192930160109374736441424103322199795147520 +(51,41),-111794936850782124689229397537898260281055891254368922801723378568133145244621817861516164735914743219443513798247336444485684214647438986569813460408834222424400426725440 +(6,86),38369542157871897368711055733662093086139753173800779585502990046415649206628112719766042198646106678436884345287426016472384212836150097008791040 +(27,65),-27250703690241199500599605126818125160155414485738870012075514289894259374481029249572972429569922483587196574493642516683631875593196078763343016158045443337392072896783887617439574107176326460702272 +(3,89),1321297937528559844407287242284503353577800247008870481344326381103558484113359676601869622157298795471200 +(45,47),-9561320445414512186720742854810269789452882222392286367616890617682167411619133837960332473247344086020435069110002336254688947918485160539506445485354949023578750835875518720 +(78,14),-1568673072842111436639499938130177298811633986022590617370449447672199015929946549812625640988376625820405503415388332105259894428900498560 +(65,27),-1348726205849404403525924861892136900490697073076689669963845613202739069621835764553611656773759703419989309294892241950253929309031598458001437775849872160 +(41,51),-14814919811577178878974994783075442512836041385782292860856801729138766074663954154693834824909815563739910566823414253539784572199481633418252061122039578581280243707055716718560 +(79,13),-35724173021475745322680921954297705223466469706081903915287495353573956016977885526969852071262119649417692649809621094328023811015234560 +(10,82),381334547000844633114974965552580841854114841414307584042533706419445862507885991970952152589740738323146752018748462516177449177036975716891706852742966457298003922491031059132000 +(0,92),540 +(87,5),-31999251928856921827402779907645971532471440980842451477020640096201551459375018258518394544970074060369521070892505890816 +(43,49),-375348196983800379325053593605815501033123563833222325022327795180953182763474920493821482345050647227783066836951350852417615631557630442413180588817767564165984498866474981600 +(63,29),-256218762981907801535942459288553755287786576666637788334053828812436581803461169796315333385691808316979469155322773332714410296659385369619973182025595873280 +(54,38),-259881042690514093623508260476976085791098441323831802715306849060730740113874922684044432576656663350073681900849915264083630138732814045052419884898131800941216285760 +(82,10),-220879353158648240894305331326533459618933363872369914967781810825799927787646022287768569335750695262108451085600086560627448107584 +(37,55),-822105156515908611777077730914653710097475053945390986204301165721798273356043219341660005992614767023397847135863179630978230629462353184875511299185424676864706037594400886972299840 +(15,77),445053136438668691018949218136786173560220668196213666685312397279329314638833949558398122395889639545718395575318962488452860889206859880169306241150909853459398405107632947371735923676152227377233621120 +(26,66),877910720662382434381985649930027964837675627847797148074743119787557148826684942036273146843481238103052987313877806975726528685909007983671847453236649870381474511896594956213930989147062354784630560 +(47,45),-234929929330344471048423879810327951250898886260475091562477427112616565793934095644170791788902210070521159663734562418645107949697288551434207079927529810112191231669708800 +(21,71),7233815050056854802213597778450263918890681357523219452252409680114187773830871362311891183526675014459932485974859088289432573492214297680993448011884384086815547943177319548137907421997770781990415820647227200 +(85,7),-442344723534823218866237185316238523429153032845870802827464970230362515356244121445745133861988199033970101870005737432338400 +(90,2),-3558335608180699850900137787554807828619885807417696211538381629510369119647938725682693084661801181024743286779200 +(69,23),-16582475323774443484324204609369931521208527357308197507370870330981280770124347983805346408035538737523815289651978467715993839300374718222607519925280 +(23,69),552781548143797599579601515005039944354430916835758493082469137999172105857760988000902321628717478637815835333710243175014491471174788016179187702423292475085902774319216503837312019951158859184982334180752 +(24,68),-7548115742870450448839560438044131197422404415837796260647288536249620247158935383287514191809993177054219264185255357946482100849770999214990310962333131336852715389351201505557076570104970280015291818880 +(11,81),629159247236909851454308104279315244285459731443454992263190567383049293720136456993361622855110620021345903691296039215844560587465222489851466401802990963567848842897244211638430992640 +(62,30),-3210812377490707032867051105565099105808888544020871047476751911055692095543230861903807237017694667806098890901525845680063025753887142925113029596515731807616 +(49,43),-5388545755875963051695263671992742613390824133908708941044584290835585698258824895615110564348553090096464813451500122151560912647587329631307880636204876925314974332594800 +(67,25),-5441356206439908691017067547764931110638968341216902162550133550532567561713356605986180210081861128447477630493091998575074042856040933206000075024965248 +(71,21),-37602227170580061629493791947457752018799007462626737032454252700766275643255041843149456127661866260285310824881604112961081546284642744432157696000 +(34,58),-59966932024878824388767820759336849729960737778660153477698007941940534270247633877987245293730266634487652452312574833758065463647238733856908469480137120454829647605901190846676364816000 +(29,63),-7443204892616125085369824177858472801145436018807196871075353535138413715753208559417033775387473917960454464019254524678076581781235991842011678904078987805123267479893839731549775943166299020960 +(50,42),-787430685579995820553264454196774218772389105277714611181231349340419572569056743917502428327236701457290041370122181790646021687061909222440494795901474017941632901455040 +(77,15),-62377172281604433177998698739635915556518456385522626944298261085989768973190111693327713012808405721202361715604526111315262471305026684160 +(89,3),-990929943121485193004510959308155225684262317948581504693811536560969587708205604068016890865892022216099590446861440 +(53,39),-2037681645649875922630501060122148608377226439103073283784337673457768026037331470521061950415306589607476276835423302590791776780319091227195547896495697695721103590976 +(61,31),-37857304884774005242124484940257306074071385926305180579995764255203022864393252362307340557546062592930887117250490590433646927360915495016934736591281467184640 +(28,64),539848610641607555323833887874420612380446606370187348325596105386830765681472128231662211380168958757451652779699694725959601935357277280412389623491751332226735106115121407472514120844892908695392 +(40,52),-81162224570923759262418232712009738316675406455435604625933685031197588765775986169913665508466228166625212193978056473205355770154991168182794016721138736571453149956107011556640 +(57,35),-414212744301726805478916975773042620080312197167563714864881843911571373330892208967838159059613316623857783082557560154137267238494925247155353650494810130345331808 +(59,33),-4418304660800367402498911190001011816646010196760899579293926617415801074471280116428497962623999008794105079888874972076828017325297922793794937310307229907490560 +(60,32),-420791708572492648913929844917642717862641181935301490796783646673855939420722328780685213092912000637248694466975420269535573739091710473831672043842865323035680 +(16,76),322285878493511930871268723568856776767797267771599345708795174833014616696224297418623273954407064078750441296685041370597240910184868964966607786749205789727570705495080954518730104197521857483225270543200 +(75,17),-74436717617015588587960282623503734394879261856243983256888213125324650340548152104712386362409775683957390317586653533922575211746287992292160 +(12,80),186991959867967277769840961292310172301256909211894896656444201047304420541497764273006897484995629909530074078839377740253665997611902463022874428015116478733453009061515426614853546069213024 +(9,83),35845151606754225898455062844448267467877172413129568346901468183345680992811213140542059419044156928332006745622388581114299637644477319849668297531897470338576822609571440 +(13,79),11200204360824177477555227800483494342919681859189442164909633482185033200197180433590781994079865366601654202404783713317551703886074899523990474248295934132815102654261639545951916302950774366784 +(83,9),-3195242512265324518628701337949838857967252885000678832267783509698183148227081474904777107096854513922054955101477730981234099200 +(14,78),146768249098078792101309425192091387235296643434986743467700394493781571010499148360669152835953284227753615328586104488504001592441743681865593467337475148175567273339605270486658842243002439491223040 +(30,62),27851847898376504403227865060738342345303493459372643713005889279330411005801679163248529038684280768515954066619142696885383447365039684412874427174121300089969264341546505176526870733927184000 +(70,22),-820172128793427265666243969332481656120852882129342017872233403438823331618668455605764940711675046415546680938100704014766028247680116714893232907200 +(18,74),2278443968473640303540105666792937247651852478183761840028764180153797443862731314714553725487474836138291146470214353136104420888723061639744983072812951241387368248039432983963039967566626793131475534240877312 +(19,73),20169019024127529083129018873002399900240466824615714203245779868561446865776188142102476155101492156353802715993248565686293838058776917284214438462646324331939904791495889045225975088056570356515770282201153120 +(56,36),-3715559599637229730331042633977244489730043225191979294327112406084509116492843334007776382281729707265260895645600412354914882179990067421970371863360209363380368280 +(91,1),-8305949248007912786835025612479759361809294125256919768204339480823865143485757389461677933843737581674886174720 +(8,84),428032582167521438913904301340777141779109514993049502001599373537234806541729696299058615823931082956710098383173800785871739170212636645418008266105417198256678096 +(39,53),-1317008623739602695271472097554474934303102102027644128341583215454357466960639854171675969432010322302968620319402243428439829445697142097427318185633043579492896750270636788816640 +(4,88),5953466112351130801722676219108251675998389240197095200280041459333916974485427563479812428158793390100292081167298611200 +(20,72),33389779256980130587425662774778157298456336094583058137989271875793330959177335175814263554544355150674668704503024477411746229160908341865431393740687977815800389538196147890254852473140333253316266124878805600 +(76,16),-2255530201366009200666597784221855930916481816632381249039217300223572046647422495044283311051905970825660509323713338128988715429736525279680 +(88,4),-201711413117175235759198730743346996755718820946189087493925546452210959794619606453724898453651579632206111517925678300 +(33,59),3059852759315617354667570839369908822873298236838147520361086407325219872190082022088247659018146643291671779832828612130945648658705653868838651820779356352089849651187163492334133026105168 +(42,50),-2354873250214661347956265958840803377799137896155551255278502001333694725937983453764016838413823603276732009431750768061389564216071972941033028611022596237165063001763830613152 +(31,61),2539172773821175860587110193017084902255919154006280624794018775628420975913224579595648812841274998187432728719047610197156522088996794573604868272248874778615855382165419427384770243725088640 +(74,18),-2249305258777471746665567961339845478368319284762083844668535193296382428754167253217021391285416754562143149038759170302045270017559986636881760 +(72,20),-1594653875394775493751901045029885966793801742111078296936949377951300641462892482274781536948378532025664186171986740149660002363304707579864047148 +(32,60),-112192882799276722186991198867319788452911355982994130684417034853197022384060350384015787307314445125473289070474989163888479393764166715763975140782306103275622345012223962834534058513109288 +(17,75),56034888626347037960773213806385308608767285706823074338973258482001547981183427761535154300920619909881175217953873596892475714938552672039087181027038113662584730771332057729838933408935928289079649497464896 +(52,40),-15365758489762188389093589542474549312628122225892707342073586797463922887547595285894538964885910522673054013025099933666447712756809967076592018463123354910372525253984 +(38,54),24551911930551129632376915493120845827835329138088492317791900100156975818364292131582483009139217429410805048914940814444127949414386704883510785246964884071791940857362716386818880 +(80,12),-733218641537695632297153180750015730817030008484417318722688267488993413876712899640591413314980257750148432303312527383087209099018560 +(48,44),-35959900722400752645491615779174484866507483884758193128975064637795961466431761401942348624756127042359030570709902517582191980642064224419375944752886915274154888445081960 +(2,90),89321340227790425508122928729381607528210076250619794531425331288835158507009738226464 +(58,34),-43918448791495391796397092961419283688111654818876143928394429223296808026076805438404903999142012322392559805534641069201701476530695476678990471323544601791128352 +(46,46),-1508608585999199982632886909342065324045026852290802832372945779041058469219101990607935182227376629270061899389371831057403445633237180613474681983046004128873628146421390560 +(36,56),8743237608734103094417051286964749734602385426894996488615990848087410120138266901479664834691930470820672484382301191624361641706303993649464244973968287326551065583285522773795927520 +(84,9),62742765565936581237491610580185427770772573552240085659214428119179256528746217331138659847339322783935765751700505215483243749640 +(34,59),-36991251066415235213469649253662598234319996627659854549953771594991783268838058748276445535462012210313961093237822322891607365163732972651751693130730549013676532449345625749770725778924000 +(16,77),22374770062129033662258759169571271537390473461674967037496343313441462478986451212912158647334716464811017609804947648670615057697804493426067212675762457880218768909207425812052886223089972971447734073232940 +(35,58),877267126018189622227401612077951396426259122385892657917812062326129421153844557703010582427429291762093059622669801330571452104092445847153751668365118919558144072642273877822899299440390 +(63,30),89379049511184499181895268990744837265501222995768152589901657030256654348212909951277412152126391170913211376414113109535686008427913150313375015954090779323978 +(73,20),36926937660119832481933801972072555116662530086465789433282088607673871975437943418080790868139847295881247577580428395262369905107618961543384110888 +(40,53),31142456824803986791937637134121072183125944171878521993127904922378077460213515499786574838402443020795611990661821499128111281191077701323609167579579660018186389017745868421352960 +(61,32),12175081319493777763472845340308859450505814599024621319678113071805947658278508592683525791557741391091796462592511863180619720438375990717394137047488160035800660 +(42,51),532866832987636177814845030540222793248325994476337700622906045840736856805710955701215889796074166151237509707190289050935695751286729498832307469290170816318961260187390626588840 +(0,93),540 +(38,55),7698302373783025198931620136340381670224135709050348828520221353483241088728601685974392592119315522106349010653858679430151919705945143639427140080033111956009510734996030467011430320 +(86,7),8468276581155117410765392291418789966913311140372654744622739636739351993446987707624457847388142770291061584684219871495112200 +(30,63),108347677550908015563511729722802806234424992959003003334341524841043528666215655152112385605553005215387746585624493673817867700872415735654432203645804496467393029122642054064708359388249613470600 +(6,87),319482330547773329167710194263378252664173548678339842566593974590107896536652380868851298693089981352397288565706726304161298045731656814040199200 +(59,34),1320255189237709143059665618174437308284485326946087864278205691043064067659815474547694367386690449950605925827103620531444991343161880257798437212512755685406608280 +(5,88),775221043589304072774847220755943120974573867920066016005415456354096878193884876752110885975434054089221292837510132276426374516839615 +(44,49),13557565018576470801224175606655842453884406050865048056410443885655172845646100558011805137870002460840940320686166679661408450855427307392084941564095162229551449003914905495780 +(89,4),3726200359784952796510839925679214275573895056777334482562445249385199196872686176609840575441081236628467774119785725280 +(53,40),512883719663565177055484757852319185117550986931534337818907867129813641908577904752504271724917497055400032023792915967515606760403816407191727956141946895096170697336429 +(72,21),885809393277320143509697229535993763073958835638685125280638427672339324795031216850873157292288032224668830482032714890486489376756705536587495249780 +(3,90),5496421495303903661153085740090430194145785483082676065749914261658420621337665000653724770890845609762082 +(33,60),1095431185916566177790749876253869150114528777420511344172752548091167101126791216914266492065582937273826759652901875885890935205597300243446975887578435268885244855329552352743463849374124673 +(46,47),343512969585046848813233305765536239272440559815789418370615799973518954711346457946795024856852893793472568558016102239410847290835776096248188419268222411080836330871552763480 +(39,54),-191399996511273186922784717384700811862437107764903209217714672515719902564168574388140621926473180166428450855447300085152754061354487576487192994455554478472061194873021055859115630 +(28,65),247773533240362138511829813776640975272633645471004308587287673381601381243255638544046848520483577593263721837484821988563911708007548685430161173720391158611459878330956083052689712978069396463551532 +(78,15),1332849084691308076457511942612718168951776408534561959074155591484047059109444189571592832211564313804680054330267875862155570361593577208388 +(68,25),137728982478186443418913683388303738383090184779045399971611323916139150325418805237761329590845966411170082766943711410976482521939729563175400302772281488 +(49,44),1263561040039598603589375082177087340388760941962199743926742020988096008715688126078656292895774076351244684721849446332463839691020682695560138301199470206258033973967660525 +(55,38),8398644734727303435792484802934437879077715726031513098705802843398778811580853432128134640993691681093933980257458000945066465732630512646008742547704923422617271037370 +(81,12),14994864150219157965193832232522566319544630506977039330539314569834435340571764809052132141584150276457416287833118726182052568119741485 +(85,8),783884354985403027197000319767467415377319513321971803758950268425539429616868618253352503206063809691469570095716338951264273860 +(29,64),-6116013965469652486946968176154870202097766582242969139124417064768751645711019040506331929865599761208281735577504110633190663189601325735861273174553802225095306332426539417930876363669609412444995 +(87,6),77899811334058524762868474128399613185147015098998827278489563483317491464072620037610076491961594600212600701629774312770700 +(11,82),14558335922665675851973117814001130261196237417920993393698475260347458521335330341274680711693328683326000440262427031919379239237280107475709057608697817430469674498690295450028335845560 +(71,22),19662011568039270037385422336191924933586945041528502028022601735736357435511209302404118364105100065339281088267278145546163975509379340911744929895780 +(75,18),50382909681455233337863949930930732261698627996073135970090354335907229434650733097642410579304586908644305117647309332019542854646619562314865190 +(92,1),148449166675798037034907652580994956497996041512892000750145250697749757296026092668985399716788485686467832817500 +(79,14),33020264441586152524745264733359644497416753497378413640326837569022149710134823799810854580787670975141713414283350361445101799815101381480 +(31,62),-1107615106869867086331124160717927462152946112607532578738583566565955674968911202791636516843423613498866928662791700737589936617284720580896476165245843184058043715869697045277488487347914518560 +(20,73),7803718858272114115750005356214490904300839677192150805321456009928816708550940860692658539503570265466549753303196473075035343737853761657471862836870888876897393422398421196874086052870560249337337962840483093240 +(70,23),404677015001253648373370858618616554798072616270289459856265147515873737142466003390555371436676730753053570148246829053795608760173956852045189324192000 +(51,42),27037358277318204782831310921611645975112115421283650277594365663333447511755430798812885203825002578484804299436640879504287103890830279722182473056644177169770490119670710 +(15,78),24352567073386096164347519377037946419537771026572721507002424248592586876904562809757249880703412460699238218315559672065667602284999855535575567317106612121552704869202865461389521376535710088090839949770 +(18,75),269200833495073663526439109949065589836721453031689579530380768676752441656424745445438365663622602172849165139073930980921035807171262667210838005767980408137143734406919569900398461345336858409417264239672884144 +(45,48),2165692721668166876226652699751125002166170572413391914189007045588684558927804570572069440801538022157737468337993709266327166313393338235527503221620488481632187306543361711310 +(82,11),272015484312603423277263204744123956930768493962557360088370405723790605727265626577331123934292696968757584852863384004464623565650640 +(77,16),48940775918998900644304795584495214512112960318971650684309372225793113689471776977970809089151870211212109537971532845731832599895261922470760 +(10,83),7199508162337377253035541837901318421792614977558270323516974400596798799019893108498150700404220343527546294329979750344140939198189686804162539460670879251745281904702373593036640 +(13,80),393334171000536585968699810998847290376693162102004858016610806634584297379064983488035063426461449786166053559289130532618327009538418779275097555353347399641320903165813016405624189601976624421921 +(60,33),130317522799550133216259239145966798691759660110735290797575834437290250782021787554267813046635489251984675867749222795708572964781491398276445367143019062443262360 +(21,72),2790736824364518106914709838827418986549930630002417138199373086911640221988405413392577315920274919371839395476306594127920952983246097223297805253042526415461740329545032122663346965300728310942680901833452065135 +(62,31),1074406043394280794260793547121187763583002944859295739688199883199985983522028499877128702735019916667497964475095384365341084513899015495927216207921432465815100 +(41,52),3126261207071632111288137538289605280171714379482610466527772259941225859719849692942961829612222030196206972752530198949908038172082055123787702310740968825028015023211527532709875 +(56,37),1009413675809870900437536011897851657189108573836346454138294980275378088423082580554839375221976096417075714807890228349342876905233537269017572836965623322210795185340 +(67,26),2285962670330005762278166322586179243253419396851635602528394419629917252555032747821066003456071779250274029122496766655208273611982983466830404597503041250 +(8,85),5391722923829037346948533493402992150892142592764078450934874670755312799611648541401952466036448531136400197095884696934758640469481198938221279422273057268151592432 +(58,35),12687620922391654946057661474141251992491861354828989057904169795515358132826199477205913571468600675755343726682814305330645995166950250266615616855228710953085062856 +(76,17),1640726376561364500893873293980719287593558788463538346443155147462696889218212536543800058120401298116874254676377466355693419488440735752983060 +(91,2),64283116862652405799375521680011074965059297764262726355684687329378170534934834721555877449989668241012318226406510 +(48,45),8331343336804908043942542549353653227128100450360046936633764737654633201062722226630929169090226205833117916240633304881829342689022909825667224187948271526501293727171857984 +(2,91),280317089882464751313517393628746261983493374334131546958929076381896061368198597730560 +(27,66),-5250107486802271968266172277132777731139244224184428599743684557784623597681616939522502294825482841470087155249442645284922770512104390082950677287846453630091694034911971504782808874114261779852513800 +(57,36),115921963619563498886279216647797316768969410331850781846886011326511989442533197733276394377620928865137659105368010008793023924932571440987837365590225234198212638500 +(74,19),1421255278556871546829205134565910533790996880276034216460642969983415216222892731830592764421856630459321864068553727095199770639106082166045275120 +(1,92),4965270597782253666278113930986647788135495798442562650291175 +(88,5),598009729798285245398149118370504551661703741559552176887940997339302312398793589272820614437447918884864581684759179256560 +(69,24),7738119625146186991772173477565632593910992625518047633068196090817936433129634591380488691655639639115557521162434321338915821382182320346133390585782860 +(64,29),6995998885628223082619635486521519252312858062962617823406819327434716464459132723136289650715260115573580340382919035141385834003606358006466504164520701449340 +(83,10),4394877541121483164278066086204466947777950670612959465953703098589038853854675398271606269129396404137927878278594474478699998426572 +(36,57),-14135698357310924742640782724923043111195182470352357581843042621335096743891828714903033614649753572067460080896833282866819938668999165596595707714757377690554384574188247089149917868500 +(80,13),741074739612014017938074007542974901935722731190139039743318534338964994005672368967482395513661773191672739524844541882107775474023854180 +(24,69),-4461261398046292846232318566282471219002676549812972220873289562813471940865853393489250647376767282382324218900786473893351464983158242138871830439236791990542376521622121096831166486869465157199804365392960 +(37,56),59348144049454849636023016777682544990274361253450960814937650209156923622965294850310520028638223470707874372462720677314276662995502022568732898693481574621061814994940456867042463918 +(25,68),57566281168004883786163745935884686031911870038322495716757549185454010624967002071204772499034342694167214177915030464376760269373595547191948993566262121507023312300834008139484258148296409607058476499345 +(43,50),84736849680928320719018024090773686073586866098320836222379017361277022305330233300346617302794481622121495967995206686274064749713552007428914983012335484350577715342395685405684 +(93,0),167252790650688844783050764500774129809456418286015038596064557812791085059632800188016403893091390685720427010 +(50,43),187306221344068946525331661704652237920219569615784072732542952917624136101407939869563876595651395823517958992996066355974116073702606104129601196407583935924075556028412560 +(22,71),50171269422787708338543867967143820925544139246850357966860094178619686591387387005992327492692393925628755231359976052425079720202821602962601559004358882715864184115135367077762978150235731976363293342492237992 +(65,28),514294583054925998438665067260486600530661706704773366499049688832360084570245137193303247838640284819531100743242697372651275987547223370584834403362243561000 +(14,79),6405505053596701385501499969844289393376076433033980496633198139793677851926185844996826404172076900568330466912758096748625510824392559958264074549261878138800071863836231586618509986913458220128155440 +(4,89),31744596752170473034608047238695341002612495007397666718752393191266395595205484959106154369321950858561227577508814210920 +(47,46),53899950377606571231989092937678235649447278966919409039574100840246792800917471963038790031641709666923678151943603565866314855360712124514751492631738731936861724252864063466 +(12,81),5318368021683834793442825478502277898680095649465656095471886859526006991408629213465346343281597435637120189901511578257447050837127677750591311757858941801753445792803510832273544383244029992 +(23,70),-62419933035371985598369596905903951258417416442207176141962137304011502438965536918224185288129276061598428199495681965776477619645206629758140714213248014662823458752587232206300585960956272302775948312714386 +(19,74),3255242824664996807258174698050407232001578782871002650531868926720931142090313255986070911131897110851452430741905558074255406167120432411190243239194632799643971350666252599540607382688874114911510800935276271480 +(52,41),3786868515926829140502312867923644201622622258419077533548115656929690756494551125020369910923440320608992589874730309721567003030025316528549394528532943344481740627116072 +(9,84),552881610069732683239136668707875178242311883662730609683327647569647602573576466063889387459841119308051122096504764450934777049735960667007558600995826593135702161933183650 +(26,67),-313092873751879820439961214253991176048251079909572625229139750119995362253379262486294489252268968611830291045777900291378751634581998550891420774381260582771073590712809554256018843692804247112352538240 +(66,27),35443930203513779712195898876226841088483162797111767098059335989451563623685537948682493469088588500112604880024053712353711507396569877792233695833198627360 +(90,3),18099807578608804888069774306118329367974376427381796796733941355894098401971583399295673515887658809689641843622146040 +(32,61),-12673318085093739697046817903683518787512868636668128951731500335052152370259368281792981836821488487669727732403708892245284403061543481791231361283030688295068398330480609545490837060636355044 +(17,76),5016924839701037332869352870531664753856072764157583225836764745826147087325077158928208248163097577466612851634889374611004189194802659534624078383665093598800128730577546879565854732614990072226047259050272791 +(54,39),66953431889835012046193327625222765898389968367723618772376436094318844114632313318262167733696383294506673527450544620230741171924759481914843287088739948789164649821240 +(7,86),5090315520204280978049298522630537307672351354556334833750933765441204744777444924801321069806105526377003904646807471702417701898211881649632289846675846680 +(5,89),5136429126508275025753369811388298732036733664303693795272549223486387190657818195731481108220819670050855837184575262540580036869358840 +(0,94),540 +(73,21),-20796986142183921324928390914065656550066697056388452094626543311386818996016695994523385969935504015243573401632467303827260108572584260584805943771000 +(60,34),-39439836969077748802438340623886188221743912797383713964296775815281773425559313810946781834161054866278947577244660242451250531316586425425523754446234353396241965400 +(6,88),2624720058682351122356410621571936651290350422110890746346516579807711102190561729233336256199520494962349263123446302038629538038963764462879515890 +(4,90),167593150192475796350168677269127463446127810013078999282960461729405021010513604205115211983503586244619016967592254769664 +(49,45),-294405263146216166972295331515057900203952484516508597072746667955889934095977197088416288039381519115591528322477261520016841731935582399892173063460771677104922932702508893800 +(32,62),21582035870607183354669673671607970564160366019943998197677951381458074326012627333568921842611475908724528709777985823749721948205115065727804352647143772223187638051715833693483442205100745768840 +(67,27),-926876649593674696401251752771857160646384624623107552022701262270805792540407459700651149427912796531529620477089956800418444987625671697065484356946895606720 +(46,48),-78010838529960183616748739744171610456652686082661460613792327413877955926660214976950062257558965882011471160291338631111977338016065593609854915127666454010881804141512310049958 +(75,19),-32270044643530193502124630457841746982170409755321661108625855018535036337301551633976353600405883033974201911875960001393590198612704333744084095040 +(42,52),-116553430756801338597086535873121663473080126633231156085695287583220124268236856101798859179061650865835735675946299066005110390588160164046506236119901828396426343086368983443582600 +(36,58),-11777670542789398253345986021909768701592655000502482576917074556084400970968350426456731025305007506647915623791615991265285257278390081644745998748680728611830213103920795478759798032185080 +(35,59),413593538163014636080035354433006718395785804104785870051765376200267471795004535588975639048265084945970590801640149033616080306352234687174883123068299914872089925690342582798601397706363520 +(80,14),-693851489020724853956120851729072251158328006599614992926741458365155276978189629666516917958563220520165072180641195202393030327096718173160 +(72,22),-469648985730724045902308008758193098186787417046326952016031045539137745476807157864188270970164274322147347465608483565482775759718442835483463961628120 +(86,8),-15185810544986487929945456158898470641760355762639806401325952433007569468648795950225322643061814659825528498591403730923229104000 +(28,66),14764700554776340351601967965767337117125278402584510776365647707365446807447212883631671741000083812544758241492537150468902827539061154847839157100815406405349329591300271873222633605962513526953662540 +(44,50),-3059297572376836265035073829813030290233129073084807775153596330703505350831895811530652489386174004594492026848343844798302513558451229404849783044513084140716547998484075751513680 +(33,61),-75336620298938454664845040617145470612930288378492176564908560056363043291736740789142651537252861387684665673734343005874507182922342460929551900761476980105463670383233789445884161001771994200 +(51,43),-6479450887713244818191496649950389161554615755696534530328709797895356221911497384723750724363499720227447651884637755639949814492722258845005908839790687580764815493976172352 +(38,56),-3000265909723557044192232583413712010781125283777154928311005892954358164501495287452110575724447101634979615983301033489064262021117163511455026342735604865705444976710231925739356508490 +(83,11),-5479709319863888005473579004344563688862149750556842573147353790494641221264112741269244950420750705351379564298722482371853402184987200 +(17,77),428415763439914362769656324568522677654106504273171144782471704753105087553735062941512463206808229276168413221340064195020543029003201469068806426574276518872656953121131426011196597587070179719133757251168315200 +(94,0),-2959226139646366095258978880147119566103468088108819910740925252398494326099364057687626334924226822726791501522 +(14,80),270561601887057024492730496504832335265554106259727810411275465973498116236524048517708317516011243150473057247461866828292637657447422745009147032368670043019259842135176241604332284453877826778939763010 +(81,13),-15349256096238231808965863916739156234737664647115138675270617891689063249411728549325358955433406936705934664310447093614880802716323071560 +(8,86),66762178149289972335737619125388209207891061759681652203074499671776983859603045471819148292913679433097291735168544705926009957237495416918511980089324448974287898280 +(31,63),-1445577860962703105293425663926360329886421251711514655969585093946188967291187927289597819173580756105710106935468557057388333742507911394747768534404168694247317364483605876803937363288217630850048 +(89,5),-11173224720117013872635145260793633996442832710486384082406380466247267434455020551540209878017950885976407489765896152178776 +(63,31),-30314731677885040681163086556080627487440132068528807427792161486631017053004339767656102953199542205614325974320825690132296756814915784256136892682675767820815360 +(64,30),-2474070479458635395529751571281604707307579700812777875196429881414661196120241947109805014794425804295596098775246331214993830489511603387452408352117491048122736 +(79,15),-28423856963550282206150935323602505139741599886537511978537568398527404658899262802481348873738626617877490640757226658016636409674110722255552 +(24,70),-150474140095771834389432341196534009726504322815531612091274292032544622793698765044581583249708384586213196529593769775141891954450384103862046949290469931907456219959238182305712251642690786967848072211448704 +(13,81),13413738853301124340645747267128534026308064676182468674624780201200772978370444750098317414079674311537502821337607805361583743789726011052959338864624939555632476264332486621795198594711361733206520 +(34,60),-9040850001981636593542678756660059312575214557548156008973655627807112292009830068295399565315173786960951898532155451302671799277765356352634355875683970407387066755404703465611459473546486544 +(26,68),-509165073512475722015596601399781749796017935426413121591740050064676018316680680882378554135944637543140175427434704472462461442700649518317958333196101838080920997624285250987897362838149909748570938026028 +(76,18),-1125566757828524492133197692159292033545998005835717222783265853037648804314995181653215035145595003549755649971741514198964942859255164025121765272 +(25,69),33955153912635737915248457968887700526803995307590244862056940356413528783358851751187173321287777015869617318426872994321278917684077263368974503475168979513919042730592827608619567301965099232560173863236560 +(3,91),22677720700188850444188914742891240975934830605604956843609764842962968760172704254138031531571243177940800 +(45,49),-489660605474129715438523116418921719294624779842584065993803842147060837003008626519778964249795295134926928057291114724304567502579502182461203409547413434843147358335701731357880 +(22,72),43715165005416025059537720406643027361029433348787776721128408157181334364224863485226305485168327902351794685202479254174598252306407954803220280270440418138553773803146672123267290538162178040843900910207270560550 +(74,20),-852437575467494096612628879357399280040291810696522426399992850481350508407746769135956615629504142286711592774976177257999490814224526723039808974772 +(70,24),-191496202772718442944282645837355814894150494793610368123519372266849040841016836860060327101880537844260271033418948671397147147221253430091126935070835920 +(69,25),-3470785557815910601634944966492006618176488271647560315724264016547083682902941460850892944015333815097253850604577381502387760705737795895064870356402077096 +(88,6),-1472688680412203524401957514565301082185818552974597300392647454064873351333807022989610350085547801839547409586562807977336040 +(56,38),-269708088851413063250006560456833850008795735325365768377255474131502995983082697958031643541060204363133782336017151040526102992638894760598883967326223536307849040758800 +(50,44),-44211028150850702025853220874691611776795271702912312532767844303318969787576286288803282653589465603660612368975686429985321781694517280146904875383822934678198843301594053620 +(43,51),-19166373942566988793761797932528788118565455366362810161960291119706371274144888805159173696402918688965833537422637961480625761287314645870768366257390601254066493611059480984652160 +(78,16),-1059607957055413301321530212994635463482638627319274146579015154961070774902331662356135970925629773012644806598482959632432450909829130687884710 +(16,78),1490401134233383832276032192694134035025194795417732742293673031961163383632855538022923010458593517801484920842518922313438482751587458304086858683874017829691766205972322219988789517933829616645377205704245872 +(19,75),491573866189025954007645028569735104225984572582286290786430667704293016648614741935496210717910722732953402066718650250925127920341093252765673809340591544158541007428962615901455688398399691997542174695047645686336 +(68,26),-58676059653247226591578667370260901195511459092713434604563513944586983309295062000310277598383974993555282555848710157744147052486579602393721370830945908600 +(10,84),133049330708767041499266297011720939680546464731931011674042913773532557870897024073689374386704093367357814725878519850962284317570052818124234335796454141481014196853771366523319100 +(82,12),-306239458178465556718311294234851177675883088977246967808778849399367230968259335759348143605638027780193434988957434714594626807609711560 +(20,74),1674219039855754233867220660500694257147075213935925586556734232075608218482988346809631757977181177651647122937383712185932059391167973566779316980956712155368205295661022336392914118525319337039472013990433377157960 +(40,54),-1451329009549874796835522130897481334463826554560344694108467272872926710909615636508852969631899286772489624950752479221662136890214778576984343482726876859507831035567601427668919800 +(54,40),-17017159896298846670798712381762815006880028135476196824184846534085711216010799203056525147914898697173922585127752810317688661211665789687724481053210598432737975377498002 +(65,29),-189994383759920329802354899891585773716545134853182214264583116785197852140305922478219113879812032762510040838842825117905110429642334225391706671264227370620520 +(87,7),-162034274142741037310816947243529638223530820900771341919397891694367104565419956507240493701570255525746866075437742010348475840 +(59,35),-386159530953704204487673187877026258254302151490279839534226991697967045253042154223170026220730310244613349757716440438849520276862993401679108610841328391197990444608 +(93,1),-2653883800423271014149105123611098983116375298599199229683919275975053850894869825862438046191420920509568886013800 +(2,92),874132778905312712520305865223748520612844026508819227148805662368189813225956526116760 +(15,79),1284581828396945725855105471766344241351123396807405549949375428729746224307612908237957521069308079993486891260187808289329846134655530821538110703015686708958095350862207752144216349307231421205063769184000 +(61,33),-3820055156019673816595750539862882353803878048768635319978773941538197413724069936876698577255727694452536895701351426422760812268803372016195326767469528749848557400 +(90,4),-68827401041829506754388900373144376767998411260491496455726568264999747586077680359155860443499611872253065792537467554920 +(52,42),-923451121761576282746756576602154444258345891867493545773980929822603393422766755841004226299878470269377363748803565657614175873032039822402843320986864916447534561202445780 +(92,2),-1161483758698399519461511084825851120913162639141661558264940986532717196729166191088778134477055956492205592559052900 +(77,17),-36077742312273824106336344407309761769315935093936668735992805459331145227532256905510147565114276015298158488377997273699963263454748878110564720 +(27,67),4620210391485051147192737201018434443546976201744024948008204963314990916040234780247310972784903313267090683602089923810041658439430352956181833723346360431196252884569601203955120405067292168428220130240 +(1,93),10914489798618343750122465614549142165949457308886097266564376 +(47,47),-12318512928138959258326616035993402696620749377818339459643948285241722262298732483414876875861784433905356370068382479627152382518420689517018406290826711536916202214657362226680 +(21,73),943148053985364730178060849930499576794973584040884900276521480783229822868256452261235151878564025140205101640966509086804451880148041430227011316449830626909587633060533526278644629217563518200051140430409465020112 +(11,83),328956826004768523618336726802955552297970561695971817787851023296499338077321284731212766292457086771930294351005050374547346864010643780676995188757589949488491022835969839352508242465344 +(57,37),-31857063760405916299058509126529662654102843811633446558269795348918703361944789320114572423193021391114752502905454648353559029399682976047494178605801077422397073397200 +(23,71),-248396285607028118441222595933873613454390982418210011409209528425785661593722711630308706517282970761999684255924772624882277650268644453670214050965427177724098784019285908576233140759803072733321493027905377920 +(29,65),-2109043201290747438703185441886747958187655491368748055152586075226686790767478887117314973481511664536050740698062994516044301602597381989488091097973427715536961564958092225532100880093452597286384640 +(9,85),8365659082317886644257083753035242500843325647705181299441336661328955341625346120149097185161001555105400220317872587280987601144961719527398969808425017246972849711587082112 +(66,28),-13704532312659792105994417615178308245029342651741287744664455914157823939806736924684436440628171708891891774546056730044958595969938168849362242098910074340680 +(55,39),-2186351331788154784660200547926628372717267939892870255388716833401303399479867691666216322596788054573917697374364843791986894046048775504605615537428367255846373201596800 +(85,9),-1231017314738436467708892217766202852451213977119294866560973881108661374599439453254406922773547925848537887595804568137121955996600 +(84,10),-87358578475420129918496974742504695704541041783881562772325741066640552322184939016147315164413009450105273373844734083740485384419812 +(7,87),51459352678596862256689558419796265876135175070601173227642288543301976923618993816368253156869743466021530160284527144987541718036666689258807720280122650560 +(41,53),-882892127014078647236389507903433902480036339003398301028582287946216222326767680113724638462597955034635044434835641666592667311500473840408352500531933400981501707803662827420721144 +(91,3),-330612396976674504636443833829101714746498514061250119679658461914141210801922302483190218212253455712828170621727544000 +(12,82),147321611834994524469821812523481542311281117761050146509870053151666957735050533386254214353156806761783281083698662233086204482227385642615011736199646147857492509838757198532892368540526390400 +(71,23),-9837346097571399822236608605033102237478067123326520543302783943692991687803719297412703907205425756558273793425545942240890053476393439741125080599931968 +(39,55),-67150112105292414635111167119032816620643412669976682637814750334563601097239525918938936687886785891952939344298359101637480594338518612254368835325816312905063327377393920546080603968 +(37,57),238822014748088402512216051834650077908722891033462986697363375219987474102581027318223124669704195755226843680605729154603128818658011645229487233558633928043830576183600469379119629176440 +(48,46),-1920431806457264179240027640965816642806027655640624702099478795445041304160760852162025407083627600843303346780312407353356729786577132406466438466802373605830935340612677159960 +(58,36),-3593520830517472505137660215187486075123516871686049736384332272363925068981958060869215659500137517874716320288696932290030151359322006888078267708249077952214921273780 +(53,41),-127546813007856944888606201388553443586493349925744029326036060035673962013339562444280125472972180070192278314254926224108711790853497168799413328785387011805606063072221960 +(30,64),66458231434185683477045032518288955835700848824428449687306620454643156145140492413345333773269457136531203821925037330190709075710568767854953539511059364405199424328825699947719568750520046643138840 +(18,76),30098652526573129003613319572849966643452988008352554998119996560086664245547123038905487563088101335437617528877398856221860542043202159142876411123727401381206403587091929331246547469259649933260808548499805923760 +(62,32),-350157761861115028622763912001235972492430613439929897078962265867571672392521423359542220063527515173244499587328805495843811590765911977035222440748224491391166430 +(9,86),124224753095772517691915338005216334549588222788445001061938333632500982569750706613593063391532962751365531660505886957659977160042733553814611301634175068568493695840621952810 +(8,87),812896739915427540527413738953562946751437045847900253803078449922025736873841115426657133391885265060903550159075927137865950022385426148296986574797962804511271684960 +(47,48),2806260713087506822658387167190882279516259845492102439818101695355912744874288576943203162146098364249317211117107593370620954270922431090736123157172136890379540259138263009886695 +(69,26),1499248630449997431204419309518722942623170659974411418724498991243047486370499692812608820678779979044231190505613390932063170924599688393997308978498250776950 +(54,41),4271228518137501005431499688033297132473896694061490497979344470810526514023004791240892178201229022151527018439298253442178497055985406573557007917579274398644542070271214820 +(0,95),540 +(62,33),111301968717861223407436978523320099165517491974645275218989253703692272796936061800109253466853366336432860180117839383798825716637949508334018157558542094413258921940 +(86,9),24133134966083731498320314402581646211617021267143557625817185247890329509676490360919181605539788458418499765429198961504256887451120 +(46,49),17677329487586333653428410396340316860978539504707372675313250827148059184317665644245806545978792560147305886899804722642533130955900213399784506254235471788212805926846026814929140 +(80,15),604996521753515919201538976307456350090953431055828441742174950622477744042197203620187944737503757767176914022867586472003309849215172865336400 +(68,27),24122058688854731026171790369726450205653893576766193847350794392345577925444530645734128946515587052380294398896280327830838024458900317152799021321870689425720 +(27,68),4898668655825539706566605366121556788515161810223037970088948156287186846773712843245735985413959346154610069719755085360293169791587103182626808350997041435337036543632013061038600504488824486971808971588720 +(1,94),23891549472159419574920759159906978851127228433143239134234360 +(4,91),876204409840009262468087812552454685689327965442874166869365172538737528074541624307519061206767867638508873346794193633320 +(74,21),486665765624694591968293431091028578952216394846651276214830547189796454935181406422249854947099376134242283495158361177915789767626717120531688235954680 +(23,72),-146002122943850185477562277566376462125414219063231727451440903477411464829566906286134435155933238559808100325764978574919910515057217400555719755972069565500033400212325237030704758929444112667877388870529307099355 +(88,7),3098856643031065640657190655953649268469218897011371575816605120096525767507899543555290200996699834638163960832234461672681362760 +(64,31),850465921908981483717577189463426626212515065575766068148586180073808634540430902607511922689951740131760625817103419088572678715909104100956646970079562720785520480 +(89,6),27831100053962059098942126464104178391133364519487535013854400940749685176685397379785177765727119888097621711514881293996331910 +(85,10),1734769190980659353767079086432635321040795312764980058465730899797734615616585617850663765055799747897329407988626230041213921068296230 +(22,73),26514912221828720972040797060610996889004307772701140429805462860365652660926345231285082703698175727371196126010447170136425865767668412318302823342837693907424580398473687085949127788918130115236978883711053778602400 +(67,28),363348139470591268579672004488773672138901949116301981402934738723156421089863578666910838417122627001869588917009074691705681204920579454297529175152665968527055 +(72,23),238231777093871318084194726837819743482534643688926940004578281492627282673047361909445174418729433127344245223181971894030121598023563310723695727419532760 +(36,59),-4168061017858898088060626740362791820322160697556739810752280207537401798416516305579109785174161610222692956970768225214904827994396910551840205990260270663500064328253415383716353956037945240 +(83,12),6246023100502141140502932142866699988457484618715135370850336827180520107300409275049680457862551817380381525353944771943686045473938186040 +(38,57),-3546426918064111323248618089401923911330544026377598281523856725072014082089348025570792126179885778790009860845008253041645754844361257524803165686876146247879214192183623369814394183194040 +(34,61),3691363912341653416834429395641756931422335169380639271522051870833864864231905747339445589554586845721149262396604600920282288509813165732321066063413595752336570962311530144199654323722103337920 +(77,18),25080790544358661140581182073678420677000434580858317837383094504043576528454332936036702392543794240744941415401876446024901589626611074015619193350 +(65,30),68107684740462273364445251059759946231793755528689892245131258593677384451092023581346512716150012311581046029347507152957495648091756831360167345841806159045285730 +(3,92),92815363892386793227623574640482489256506450634982430036497080043494664607929306091202383047249806241962820 +(24,71),1537821026669515889726304167786589301504412006122015103358344452392588023023095130862583227336533118881463794769785725745525698184250341930242762457016081122385152446290144418435051183188905805136580111306478010000 +(35,60),47434766347559845343347625977311199162584443569067609918516941127011854495568367735076455833644117245146159497357553631601507370764662381667934540302992029539706102687840252017546889350551932275 +(53,42),31369187491446316943592963747356123390893585939923202191886433110571663812852885204294415788697017885840278375791170982695505077890048454833807824856110870685190268913776210700 +(81,14),14554895378353965589610418681863392491983647032086924406503885172199281997995974683230662443644051910675169626561290675921896011596188567743200 +(92,3),6039182351792178816807338320719539548087377218732997259589756346902896010741824787633095488589836662725455020826328303080 +(91,4),1271208661146017170122202605435804559966834456841747899674649466394622871460713005974113398936349986750767655006181237543880 +(41,54),143087398621373721942295884204839890504232982327685750820265393417614502966057615211718605434743790934529524509721005415384033368433380630986590774485814637105950465978053126396246458310 +(87,8),293996030309586492771570892717215027939566791909166062256786323071680583604853075770330988170753754936443362357336909736200053363010 +(7,88),512503867886938823704789073641041896246914150433998791929244619365835164389268423069517900547220030160995015552193687297484362374724410474260527229948036546355 +(42,53),28574391290763203009189554976083909436247964588802747565633042393662162914536987400821464102097084267817917176438943981831782449517194303055792102984114138216151427839576942465035116680 +(2,93),2708848373489928659058592271902788267105130389338171018442623153246339285837341678176480 +(13,82),444537595697899221834667555892372797300166890129779453731298280354472482356977313002574826701801368815581442854130681282527120064291434152982637189326168151610477636566453383020213920227626261725215480 +(19,76),69688626472260003022579199315326148272600925659319334833379220655384281805494669359406555501774806401260623124938609445083461631599466082250030441499520541162197311061798844151296890055775651695255653117291541849072580 +(12,83),3977025398900125298541257666022781141807373735718752187409363144292629182525612510510784501418657188117984286804443647895375358923129484952112151319821137522482029044025855229444852936061389843000 +(59,36),110692261232979957531340744856208131838796089728132015659312422848025700626881463360410507608703264883279634950236366434541737815858574745965466539010224089540591960621630 +(10,85),2407890946034438707933019594864502902424128712121979162188103130570567547520651597731464272249670090024686182400143291825809881064096520210189184507810999638158772423406294207424271500 +(11,84),7262315647807848615174086760177003312999198039771671621755696731027987361897764948685977456683230983149134682074922224273409284630559916451829904181681678484313750863082110778729591677509095 +(26,69),-260536379281093795063912378710781885617155242184400649796665811956542754551104291063197467360895521803720399866749464732103769859623489576651536468359676136024255482538449074487885820949992124357579078368454940 +(43,52),4268400941090235929222318533439246390284776213734320733859567037657871083605633218558936828194583226945914544956721679079271193508550192124637580044826976858744679914753706650805219835 +(84,11),110261453099442086383284916525152801228241764009309416379449447761120092455652209748382528920288181131653638429001251669064267352567569760 +(75,20),19618169184824312483720369674986292632066332738588584391980567169072279036575061762309752401312967795558501769719683113752845577872229074196235066558940 +(95,0),52377184162780952157342799720370651413251704985368124835554949913501245222366064356517806440519208215878956215570 +(76,19),730647058049646667110959820620069815538292585544014504423527559286154369925204865529447854741739683317595475734275459298819440492794450786168640897120 +(32,63),18039037132579961237043124521312874368998584591630294337062978138786936602474434370832527014793209485155758953509886733017079313963636734736517247133754861241917985560917534007047609145436738042476200 +(14,81),11070007535235744706674896776098202403631173244193198526134578102521232918296323583314641131829332193275627417756954232720296390683826218469066395181542915305870007649016653144596485136440055865492610083640 +(78,17),791449011892371447908323328399178741605099854244200388026560378126746686219431247943475702769752577046092241130610569018694181111781697160228455020 +(71,24),4719833299485194681055598043410205774686573136745153928917530863193263330326872255599492152537184973527309115068740217601175299537155822953566524223185333755 +(28,67),-62922905770638059325795135765044949197094050793320524613779434483922468247012322216212536029191253766159767506462206712438320139739021823770475935888426125756481706469744762526165984567109096649498568418080 +(66,29),5132585906549082043678700986075250969344297055057068148348153381399297457872260363507501267527282137251596005008630246511018833702558962872173380664466094828822840 +(49,46),68209169001937603323161112932808466271858036207728613413972602235211628574673489989784376804320174816474715349221358140485888034678325536746769863210712757405357877043642331192140 +(16,79),95376118281525421871197018291081182925278584505091402203114764213010900102067968558032087681830141573097743253262960457028288997027786620934033404676512053264193605499376160007237404757462889679004408491639491360 +(5,90),33645555110309808255553717085595731257757034275569117076292253276245121201477530382986505738865969359133611141152247040179907117095819290 +(15,80),65391127645411146347899216552994265776168707867022833650203012582779801919931499229082176950939349645878944341322203958990745779669291550831969433060269308363657777134189955168728433561854435791840935008652495 +(93,2),20989113463758137986334693448959671603684269293849384999765372217802981435482646463528118635028801173293257815303626560 +(20,75),331698780173151420719323690541769044649618385888569468978766134428665463162468302634826821448865290736146011076371654143624337527718924370814526279147040117973398400710906351339038879899120274230552073210221603091487240 +(70,25),87088588288300033585524562429364930215463055791507060239211449435584256562450116880512192622213465845069182978772660184148083232113286637050595555683723988140 +(40,55),847656241285546875215650673744924452697123023432800646686447586143102319575959445458047383978871639412688587939698608319077509277966178734740571732105632740523560413466409071504797229800 +(39,56),67729158769355834921215951097167750429414499339487352799114122256954719126479385391161441453179711277081151916824979804557730161754281330139595479848511877686366360682083786933541305511005 +(18,77),3191785763603191191182768458465267091668009396122495770244777508995876896157433490857379162843858874866087855076103246610233162488988991171853090614591547724863617128367118150037023515401700786453963910026119146372480 +(33,62),-342780713987306328228246839190747934279274157288413812156368224373932849139708236763019707303127125969834628339673826388583832639830020912401427137435055132925034428056241393685908517768323810328600 +(44,51),691220841725432555138603771327629006273076554198030670782684695363018447416544721928795055645907835253570986925474027617436019752540615235009463058524618678972059671907172470624833240 +(48,47),440723544763986093149320784666717195615548955822575069242589677964976213572629336349130353663838662181857818706187097778553860880176727336143279792612597020304502135872288067374320 +(58,37),999037044219907013566425114981375974755301776254266356765411060668580684708464656440131722673892774987244395063230668989612664725364017980462257626767285552387668588716140 +(63,32),10011345234953188067835726589794620759938823150953962816618300690798097835972326482225632657953161488222453464084909503701792204914592474774835265952851304960874198150 +(25,70),3129283961537342023280527041574034929160210843167383484410884094557615610731412478288085332088666108163104868835845955106978294697311493066146163913067724202429083916744812855638936202523303693951665562229011380 +(55,40),561227668877214178593233873138967213360321452451256640527920716717647144273632448075698986022702479880141855084192838679301180473021743948736470749459642794780945563834587975 +(17,78),34951601271343904883933775618381341707262419999656521270744756578939911276164613833517074219973059559419371273902008061201074160786573551472938877271528541413535868502446788416396825891268265622411780653911476409240 +(45,50),110594055758288003724416272671635493585597392875583166341856456869842110477669766616131256572197241406251455946177824674441588226389277457290799717732489355001027292977338465297901510 +(21,74),284072189935546164231816733300116551330046890281419268670922226940150124754358285426986324565815621299788461322114741472257635327402134072649514689615784081421147186598948871181520792428767140960020593633013302946355830 +(79,16),22892610161402767135268939500817217417005348265700145983549670399193640657885278079934205512765540673710078001441110332346334488129185727784597765 +(57,38),8606734018650492545334839168199584183370210116218408074322538980980818208250982356377377761892586089484096647115256615059416029985012887817624764440519172332715815359009400 +(50,45),10363229177892285786044466043515904191861017603758766056833597873992782259003185065642053591220674158545000352599987158535120111637827095852587131517691917730893457110476725352360 +(90,5),208714607826680253848054873180667367506550080415064685141992318064364364463300094958944649380624941328234012768760510972248920 +(73,22),11178431036479123269919470620504689785593692995567223253822416565728783110240677641702523216596177391640733220266363458695797710511759812586325418758192010 +(51,44),1539979550073243957682974443897247649100984054623493569500875352209740899227538056339930573541695927183726692312430805355892987955937912896293075984737078014601108191098926190565 +(29,66),289716310728994962462086087436130493817495355533752582135995145810759007993361208887483282348096306499861403097850660006733940918686615537963762769550028201880462280535675903391355826599852124304446584790 +(6,89),21281616242496812576155295922837434779489947263389985229370078186574578608012351263824108176917773440393699773198414602280927026985872679580768879360 +(94,1),47456881567416937213025206936933709448914133164423647985957040190977966625398186331324564297918016680042640648368260 +(52,43),223022385470227532555886657619582175540721279379675514746889756094622034361994236327189858985199887645838050379499810769265278723214603951050725149045115226989794065258390725960 +(30,65),15355986800859394697535305134188979521644014343660469105124046259939985885414445529608227351498790149620530631866485280639680545714757452266796550220183015305596663986054487230364996329313229443707026380 +(37,58),146568910150578813358099181913541574727558372716824893717516488744297325235084322621023653308669264117615504618822653524370448526840711647538181725259236452775751563508684504755396976075810980 +(56,39),70953505512471274807099481929754346921982593656716053777741155576523428081059845408148169879861438496702239417779055420833021373830019230976859811095551847994450694755457640 +(60,35),11679389008657678018530682147722474984366981876896065011586161853895433994585047647568681130177495866977818554985578851666360052682788971290386048950667880550214670447320 +(31,64),-681480530204502821188715476553783375629677916479344866162053988447501197057820142920490740186718551240441556366534747879213683499834123107228232816759165941223228610600673072132085441412080886337563180 +(82,13),317434830740108105016573374123797820508648333245196301082333275917468931650163848429362254841742866218489766756508443752076780767561894893660 +(61,34),1170903925286356277542991951413501150688815978089485275677050849178126728379692378000583966995287852119140156304725314149802307048481728476695074631737863208765346939510 +(59,37),-31132981633928775649050555264229782445588410944930386704065173967210849678823543761386204391300362732920313726522091437171768082737327578673616204195632466740280863377260160 +(35,61),-76760555286643453176318565618546307175745099933472422204238794394303567783927727769430902926786458031878710215548265630216414520686906642438216242249074244500799766241304630719702499771319429412800 +(19,77),9302743373480975085887495490933584505737798311710700768389026828233583606750563128809507891350944836935000246928624157618964843560097536614572227062050259151162126195199578644106116375186910256720183350830447499053347776 +(36,60),277460365140043943314256586376256723691597715942990403296885237101487590484972412654276555137463001583328858266407922712494712798864191516626331424657182734650855163845683584983017284641682233952 +(28,68),-48553286734931776193022683766095088177612317731206522483906478449481235176266985591659329443553901575022447666398118547579322435632659070665354684805588268621458756849362348827633257395435226751123551403129280 +(55,41),-142200526268217188662477911564384342598960300629079421769159364616720220150416093352970913928491961830777091458615678692984433084996744455485853258707207271059455997435578472960 +(71,25),-2176060955450785389637885616008731764294165952018365531640504572829046598580568210105139245558015642305180838499949690299318887772437769743639723206253360625664 +(47,49),-637586294666207283074159780787940238768272282484407209828779871146198515852237211817032465896168835629282590169687031177246727830619505502448219267111705174125126198231136268655992320 +(33,63),-211241731378847272017304787535395158165305728642801836967929027427054882881076740426154629459133613313236659536037224280174838826636530793754303776658020457878308649033472342577510155935318974470118240 +(50,46),-2414200087847789868381685850641125341744960056323851659603308450799389920548010781743252968245575088800373112693368922145977325175266080538937495875310441967861082012582017220798880 +(3,93),376877932421817970020680369822696463328500651324249074451711177641524448100259224684766253477551348471751280 +(9,87),1811022209781348699104835521490931231398837551936389547845758950360713703249501738869707871730552422513425712447560054430189142352226288782659690788409328303811923958799183734032 +(86,10),-34416371933009378354667077071959665427879531606371973849831066481454710228064420858607396025689857262783467416649140474197747146526625344 +(57,39),-2288424443524465567604145253800219672290093126795976020633342767054961747526145528567969795479663582925124791422189435880796152223913495185163725126309013615062311368233280720 +(51,45),-363283217796428864298145413043984826081884791142942351945116362867275967192514204624464350952546433544371524512848415172532358749309785627022326556524977353312295380654364744685856 +(95,1),-848842722501781702620147163509740122988510683838753811779949833540443261976620996726054843871808290194913701323619200 +(31,65),-67239717229504490200448115537358658675489678584184397763287770621273552195093045895592278883944399006836032624895132404556052854234761811654810384741660838668741444988007916234700716723584523679872922048 +(52,44),-53389637375419996833951564663491375946971207558371856978320790690781215838935686118332688510419851389394654174103556083303140911416269330599774651117479724258446899094517727773760 +(6,90),170340473584095280669990000212385587341843134056583236885914664035759792811989481904593800877046740315342864867835986686627590516095460554820817146752 +(70,26),-38137708360223276657831823206189585490165006547673759052127663341128366441973987276797654797241329600818739891191654947609427871631016474264512766324805595771520 +(32,64),6390525836296197699235063717139019418972586382952476165089280832664847523994462835461956516784931914351420736118280432055673242141480872445532605036117235350788314367459030456595782606160071262699534240 +(11,85),156727302695269399124771893014070202859164842388568207699738003677739783699782336858488806045553985828307336002653093960639596066558409616063900254667562348701205196206093335718069322593049920 +(23,73),-6080079850170567523269112351589922225709887118619227687984639311728497217285286741775362671282567954387645740438490227228542742566991341353474503749870400441659682660733689900203649641276302675344583141795654504280960 +(4,92),4537235319621860882727628162363990690575042621749488056008056526909091213932220302971340717783678671789411766559251642158896 +(92,4),-23476506069362881905778959499070626790646079755055616150516796605766378805601177096753562423450489672654006640418611145504640 +(58,38),-272933258166593738619283767725763262290893002635842343394273517078615946437536590794581293331544353804125083223830683273294327970191142944026898043911664286646481840552897280 +(24,72),1032019435975517719419095373211242227903885392170787643943315648533874667866287147248590622700815072594339160749739709949895953409747781707048692022862944565516440573640938571282510535803275668669177516574310169543152 +(93,3),-110319086905424127761460700952105407929593535070840118233954182610347856486130405839282914479282076162236163328409318567040 +(80,16),-493564475294278322148932065238162773458009116635551755906618191346416862722261539210036968399744316545446388660311830615723259159111904584765769160 +(29,67),808894726304680151616378234023471764691674332490783935809212201099532185497564972374511377418902174127398640245242999029007159640976723109895458926925148690408487582867162778106980774786296395304732951816288 +(38,58),-1684288752140622724323423389314307315408768385068983352913880437993324223393324992291291463725256308108234667015642574414922965485563482773140396738533598360366009482756938742540458021654070400 +(83,13),-6555104071913234623414308077353620919782493729674145536270561177970224731931516262906142704269713683470442834947021368504326233886532259285120 +(26,70),-14290584798387521278737147752579630918651504977447580178922343113906124054158457591006336626658045932679784917657906932152014259810419116943247285475419535392228821202650853921848006537137201642212319286193189888 +(25,71),-10170347700722795581720530835624223514817933450312553200833555532201608745720543207378831456142645976085737172522908690101754380656070986941576438070257103818225915345842713796126220811493563844570358224913062501040 +(5,91),217928589505393381617451124773757798867205655265901932637881813150989774966539940888191206359244811393691234270607661279846599863971999840 +(40,56),-1292937025021945662212492354974586760837516489483928629789769708821017841406736155903666504670583685047064038974606892971562352206114728019343214038980531003345528745276416078922964779671840 +(63,33),-3223661358945736873400123179999254870912235773690249525154980697910754124466691333028055880789798290741936650996630081220055226678832930587553995885196688985272015879360 +(13,83),14326566434174280267700822486857855391140743668534020071914024207828109193629165050456584766008768010414869880477475481101075470158390079394723835504803137757149533843646468921185606660061038008889171360 +(7,89),5029996057057615657251852797205048609302978641675641972201744466668959397535017662331193169464681681478291788436482249122088483785919140767722086570100597387200 +(67,29),-137939036660694105004692932823933210334120450393292016859514998078789022463029453730097264518469806750136608367620699855582129184361992762373186100730785423203485920 +(18,78),321692048915343939080041950436713652281249622654578724243015059280920591639200891276967420998873812956385377625512894623105414192607377117176729461650140454415201165966975699001482590765346413511219358480087175387148960 +(89,7),-59235727733996680726555643803189962881455707575962305859338836717767443874792287495861724849442500125802015450117368039895225292400 +(94,2),-379348505995985889783236223020818146565764173355241662338073597892603489971233946127125646008244259770829046334323916800 +(64,32),-284581892234431885294803869300994595472137940840992522140878258573977025180044657860957134328042957257440269754587635461351737009184398197523729943972413717942877480884 +(88,8),-5688122201553746398058428027627413506638329142579304341112350248751309654346215140338825529588263428040844879343048652424656876052480 +(15,81),3215500046450234046085053305767167292504881129692853186721754986256393591746937752532381029064182858846090303919967191904382604070221223742084020620290017708955279297919324232749818834057635710757550683700449120 +(75,21),-11351860550315156045680114966644627663622935054233716482351809973048948706901076566675031362676612753136400143375105767237159295250158272891476082585660960 +(12,84),104692242322984976197342309850031008352003766107260336855307084638662722805792099958726147302665036018056399508824532702609899412684772333987276493556625924554193560518703886857104444199871218852720 +(39,57),47514225953157519182199410123556780842226672902073286599740453032819080597076126957262329903235826425098142025678879203596143200118664880658778985520801967909913959074158238461078151046095456 +(85,11),-2216174518479669651511607192963127834998994528263849650649225184950226208095295416724687692050694079404929762469554426012165042548585414080 +(10,86),42694215543276988473819102147242240234228799222479747406567962675294238654284248014008890933353288795601157269624672413787204796652855127779020777072385873059218722354206070184921743360 +(74,22),-265148091995345855392404211032698970786357288493505200261426377378733978046272557981875176745695310754886937969541682957368018050366655259542080190580339200 +(48,48),-100762333833617814564863209567834183837683270658552945874124384857504936244866670544648289604056733509464029306424981104183809074872975676992605105346627867405762524034401074339939800 +(76,20),-450156916637887748135786810021268660134712750665983056538897190487637482560722523481886455979381037417899915101765341270879669007599204048120888939931168 +(78,18),-557469212246585522145013561043677911131611515405372502272083322803671685346929299368791090910288484656770331857790722192216630467125623509949592293760 +(34,62),4874165682623204336456043203383885892996895310886884269463720003558147182041344395396251120168281727829941438825861616045620769779103391459775700844920764442763524647587221645780348722392238636331360 +(90,6),-525772816335771890176467166820165829258288669841029413224797960454483505051240162453258551918918598761032559071558695865870161280 +(44,52),-155168081368124183340416627484468647607958944661541196699173093525484809659679063561819281087526418944493612160166898875507158347722929312583635442139156266623042617450316443337151939136 +(45,51),-24982479846497174897975664575685479801470024769480853541945822939451176806460766246456883555655233023857697246919199239365952087236522069310469864534156980991561238094414009468919479840 +(96,0),-927389133237338274311794511554836183307188472676415584270961158721256109042304948364054970940741073343218688418816 +(2,94),8342883117984612846957158059295228187097930443793276297275082542599994002127401319146880 +(82,14),-304807943694371088563711859825473544019288545511283952032020332479719792991236602892212388199278677704203486033530851206099739169172709065921920 +(20,76),60995592259738697992020545034931615357262280620507925985043257410266078845377868540711001367321350969179530176863011076886555693238956321604616163382489171045861484445285304362704088775764380985205355301590518574087970400 +(46,50),-3999082683747225368783886777467869969934080058131518695446510901507711728399626180586810138146451826978782388358601103810454269529396211124557219483479908303861331381700513642721820672 +(65,31),-23726230275225847642061302316728256739627630650761303159498887963707879701752893552264305143839696342367583423134890767692649777831160729377122976104647742048254160240 +(1,95),52082822428006437522046740218345266043580955695497074777794720 +(43,53),-989948995102506183231708197482479626951231965875790890289622246353998116173803275571131254587465028445736543727503726600864913898037566368734785047167305358280266041980023170862403164480 +(77,19),-16497823622182578294435807182831679541978717846280519656502071593460907156857728468722713250403764937438502686415392702986209441280908107261204981817440 +(91,5),-3897923281265451795133440134884318676261496327190876634386929168375136437761470200856219249956497939446890902758944233124462144 +(66,30),-1864829553960985073983114636258221405372324157078344260619279305295135984003826474835495857554002318252259685145693363739728699977653732600157474375687845327348708480 +(21,75),77202930332919465551886625305093040732332536651680279782111882854535278983420504277924629817270192902713483001135617211724803390981974082799820476061182592377856428844306481126385134634183447541183753957947597635678144800 +(81,15),-12853190053541023235163900764657720139910299334588183423591609280024875676794543423655840066128988199950701334872733521355954594928942165738788640 +(30,66),-8102570199313424682165553512266433754754033388030730092824709642869546742090605770442843739086364897534845149125688369044537816455607042044696203570462996376731248550020000824730918852389264098036749035520 +(8,88),9736144558096622714490695664995595636063840934997251659395566274512980647232557866213461700883062601067735405950117793785795406314687477625369257024484963724997088933840 +(87,9),-472737998326420271916607971834733809627152014709101116308128307903171350274332825408537291588630772253015877514996664713299877222156160 +(53,43),-7636850902572020303200062131860746838158549305773496834336175491830382097134193627465622902855817125812683601892170241735253042779028540150011232752494231703012693549336951042720 +(42,54),-6001003432355210098438939735204489967624796522003685223085976612356880201002772502912022636225484864339380236921499055037448737269073823019444447046116060862763007969947182257879622468160 +(73,23),-5747969324218460326804171933310510108176033153241515998803985754150764178518960890135866521251679644470079675103597201458045126982259307140815971170306480800 +(62,34),-34550929557561314369792581013549643930730016439989767505154336927303839931732755340628790604805264313550316237441760487343120631260512462914192699311535036737806669313920 +(37,59),35197658499067873579315680399368476454014239271902602135853181249958906746299842719714563885325716129374011416908775360611336409786184424880872321553179931240276295074305406551378171786221025280 +(84,12),-127228262870708175926680247391675105545192783596997124801133662541753991655041995453394571933271510945413112090163074551593657722005856012800 +(61,35),-351057935628243051897851172054140269974812259988235442183306785977329032759743033422793010688634013033010088535501964926021775242331549417378138588263705927160922888324224 +(72,24),-115871866691209738406183767294669761171695120265502872986366534627323647751857535797685562556369681661163989076652087599146448109573319373724351660102702370560 +(27,69),2027657466749400868666955852020731076828514427969221898199436763434846928950480825500674343468095313574878608811346898539063371985176317055295376328342809663443496055483658486937439738212795767755239113331881040 +(16,80),5870837583107864902269619618295972934791391647395256084175661102280515340154088928904824815656634367574896147176398638977240261703345662937689339078172977244103488692274804390385534730234647775670195179763275306104 +(79,17),-17322562564724178761580284510273947018110939531294870533296527754526060568034336666315321288253491210490078001274154276863216353775790759552196794880 +(54,42),-1059704784559459474905739847741967609827024424291518846592707011678902646347300603655384696405975338230318411964850858716407749220609877106022519129306502047519573734946301784416 +(68,28),-9586021178668038407241800495189649384769963770206048351955935060959907934792382727512911649362304842504114974672906788424760563611046833355505135093937439215223520 +(17,79),2728469069774330915032648094188778653785848594010805563378970879269650187181245167295888625098104017644877634722907375112174712910245303164402287070333990613243282158469290289528591268499610158850225933565149891052880 +(49,47),-15724992814556671408223938169602780601591067945643092239458114203564006710937309440875128671149351407042108620357612926652304351095332638300310948468823205906493874710073057065037760 +(0,96),540 +(60,36),-3388356516669103104454766351845843009884136605037024868697137533777185029871680841071845454373254298775611318739066704337928303248244692176473980852119491675405197908127680 +(56,40),-18397666537653834054870013304003213317098848415851163075237920605137102505948525639085642313621563192994535292307056978218891346204604236905914226542217198628968236536456448000 +(14,82),439095158822214663135309107471122840660749557500818941145690399050237562125819991720466503149713028812143769856154387260893595341559332845930598249428964716030043742914687494574096449409882374140153760250752 +(69,27),-624839016992243886340043141878330374895046057436339569620592363450614186910766834699986847286533627405044758319028205044176689595057272352416935299494201465432320 +(41,55),-26578910412822328690743832090343293445228312868867976008871965391904135013275352187760393629342735377772092286554295855881164406679933698896634561466119548001616244018296170578188176043728 +(22,74),12875464574974366935085095232301830358991300055594912362915418986447898267446741690850153979766201369229349746239905472083400744725742373242848795389703139259416028068760607310134092970357570433568055215761555821459646720 +(66,31),658292982760733030414708944012370861925582253267548193999432369459383040118692191218321413275884397827210191831513742772620432046620296657735636752945771074940511517880 +(38,59),-183598451441275980959196511294548811834215410591439395127367150949156944840304708800212445224294911408854833449599295163747517712367791727700691323300171555198558589324417963375050406350348927536 +(47,50),144549172091808101833874637637625211412655713361607697339212659514503218183070010034480440312270416317916072627830529787521753662739189159349018946257120559530273430645388662665717490170 +(57,40),599449167886995676817801142909875239342942895491225292872511586604411393937881249501514811818194344411890808239039673177171934394408128139922033377441234224579397149588514657562 +(72,25),54150328779822609805408687764775910210121500230626436412030253061634409263122133392490632664049612672431503139249672039061977278211802753107942831899381641202788 +(75,22),6268061147802889628104568825400053063631966547958920055461685084663562275953667587888536968877808971911727450214723096656734106123940857646169058815022454800 +(28,69),-15154735717038790810384195388028540991537929469644696169856627924794318148594124669540004773797672961971895648378038521436542209431637146775102406921003583195630028336962708120096580441946745635614589532372563200 +(15,82),152883980022813620643059900705324763419420391212536599906583689681430384976111363588471735595986193325391515958892239455180080437908542411570358977914149019185119997927721428774344357358443167363180878784908945200 +(53,44),1841948334852806061212835653888849111970008903476212039070034175605640356090257757079434661086625777117177924872304368282589772245641254885353992293484419397379409746132188379084291 +(43,54),221951999867684413826668527549824673496184568248025343898958106455234689607861657411262642369053471145762759160722315713526115316993670090768849865144560687907458493815265554452311096545800 +(93,4),433522901450401736553579914923084178974221153769197080663219351127776559393205697833562627733680736750747515729715096034970625 +(45,52),5627803258758350019978127488129842083718598384771993171838286790477467895143522549603324930447941055964169808107540302807965599368583506398129123244275513077029459982628571836106023811165 +(86,11),44494835759445532177323225597478183523232572556504366672403493946584726219029715543686638377100382795889217560179580657486720727953332095240 +(88,9),9253207662807287684542309964937526625360807283039701521944497343556021456446862133083604813419337049795516545313510887676714057243561300 +(16,81),348006085760528404622631043630337825635170043788538211792955489977625578795939728438566538231840245628817306859598936207136840170319207449114230975800263894374156421810720346170756297263377494128518032347357110492160 +(63,34),1013431741167124281355658234975899959453396347137869070025746501254286834142139814867599972182797294407533420768993075219697167789211394975248392043059328337983572733016890 +(37,60),-14365413510674701798064691773456235065963070076546607141265310631277534758456359569554018532084920076757751440624810017540474533850508501912898909691029782706060947365070122867436784071964820613962 +(54,43),260122750374999143609417099609691296626312167544199318311890878284741649437867636145003634873822534042276246834741099700864277239277054912373075504147228575601078480097936447694640 +(79,18),12360528097693361457025542132381512603640929626440286180240802932417819438420586397855022056095402302383299509818315930034456840023445443205794276504090 +(85,12),2588299016925846957096775293238147398280864548106737950921684909870239958051343264292923965854292770067510848034301420901096413307977699760755 +(90,7),1131770456676367750617799721801835687546448793304324816889611525899428599128220192689502208281681379177610260434445674094209887705760 +(94,3),2015284503747191937206524666996202501702008675245098518331700557030213916991744383310972243375265024362930369045967659382760 +(36,61),1274518468509059751828107535099866221617073859607515724674083465650757217872927235201299650627644964630747436321174654990280694149658582210280192469509924109673150094151776591589492638547908513746600 +(31,66),142532968339815431818059354111552249233761095176823202691224918616539117028962081176187516905831049976027002507216173235184186676203865828944610576773933225470908653209118445721640084758214857445147728866120 +(71,26),965938854618235427666842035299424002676705786574481806362671370742456289631380923806633683325085475830638424250360116973696576696309194422857659486764250411449690 +(29,68),478437369134368006886393690653153305746122922751772765295093238600511972774735723660189908816906403461996363433429418007180487947277808357062312726569603393381675899020441619845072127969134070910572703020815470 +(81,16),10619715504960880039479532029426587696346516997983698175333287152450715005060772766928882667283262903831818684212172018543230256509886598523142276000 +(84,13),135169172630490633848968432585474320258136433771818977797563467700589288859858834837699991089252640185197325893863691524905144219283836122550120 +(9,88),25930391033333328083595389157694641216313106798639195007680394656003891168518303095952306503903540102868269565264800479030660850952543919496773088094067886193012598339012383547940 +(50,47),559336410097917312183279968624114344791241585129658786340231696129675192300230361847467341833908310518745863657305793983715204453577876682466071804055251539966067936245237073380575120 +(5,92),1396071413210414214767804643971310679726789706832830466666051906765748113444828175659928709019756564992420135050028751137753391387363428595 +(77,20),10299372174735090980300638566180935727072860371544584315342091735695337513681773713809774792908998188602792212456865789640084360825830427679999432717373599 +(44,53),35294258171069174071521008552639116612616328009041773915682467197625801636139017174091793558769710469730217770875362143191490234351338603111887659700519349972060329192040492896773348388300 +(12,85),2688964673318235254413265062443573069246839955894574455425501327747282541875772590877174663995421369864803839755465475864974128735262907081836574662842611993881937560545293822640418489232768031691180 +(41,56),24710108994556059457974721288168492906874417247256823877233892026101326559952495273951995477154055928970843231867515030555663758391305586889157992075023829862241002078547286508684511741002810 +(49,48),3609722382824645241219581921069507566018248627604418143502587177840400393451312579229434339679173971261064054588486487612494616882346649683167925676564440934168750612500472792028613640 +(18,79),30874587994638377806119488278736450007093236136294497965057677773710608793091422457772545208974671926802980265575963220392738185989036092537900273071532135424187446079520289556421651539939150081295610442870294436530931840 +(24,73),94536892638098215471748803674763253917686590318018723285180629405758509149034243232916940763753522041355272793565309410374747636425372329980490113398333937201284071804235556559606492609401578966437735279205631616604920 +(74,23),138185201927273052154113887914860556700152656253759915330151186615007327752923005111643252327256914094275306120108506387503440097256270378323817609099385854360 +(20,77),10456227862634901348340722803255424604278376344590409327494591432519984430546241670271153400638860073045343259396645093291234864986982086086010970069538794851517327367366453158864723047463950429951571854981462829664187411500 +(64,33),92823157561810903019563340409788104723219039200492273906581038586736105757966819644273710422301501216799433530848588459861929344167215085621515626422429938262723246629740 +(13,84),449306285414853973153458088471444552150417337884032703234636362215424219887610297176878834241548095315160020217296595275480937496188904755972920483347604811293137707806364009220753044517086309874508261816 +(80,17),378295574148161437003714533071676269268607493695369810656727119156588959621656842384475060179252939121305310083309181508842904695292295214555519022520 +(10,87),741987123154532517251725144934609005195864777090471595996725112877993883125853777379639146824878623426954754917418557727810820212610030386747782418256398689681264009770981205443737975040 +(30,67),-9921353473379429052320115055732806777734966538732952556164969356132492926853182695611646044969809098721190264656093813478264857202397841760097866197697689437760582284575098643812227983878806057919856218682840 +(73,24),2833713167121731817823718721313685005162715998472356539904894801407189017026375733081670561109058239552640868782394875813677785339135394820704046280765456664137 +(8,89),114742801500155684783010015737882405147489144919349552755589158661328766979183120266051565417197904683493988172045166541860719738408961439527032172259365472812919179501560 +(33,64),-50768516421971817735466448511660516664619211447691228591135676238764125293553948505578423203485646709658080303274015228300911400536055691546262882176283751167907613710690920579522459718377718673310790148 +(59,38),8601340402477343236365322577167594083253428746053902625593159386652195080254288492080133365818780925717068835504652739570941802064568282653013896526633462678533060187201080750 +(23,74),61104451806460987068085298919546303357523379456669826690356415056448015748789417920821756806832399025175262040092763054919216779569798843883442956769279450312648207297882601390747699848435960751535768441514097662141697034 +(0,97),540 +(91,6),9929275310302747040722255209699233982855682087867909103051511666651606135320173148562317363991145293900039641273414983259873909730 +(42,55),1122708537288420550627831842557382633423321356815728542974990028050179990203552939097695957968636376840382636684544611146706772456103611764114889315753417605179647029937547861722103710944432 +(1,96),113079067418578910684053065515389107139917028828763290365894735 +(19,78),1172510577089842986836203632117160206426109018474579203505830152492722503611128615159708270819474542204326740054623850174629140852923468107534675506718819275012108617139598540445685395467770035472276063003271431207083188930 +(46,51),904010370786197289528123901905882065486072215646847791136620091447860759778822523670245389461040679765920603610100694566629362134231265597656295398788102245170407998885927889121689699200 +(48,49),22964233808500227382175602119933294531686004520893600895897747185823869111104353610316238499612701460939093404386847164068447641216925103118051799097054390349854500319043864191696402396 +(87,10),682158440019670150052290707718591675476127887638912076788017474463554095677782216738300881829458537356147333171151986111159237285183528634 +(2,95),25539670708142058776863516014428453150759669687477274563422018901294119706780730203681280 +(32,65),-565630380302969500343425884549937939243032782890113744539767675999173320665315916629277964027687935414082956411641014960982685208879409175402619844340987495265622904816317458146943329407289533755391091808 +(82,15),272569204052908825668101531219841099762591510647479060907874003141119469532605437714689307409794809454464450838453354725509862926319209266255195928 +(14,83),16898264607799418087627931997119472396578330825227324902355218927198764918947669093045587727561128237347284762948070978994501489859044042115166300581696057880971990245306641157406129273248521085901463841375920 +(95,2),6857165399827336530020044439397457172404038994804208422394047889527164976487468760023926448217121774731432349700868459810 +(92,5),72781648350721903195198332587596132309732098170862354026991382272264047575200043130100112296810136815175011313498455201941187180 +(76,21),263963274592514561142426372846253189137537380105007428596374570051733322397822847597889859863957639777205810131519860692750984435717934467243601745592530880 +(96,1),15186708709598071491176285173759351476874784577075701343424357074343439593753860537841924223536679712619198037478350760 +(17,80),204105330206211399957516237511666477001119813073699539727137537874262842685720541237646362925181517073533429246256677349693483483527286927011912214802625026208435447198019023086768080052863763078611686924717231762205814 +(55,42),35597611519626559437362841931574963355087793005117203017618726765323881333859613000231909231316303389310267550003325351197760837588694662369628325859443099799436283007733329738170 +(60,37),964161920355250085012128492140939244017811492538382182457810105106368192067629436912055095525987364285349803910184527129808043575172619186356577531095745118117803413856239640 +(70,27),16111310655166338830827942450665774055162954098997090805945458028408262900825698418320179816020314204243243674137176683625498946338522804444238437550186706618078680 +(35,62),-63943992419444811769138096981823643491632254487725746430933470842930117432536777397979895163250400828777105281052070859992572863533571311990017028765861474131775605499266630063705868376740646329719600 +(68,29),3688447100522782017174492196261284814393270709109691582042907765034614251935789476576911864221994587683385668456863792619414700655373546584415458389592305959674926960 +(26,71),79502578466491746292021563395957745368710230013348798944264764826385702240071029397343304690516534175921317045796673714167365261026921400510620187342584496831103868295210218168164319192744472539408948937808807620160 +(6,91),1346249707432068101655851689346184740681694625658583227636467245427608505418068978330177587705879520707654608622914500250867589278493060070691407357440 +(69,28),251686276291318370572275817543861259176874121466347261665138858899969233189785973428943073962218875583127011147947031645629339205278758209131992116350473482323667505 +(21,76),19111162035527802218140276604752453668792042950823921968432550597296751556527394978883804086110686440238002991846589763888903647837728709592313899433881270366795189075834639904326391231692132487743605643885407616458877719765 +(52,45),12679232732950281609938221293202540250207290156949155616550640829693905965173345748555872746952195050810461043473451810626582927631614251499372692951594958000167195489932953360203172 +(62,35),10487753765993103343236585799323234269989432046477323054835836449640250504435977205412327250950171312012453776076487176254220898393010475518131138422506585557531031834134584 +(67,30),50791546924627046772804706165937249097810060403359336634781202322082968167077274675543906189734152306537970576663356278287176561582908047491369147932176763242413018302 +(78,19),371523158413437578504775136076186946025327594918927875755299689562095228792858825179846656843490323261225214377770095107517648237658399780598191639452328 +(34,63),2300457445420107140280027674692009454918853224464510409378135483329065148276157325898392504410043037860375321333317836671697790613282942261626086785935140480715769444873652537301241859031307442914184080 +(22,75),5292982416326899636673390041414774744066723654875402171494954337033247027083679423960637560432744740272382359979574109595614488825807839016094096472047247047988597031052528721982050935992572674664211113009573351292758405528 +(89,8),109983254980700291726475787577827321313995947447188518091606211807748161235702570011490599427072159839781726834253747860467989675238240 +(58,39),73352552420213424426941246883647736016680517092643483088489853674504369150530806708587137469288440565770229177840047282180648913108163299380887486119682994586913075379367714760 +(56,41),4706456927643935832314578219129025719658794593623002521901520753284379852727492076168670042092712350097035858228516417666780158122020856453100584826653669908066411664787172254300 +(65,32),8043724778959700637158042848827238586829592276733292944699038663703563293772894402452235708867750493606190480294994294317476082017555399466156876535141518637451418987255 +(61,36),103078894663925306067351555718094692612331110957145926880429817750408329324201376753069023602248368313462504074698247105988012693253854902380207546386444166403240077513623015 +(83,14),6372876599161423908903441285592194436932422619396643515366937070371234042891239691873802786390122507555100695981400848341444576226237750459087962 +(3,94),1518446609238481367451979499912181670412571350506963334005057349458659398315694526363901114483064254965658610 +(51,46),85125708924268083073161115445188058307096667025189175650833377665972503629167562960690531976880474582877377352498587144234929446337895523304807207329372132060270734780397028671851310 +(27,70),-119784246838507923372104746514786468883098432202555858717687421154495765479256450510001872587986981766952339885534414766261566347833031340176706918707279021382129424941946345667163440478617668289086933185051042460 +(97,0),16426100675818433925503873706690344591029578223092100399313466179440833336247760698876211854055073942002365822308501 +(40,57),-563074650040177698352943369980229602514901715040828281219220116660944449006952027709626115177752886620517914930726738861940508400020002125856332944824026411222910401131801879333222647285116000 +(11,86),3307984620284680175322338190693376746203581774392843475336526948037963964023800784736618124967936320115608204765114070029894311693150292044497991601028910251835996663087205218136476811275322040 +(4,93),23274787271310181889794863655293183729293405050482236873053430364359759051980434000218122651917701387217456932759048136877620 +(39,58),17561896163967285708466555947774123293744353450353303379384290251104518949329851213922312486511026614323847728318933644247722445214418813485822321547219170047560921102938378313009413396004816030 +(25,72),-7978437704237190869827025225501096736926883631617170925327276919609384047003974283345382248163633833048102217407210196276767404069143148724675063135192271839275159031382283237963102571466608959339432778625595204477640 +(7,90),48662714464441124565420305581571589704432233987876414741261162795792282669146630236139787513190636293135366503373361084731762479415751479111161649662179766659460 +(26,72),61176631721986804284636188915456130119677040272384248905080931811435277449611027223300482926715760546904016868158535172283578139848100304927995697052014052598526295495918194275013609617571213251543189226805348526066760 +(76,22),-147689844574510295334571752055484047579047820371892719692874793691758235082937246113005943005684422881935110478656342021562713647720551542654352463366887911080 +(47,51),-32723270222786692749274896268500894563340127929859041879026327081399756514810470574778170069893473287330811261268336092604486747721994463068078834875535665491730335936036504535485245081536 +(81,17),-8243350519550494186858102907212691392743973169551184177840432361581445735372251299762116000905148031542753174354871588464974403582753355991080036633080 +(96,2),-123968548321749641647687007961847034212255813154235218560362802684214473771492135769102554875274074066355195459052362055040 +(12,86),67423416847104142458391217751812813148554457945894458587345304118240350427790175249754580818647992498746365005062971359793627853036963210639019496119895504731766938099125550884767444656990052551604160 +(9,89),364771240969255486864072372386958306304970743927804009071781183308609304855836056769655778387064013882528513381877237841368793354624102004722937618286030750219738912427293217727040 +(3,95),6071169297632683074349678117256703108692744381097249571825086981621839159029868491839055327851583032831870144 +(54,44),-63227927945534438977541335407204128454762854598798730626356862549698617749601651170663049359643892490372237782597019884719481203733883035112451420606295670638721537001750122945226740 +(78,20),-234979327830761618999361229207088360765056636091938576883577637529798736507410414582933054150516791036339184686066914843572813353297151163095999785683908784 +(27,71),-743301265851683289643146795912032757066989675443083072095711154905350133296365627366205049824425487626939621575185776693143330865298075109402455441500036563255006321461844285882642042464856086243182045167235362772288 +(39,59),-1321070769697541512366632315898554937351562145804528918720653845154134328967413985890832111202783349954499043797487443711916105736054692277247066019152979928094855373932966093773113784206667724480 +(21,77),4341546995943002464533689310594092077936305399755314653816031458745099451218706256575068514634081384848846662159558070368690582881350361278132079868915877018293486928647814491762734454469315342008660375099020775811309641100280 +(16,82),19887271128255059504667993686090367086888792160118682986099284526013146616176947329017948541677348051595674494258770265502924214561512343261442693868468614830153813499296941401563365026390100757194829535680468885745600 +(30,68),-4546010808176504271458508507886197358674633483938817526798064651476136829713761137560136561020445349848865099217868402588033950994705773201839363982867104337175895965884564285670189795759667864030702997338352100 +(45,53),-1272425684221256225810025994138167371401673239711458766468641406481043725735795854056889367664432089312389979958734409639353377380163480277043397253028566139734641299047275044686071872023760 +(94,4),-8004853322105851935976062190428969813259678719785680514076527418662822063158841319456448106327702997973148844073150427860696140 +(48,50),-5219888963270118993537754558328764794186446319190374985267004616080472566101972275193864276354140290736388501375584296834496769135426358152122437306929643077421367913967588492638743144000 +(31,67),116327346887738653387323911402011056449294792017040670839931848072727797214536457052474284201810854325387547255746372265061623592505744696382823311876586499278284496784883208902382752898596804891257863835102720 +(82,16),-228046513814724905781152895471252767548196114375810332619362111289111295738875454542107032705314917345602054919757633939846839151821917414769221456168 +(69,29),-98141814856148557852809126012451145475584265273629831770237631503112682643702521111199293294462538752613193847678341410955164147825849239712901537570723203955304509160 +(0,98),540 +(95,3),-36815860829823315386140562188995359068776137906783542377451382776622903694858986109549205732009713667006791937663043251118400 +(43,55),-45267187029115958700182482812515303777841281548485683890217951200748832918324776165685729834351192116350755026783762480810150859301508939031499527122036402743623130878947212348765115341600896 +(75,23),-3310388827266750259159440585218230488655265269498342931004923881942626028195202191341896869439212294538749413077459383392842846935705114808773389552351213732480 +(77,21),-6119181740121617155583961784422811524854644412398091257972417537796722998214261917475487521284422029267355360900768617105329362533722407468740647932740001880 +(91,7),-21613740888285461669362275518792075819222624325522189380587267885890185910763559579647052770716020152685951354936176403173564461035640 +(36,62),779943750003305511317968346800417622216699587771815706407042881692665912119033797461212488061111928522015806187435184207928622337106446404935769706018337100636914744151337839493755690581103651914356320 +(59,39),-2336799128515747773520067104520899512549102687992511747993601486076402707396578698941010151863616833111083343502786607240655993090372195650815486349213427544478030229941100321280 +(62,36),-3116699273598966644623811379717472546064410373534707820652332949457047269925009512983723017739865372070358537462332215723113470346194763341729278565655538509034089664818661040 +(22,76),1898323912794875225772136911260527293532840503738386986824883449731429710637027415219726010008531383414787007671156586411585151106478566746535896420998253085320967405795031333484228184012566821914420349471696105519604353209216 +(33,65),22550493982306901877193525283680669974012618375841686972540999678148692243038600034013428188497093417582442446645346297778892651717292716412719514695774249061987603835922742730732508151784206565502346837016 +(8,90),1331025033996173571391268737777215547504653643172554422596713034987535767910231758331071001313518939397157072460995984136646836818952868721611035832964351243845629038712288 +(73,25),-1342127898220154042699611564703426280024719804333626716272168391286050674929546699452238336226273946579234348841728645865525210428325720567425132332755000753479768 +(18,80),2826762689051110749542832471775519750189816231415361968653543608329249119856847308596403431986652660004461014254981671380831006140672838129979422019326284399917158150079015895137899425101970233564694211109048034487662000772 +(86,12),-52590698819261909392780654456912605660953756712549857299349653497806308538773628040212531780199483011837861799983331406070169393497279818991520 +(19,79),139878651199187560702557615702058169221482196728762166578360532868477091039375286790513312587426649736872637239029711538768718820155976209817169792611677784470078390800635782268508565818547879357752557493349466498564892449920 +(11,87),68318713929782704818280565863659311286389679751702786714625969372969736292202543336073893872148472613186422503111025860809162545861708306280091218633127551137392485216451246898299551384387584000 +(56,42),-1188999670949360049395219126043376742736454095611635569343330792834508536752565544922780972947357527318323760451935369028807178075781378173384869522606307855145774980184758721191900 +(10,88),12644431031494049171406454928197418084788733729837448348381777815952491172606034104679927014669280175532079461097950178742068505485415351408692341914035474374421008676595476492975072442490 +(38,60),307331293072164122881380141350646560639412101862680223892830708643022120268165404398041314467752866645418262379744102263088076554315156559768421945955408861578187303547676130647798119776365413650052 +(7,91),464194469955089800714866586992905206531689000350989590594296684106829380284414144535071207455327511237168913037245560990160228593480340096974392528509395785394400 +(52,46),-2989448367314438626759546363428195713512653688357338924650842927341975495729517268190530013757836740236005525762832591165760210723731129290927128869923359206764994930665243813349014624 +(4,94),118292846948470640474472284806378515450241126373064886400227319677554123338672353048305627489455803572073453664171373340734720 +(32,66),-2130991429780705995643941424395587809518603861216635754825927352717164510807868898084056930147862881027905922983243232512719075648804193433312652598306554494090473863404652168480104006926283402653941649072684 +(72,26),-24361460184366773818957014595716223221721702554489319103721145681115873332620549656618054512547940318112183800031644837413449530496335456018525138391893119252205840 +(87,11),-892383691078715400845998953145449986848211104640792770654686848579181244440018366405695987143335112102841071039997320421905390102367034120000 +(14,84),631432394508991717914624029290053686635503418865026968119922332240702346500833683861248416074315401248549658372159724741785173241756033988371971381933521751709460364212815760125017989373440967299885029028910740 +(79,19),-8344755065244732127503176102272263777946197217481260698171292013137323568142269093520181885528605565080294202098658569976053673013132043798493618791302080 +(29,69),96516336637924910868783818623376407858859951951559311903832873050774000995638307589350346460010022135610544735339337161852917268792984493046987614557612022210183804971278817812281061123526168010160790710294506160 +(90,8),-2125300995419028071479062401741065712511930751624269314082121999670255086549873191338039443953412579773982501436525792360746969847726310 +(97,1),-271772952064965801608771459616178948715251275038246826368316176553557504322287393403628382458785118546763032379219884800 +(60,38),-269394491265934398923433556315385267798500895420260971938155763033572565161896216563964063413423300553881288434015780093102523084742668111579626679280830543250316635285977159040 +(74,24),-69039980485241910315535706000861765084489065979707039603319786506328352153338231810146248156325164529654784663407616988483554877267118728239451411378895747804890 +(83,15),-5769914545983666653505176337168183237733100049638310242325143833050583959338526270399434945462689940471223250744491456835393372347302438138788655424 +(49,49),-825578913740648861941933970809780977335940043804468434426953159884534408418675429061203824699943288702254609358075220437672932083052798373999979389063290823870932764091472503016516809440 +(35,63),-22677492180534449006844868725951448270781479699911797690207338330632071530920369942053298803917533123752786278323877777528782105966205718339146709433710046163587945572232399100381993145057136727034256600 +(5,93),8846922734436867634689410609183055587675996761013331997864824423189784678082118249991430528793742660286082563749344416102155435861286798520 +(51,47),-19827759511663377069988154889220129002286068114830152500490579228448730077938815005703042737933731113125622859832896950331509234467010294435046461596595549412150178133552733989604772160 +(88,10),-13508633755013179629427901548795385304972425764340641869280932519764242862121053973343484683000424037130397502905649826016222011428865769088 +(42,56),-536113024914736729730746510573511799729818793860664250375916091955819141652760829150691398901829629425129923315579741262641972382055720226475951886978270558211088801435126164621148688899198494 +(85,13),-2783322455351262065279260166261470028220134187777343967458708989508309670421933703375543214627843071192978318584940469768136241240585498379072280 +(44,54),-8007739784569741552368119799271108655416701409945115548419433744999747919961366648891085913851480139375040177359894039428525001635547133808092812186088837790863322741262561956763320935858600 +(2,96),77718503397017133289502340220317287689844797070359618657498889035570444673995492681556940 +(63,35),-311438161365928877404432256059985173621532977422079781773829091694109154818088945360723554949049529646249175186199136605481069691235239275009903708480147636789650547778855008 +(28,70),4149308502099616405300217924326088430047703383201748641144804223697671904534536721323063175985997349802316747761171065650456790196524212042848904549518121388949640661777550840869551980577232690440208880846343529800 +(71,27),-413569822951228329809134740952443634544561191687961251867103527868143147043059697022617908504537733001803121130049246045862060137708176040773613819892249133781945280 +(92,6),-187452774718238996064878953732267081523588527389659810217314137790418188360724155811947964961614106615039668490921289904049676859600 +(66,32),-226094886096534564576277048121121850165257894147941235107299255589784448119667633899376235682770675611297579102335040051108769559771259964496896565973179365835771493104930 +(93,5),-1358690729305273974772402306189247974432225062220559260161728303510082897154116463567761423080162401199397454881180270095965523016 +(34,64),251875851410141125343614094926989189895071161169562140674472585332502292576118697039511579332313852638226873268430388609891286893589556098096316249056868310018800501473244721654057777020061618912234276230 +(64,34),-29550843735978825939544679123516468692275105355452082926399180558603144926064020090471484942162079054132798292628667113930367275952010424490937657337804797940919250928213360 +(55,43),-8812379708146243320905615512208202161648543629547814554639387719973807019738795624395085216148419463415583907283683980153730379394992096377856256246507043488756049917526144374481920 +(6,92),10508185057474976479094077112758757308799744893694010400869725841526286418092804829371447334350170965223738301394376396822897519644476679634543535077440 +(23,75),64257376260887146470468898448427493489887742295161426130598626591317091155407904897348231741325013363472064501534856058907667459366277255456069574067284428959146685580055383619609597765367943976379793280996263791786481582272 +(67,31),-18166765479042598843714587477138811821979132433055836439705207257284720285352241017373170201441344496172056462237857785120064648533468377975851789323958621435310060232000 +(46,52),-204034112222840191740563772652608018508990498429467794696244916889511806585541472878366362242304479908668805351727980459169116077464888773436202249037579731509094079432861352362440177992740 +(13,85),13721116882598407849299913765571452171986187713030727954515746206386698374436398515489768983867673009661003219855393783109145720405197855073279801553466292403021790409735796201118530203412242287885391601176 +(25,73),-1537796565211230724730580976619325668656206375047613216005236967538595120181187273615049765773122348887827227594856444544766097103596750579241440667526444758102638490421428300059476316018650833747973969399616495179596200 +(53,45),-440502441970937222890011241372210480347433390199594174200302882624689938017349867804791307292262546841428349481796741362939167899820102709654011067362356252098839251710222967737117088 +(65,33),-2657483080567060657925470658549687291898572671223049748229801185397631132519026568524527673989676169758516542443966238474289553520116220215638230115702001198979545032905080 +(70,28),-6577094866495036340005142465005877833681039071798134642164175847684025857715294967684558886195449220601976756861956702174930551750336076143575971248591735653317424280 +(57,41),-154852340127993831228153458519297615538460418518980872186707660493401033201030964337159915191111749095042466710994719433962338846616194947229474486678861137043333501700812947140480 +(89,9),-180982550445440514455918680563831153331354841413874861357148216455736278709452945671895268177120538901260058641550049439337960383207730760 +(40,58),-160313057897194076207673563548471407690572599558598486196845509992660311899528492651997520728506398513106395586832183262584545080269371243144964731950044879499562951222240252636702450878695800260 +(68,30),-1376265734292641855343436446463917545841814495443382157327618143436529901693056272656656120065116642333896012232904413619837123769748193575842052977830260358085476368584 +(61,37),-29675541939645481952006098070929640630561109663891801449175868396878404743092914443716839896388286843846712450419566011408670683607510127121538298772764256018691683937155546920 +(50,48),-128968742079627971593851108307867359738005321304465156093529234650793678238616298136990203775987909588250206093358212529196868805004871976361868386716853627080976550890995779618818832430 +(41,57),5154832117448366728527021605598544716797001469599769630976773122545972259402019492831168643402365510900612912637782340316719160008378581689801835041556421261772781862453538296324098774241378880 +(17,81),14650985286621643361442794417866482308179023827098008576412406281871833089433793309549132820518122247863091026049538787340763334216951840842017687141732491712749321001844611614973405563520746796807758153383338749121044320 +(15,83),7034778669222543896465599008047524935773651287105388749213449366930268937724027734078586856985493841693699437796005230668198047098800208359191550332528053562609751540513207782945373432098239394235138528694430271680 +(98,0),-291042516768280412689648093347549506523752488002860442482965536777893645695855556738117211067501737424529174788169046 +(20,78),1677391667306441557069876438009802730144537106697579423638216749379686544663686420757428373780035403446291750182335115674107062634846831444550945829035659067462795509175158504020628524705165298366713699158518801994415476681920 +(24,74),-321827863491251835284674435998213511039461927565938535184302116949549832875264724129234520335516562884411388997606863009653199207476990800552726948070940593223650530619089688619019489621502813556575054479996566068030098080 +(1,97),244531548692984733420914123580024876670968975306907827489264480 +(58,40),-19413680360772318064989524680955724872933528837849905609445118707547310721838941263382588981259298431720557577169804485287826077070211599524154093566606906720659349853382785088986 +(84,14),-133031218220233838328801838947879988302778419977108982955275859069796848248062131768764952845792998272001631724044604951789830701181561817075596840 +(37,61),-18769590767293203308435073576092647274685932776936567594675818602399956962415833289864164130525211350019082898601589904410533136997189841423200288352496065691242884797272696591011723161520270413081216 +(80,18),-273410675775747556787092926841608305938315948973018274024839549533950149644017985804083512543786616748792311675815996159574368195254410823831298120772780 +(46,53),46072596552888334174752163003477451856725395476494687617100094213845971900058395693306186134420503403416690384097244102736600165660491299568020966423482921032751550376423195535044142145087828 +(59,40),624934088968818621901187340370788133702119228252967932204251365814858849480863618226443665832562635017559937298868617105978405058766161768573658214473378450422636309687585889155014 +(42,57),-2093335113071600684390829904479927937741260773213384490688522762530210179829632044007513634109837069419281270522025182396766938624290573533293300126434999239488642571615317595239445518861552100 +(35,64),1677853184535906080560605993096495500149969196923382731865372412738250334573429704631353711186401899613235194857320197121850007534200370978678237050354691660356981081510321912234492166171145259606260120110 +(89,10),267271408610503573561538000876453748912038823094153218728120905351557768540258239788405150658385348606330077343666163961501314873473026601366 +(92,7),412575013044921072624003592563184445030395816824623463932746888893248464254223464593587697844303052093546213586641733330042061552396000 +(61,38),8385874884411022937924993125023732116371186065868886028331183634817905806315370486749377202447412033288231546615207787251508571847008326733679271119444887204446648895167664173984 +(66,33),75655162502711777865556872391648537778976716766248734341038612266248558231009491289755425410211721106647497886514964315264689054255534565091899179799406223016655366377577736 +(55,44),2159209196498535246400206641163424569864297389365614132183367020906696844866168041975468885089401041279633221344756640179950001169729230964756135957374628175073090953752482828642037650 +(88,11),17878891727377109008249799786637592468002074135921484753189312720364853175864040014032016982114967681243955459090583135366330111372397442535380 +(64,35),9193653943493596332090041942879621775997252855807530180199032066627882156862335180072908796721198272009259816234185026201259527565744311668782765182776668255599503802285003568 +(41,58),1232805269399072972066603404772306827092476237435838370138091057367237053350538257993918912806775656070390178578672906509394213101411898491759923282630429836170952601165350742943453246099143789646 +(10,89),211374260708772971805395335916900489209024282304076638285461898252794362292340335364467079952879193052708338766986121132168446152560732976071524181579362216791883621225164864866472838502160 +(65,34),856703183972140422493794750244291321755352893002156486125239838730380545755847934079270943755998404844062400382644391017878840684417362550980614822960318004953070648743266330 +(29,70),-74089900410652551794190517832742889930006227677412203995486937221009578021690895606447361745066556555087639388010805230315076375234928719104956685456252523036969917788437842057791844811205457180917769923052425542146 +(28,71),7627940712742924139443437112634782306472274219004379060686093653279399330807915653710929094854271661619257651119829911144949282816274692471143776840056191008169857181478130277201282628433149946932620408337186794607640 +(79,20),5346262703328919068759257692249376153764008773323633814253627631916390730567658745759511219669243724260565210058568481907478362535058799179613342802273578778 +(58,41),5064829127480833751316039216748048750429668668213497048597463941513587905986030550912783562442590849852536659567942947124361761451896171703670802289957791098760584255503118907609080 +(90,9),3537211404596465404749313845261867238038395422203716751278120388062763530400464391020223665438475049162425607818136373582750653227022849260 +(60,39),73989565166789424483376678826420456213074748934663715281005928933742880054508919683735442634988856203114377088139279061769940453745265527365271574929743790772029210966519280535980 +(5,94),55468934270122227577341253637379612642944574150278558346932268326146474707669013552103294650847507389351418660702203337316270349761815143680 +(9,90),5043241443082402161214720920263324132059893713302780951073591796062221959693522049380545505591824933529599703930183895234380798215642934796625617118011581202226226297555707517681000 +(16,83),1096769647435087480561540775742530499573898104365713134858175844230958685598037258953530881971328623530009215106532929702955257189414971504926475235789211875626230246712283859583421542821187902017275781647498280414875520 +(20,79),252665601808322216932144514717732078334896957889940460949435657495249530884527121013086267669872602818886779292513411742291649023199697963293565996923858349787448093041833942169919754203808525176246801751426899921934215423796760 +(69,30),37103935268727144017618000044781770666227827186162413363451602935500197179808940821779592149479173774809186377655019206923197630017264066262126509685273457774742098628756 +(83,16),4887603639923744475036637503040282737116821605895431560215299367949876680490093303185182721044203449494617203050025395237466463613656489712257294521275 +(85,14),2772660352384030505497125041458402249606511534518147868420682206930209287624879805463584599346331394135882529947910886988732804286217653647337034730 +(67,32),6320563180529109945768379301037898258921585026563644203345337245949497362185353066193883018621518559414449614430814924619544593816182892272202399991126124923865109770110830 +(62,37),907816539485270030609557439151225893636724204367909852665137439342612518661153874788694113475088662904283044473279801987077035232206619006126052907566786063237636439965128536400 +(17,82),1010449987154094964164727259712374596221165799269269734032145882968378710877515807744222266302601597702359263864217314294407514325109790887100605934626193955214924398742282117958880753639375019202702599297596173969039226030 +(93,6),3537726169141082281795614221805524255651289267020959229646481307938857385450423013888674041865259878901853998408001466505079265896420 +(4,95),595768354557063799301261765816049150340131390956403733272124078571202136535432373471556985537578911140485691005520388915694464 +(38,61),253536041252063400004370628346361934640958136715567867624781118064968875604824682452442869333511059958186108060174078764141181962124950520766913541700364126618206450395367378399797998853727016915508420 +(91,8),41044633064065513188739373705084659318872762574186580733540667613984711922748578380803023899286367777583368820233692063141308601923429007 +(81,18),6033664337767121588476077863381183804213774868888848198926376848120231009521426467269661036590459326272746094787985876620393177110064106304445880734517890 +(31,68),39977098979124109435383251900163803983993664480153720468379814371934415605617686487873601124752333782405246954933490487831204177547980248572616312151866837645541286187129792162442669187556817224597249850345886561 +(47,52),7397319729780869060506162567097448787889461932188231153244456574380126821077945398300487658287670986742780540486573686736174841281462289075672975288710937378769105459435286954795327234508075 +(15,84),313535461213895064171765300965614005765149975850105383523313997911531485438641816750233835546984566529078909611494358358317606516108542603005098204981641170206667495929370840748890272034837057510228329112684930732895 +(30,69),-304140528225664559354134708402179075474911804800441121791099114088900176944290082276152680391385543549443042853387867069385282502970878562069144945251729017916827660770538077055922055452073785219335141250263367100 +(78,21),141432307563177660447992586681996776468715042950752702170899995948500515876424843719205836632275281389348627970114339613670375219682717652951514965555458340480 +(57,42),39486231681171805355914326638811112872262763636197094592614521122305355130919122700322246806701068928819135212030447533088825715143693137776468062726966415238337185134884626023650510 +(19,80),15830500941961999496788637264101298665371903609361571399325844730310099350272189837654428904179530390625219479912595290655432899563798790087343678295733966385108882826211667796705067820997797610365468287232604741879844862649965 +(11,88),1381255084067892881489129523104606543619388304356961568199869901867726108622129976911195186110547114522749912728908760469559058082518186004836423320231028251518316753219969553275454112426641041187 +(22,77),605403200888445929507675553713651123014702190539224384220482566618176609201245932430358008035616830364305445502870394838881142987918678795823039054275382798571881458164152420620465393478903558509944753815375275005311282310320980 +(13,86),408273912883681995747470910534144613438710680109248478800061063535261215416960890880649627967611268387094990146680096198842426982464310046078361132164608879564310087680702647882668205755341120253781088527820 +(99,0),5158516539476866906298552989381097922151808041538751198395565311370866914804809442608200763718077054611712610717990332 +(12,87),1651288683662227222228509600638443501574919510471994709032940881882874249904082042572317513632851532770621480576379893558490992812401018482036422478149961474505032086153406578798748732111484192233557280 +(63,36),93670216542832606043336170625878233734528527642301534423468805805651058441276092347489992016572407302310780617884496828336204139830449997728858440029410992460844572121471369990 +(74,25),33135282566519882768749775447470507207691415695696721452217260563482190335245954823232524371810628712091448115191179938907724080358641210546493145413757320913582944 +(75,24),1675912602097520744056805216579396342489973394098211752511988735241314980907829669893321768432128079759459208336234696898610886797331210860376465504562623552991470 +(39,60),-5215050855746344287603513000388774523307629140222151347295315933393208817133405799599727396729280510132353764573712074895673968420236061271157350457753948669691012262949840406311038720592408594420001 +(25,74),1901848413746986432541258858929409578677407064590554592822406542070999914872066762260141022287206498235317838807488721341344198838659674339677326945471003091534074190371618344390463939853525066930964702790048354012665473640 +(49,50),188230033773364001909711645464359354783413114378244731759725905968234767127835149121708421925363322890854570183539795048283522372920778006981261264590684478861846364861802480292384976943522 +(48,51),1184089150321328917329590556608695940566373408849992168127066916574197967844648057661904388238557051630510921915252020368758009765451912034514995481315776568311128691858668769467718301825940 +(53,46),104535589475916833809021822752129076651676526977993004156933762600351114469785335240787108187515008221789373316277217924809600513105680038201986978180200790897905217668065167995684242910 +(23,76),42999034736135409590508176841484944502062288872163729463885424053444756076460792505279996917656569393646073029915545504742997083053662274243923949067618438545297832755229676456067790359683350979479964388895471275723888367764515 +(27,72),-490599277775181265825751314929249662448928882644624531853998258009500067549225560204368308430437198250940971921813411016575163206883258454337696165409667502977685177934799272451462896418778538137025060776827337829345130 +(84,15),121928993887404207388786629737930450541396719969743012569540454124411814190020746596145142670405022423510617551763018494269034399091346112002909441364 +(0,99),540 +(1,98),526719388141106450369638819946707968052122580516490129627035068 +(50,49),29612790022779751258089957124419060011803430446747576652184025658188366333954700631070583845831880407895522708352935044848652292843224306478829308942176253358791767350794891005533674790900 +(77,22),3468767276756470560957727058067145602164268189381939409432312215690078577340773291236057356604020095740342698943626866965025599750034722368336398724987282825220 +(3,96),24092044029039899537107433041148535361213341911575837091374698851662213443128318471266653537440951576117627295 +(32,67),-1297212967150361529773311756956766947774544558963921645395432855801985632830853075430828725327912713553915418415692155291365115632691568944239909847733852095676407710197208759525861090252499863690641559124094800 +(2,97),235117400130369212664421340955273619023205357670128734823887167368924456479845002754215620 +(51,48),4593867688299119717316150429035762007275491635102749185366669094434503068944307686068838364421388943724192050048044773399325458661576062557827992208787567071842840310724485099579675531860 +(94,5),25358955691872022268195267705845012914527118644364692580583609039674666739431788831544438782321208059238570596579775767177453598432 +(24,75),-255414979990475271628483193032955069123160492553386258546089997505704574827657641210749918982594874130078079593794057130486939907637650748910825750632404773399635288574902377456746701952348105274289480755288212632971541336972 +(14,85),22925946894155730666426459604602120755559430885147931760548592633329740751543983829148756005960247466367894703474231426664088897954092382878848590159985510152432044131228922355588050021507467753956860337340808512 +(73,26),611869531570053388741432827657049158412471805150343575691504066412165021688719304289082371994755958694720327973917664696736054450753551349408202137688332896408800070 +(72,27),10569806016930736092520871898273576293180918192917851908277758039214882507777215828712073567926262834639634860249568178642898999785871886285421125586073847152225955340 +(52,47),700273121752166087207718419732719251913945020374446936586679653287218298686048913642866817832811433810139713367156648863821561011726795631396279454266471869482783273314257027745169255680 +(45,54),288519361978456837831741875337450848914246665168862126393518725437017979610363325261612170190110013984106834304353133209800843030547988972232048158182909680784235058872399570079300991805313890 +(8,91),15201993851249336707376539149602224325855161430593353419255424741870421854613644820945315219626447800914320139828136032478984518601824928107846546010419511628483862165212000 +(71,28),171083665764632691211298609919068274222035401228730081650266538190563121421211499772425281618002221152326350832326618989791504675892851823340264740482746365342298200209 +(68,31),498714845966724157690820700953090962278794303513294376856229159989347037405216339610230826672482156992125022217673484755905966993905108806015849395343312920907445726384600 +(7,92),4367085503135471917930395264305215104116828704348486171023252050157130763023862828963496010987574858838856981874188287823960652694500085611448850618850840501088240 +(26,73),14398154583286609775724499636743569373462584414070407358621442271613981724172017777018241372931612672922132634496318483253106253597311557289987914302069531310857473446263623924318504328559438167064638927319992604749329532 +(70,29),2598761009261823213144791995561283041970233266311452652052955581713468517403223320029006626050014650398410325321435489686481903411753917601145413194157340403661736620500 +(56,43),296907145593615203114650881446530760604342020665577250809948573369514783420645950698001543129868582042465642195220302027752810220850117856545749952985097175473579597208613413454992560 +(95,4),147794485379267205930778025892511020959625473426091597151282382587430541322117937531864499967484121494957132078969576289645475005 +(21,78),910710290048002853648030162465941579788089334721005884094503644848148214782424432881271267792300703279644826858010811202861385001947447575040988044647164530062808326531071251106215396736436428861526006074127026373907027755751362 +(33,66),29013898195574456244604915787663963560557010703207834751801472676802292897630414163563280330034098454805600942832153831983609809789761120510553367470951957071081361149747157926712300266475499580068200771538260 +(18,81),247299740832792569359389730791945913867929576956387879141756501784011245283691718451809815223528188459750098017849140959770079461391283324966947896289543064032391549056700997480678370581073637858786872639806761685901052005340 +(40,59),64934210867998996351617151147548225600962305674848576231525300674978501231419048853502085707823559463984892998917478120723113333448425374383262840267604569892801837579611279590124537068065302472080 +(36,63),188110418614185823559612807193207755084501309100666586814634447443696113119317097583331834914259421242938611753861939772815649587736726973959998288503202739714449750287530541207871769392252158692219771980 +(87,12),1067282645856286103148888133158838079907510705827734190224930006532159623053378150845956466079259857312961802445775534829597025187102521647610675 +(82,17),179247167818521035764987542805171561670152875807573630432863957393674270601554336910536705087321995413730806729121286670036022397382792182200416225430540 +(34,65),-444770404916930966564742997682110722915667821404299331490174847351015379628485964625790473491013950549740421656758187786114669045150941449572144554762647279425543723052540904803884553990241854474307334421132 +(80,19),186954981432215265515679165938324106128992685048119537198580761749984093385409834217639865973876019124358445449279956249779695320878010553836748059902700080 +(6,93),81025352524141748173298167930615321857015088547093792538918606752868529859521084513866957751130354342122828020832482328813459449533532219495870860203008 +(97,2),2241494978874814362774772220542195172326821084956340970741245846761693303443046951624430855432961323041521191703290252663510 +(44,55),1726096121766267910672944056718429042847760286578660775901631878234321971357567690934714957359686823875669456583764470075024586693392404835589100195078725839332422899231827467069291549506870932 +(37,62),-8785179510302311461811387877990550803981521733769510940174666054287760372357369107234654881291426462653963999155127686443323132434921907961394314003918586098693341606191081754690496760789804740103542430 +(54,45),15231196225689486593606882350565358806981397513841767973905861758951656538146482008401403612545380054636686307044783482340961390627066377576644916250728303712808010824244658688771471032 +(96,3),672583404318208426176806305136781133541599227610488486782803880383182417480955832760813119489938399390698592943066352782851200 +(76,23),79032119341643032296127341827779871380071071196390432269711136575805343129531305061650004402553176420501414860467375439013442960497121154043578618171874336243560 +(86,13),57233649374643204891844414593924064775084743450558242167907265391473543717087950648856589957630756936803104619644097909272244854694893067300798440 +(43,56),14140026131942162639897156269059363623829960049884852751549359643167904573983253226064846027845913625143730588212685217081643732853797793489223403818882993761790762890642141624085949494015193345 +(98,1),4864662788528375110531274685010026228699168936774474777962980620275075723447550699269706279586832102500669247241370760580 +(6,94),617304183491163165245711342348439241006274905409515238046472552671209311624787766293726967789352538766718718236348107404801857658833950955551721483621440 +(80,20),-121311314054240143566973565336523727875881211531059904094319045292203837780438013596562525851896147337969833319251338657070486800525546687951058802436846631500 +(37,63),-974919469473913921634335847765270888784732528097133032119228677903405588140682176562961593750128894657689004050365797644964572059724629984540151750662045157182255843556852212794376369333589026504929524480 +(76,24),-40536458545170478770625999808549409782617251518049450598830343297438643392547497576046012690859225916013559055647546854647736073965706072064514199390470145036490560 +(81,19),-4178135989881341353923806061115562778406804234768310828777169709698524212161347677136488978220640944386718213057439335860505571883583078006920040609233887360 +(99,1),-87096572106473888236541729526790389576940746687527824802196268637572573751186525453431328694500183561856987214704710874240 +(53,47),-24634536341096856129719515692513369615564463405892091801075503825727909020380254882382008702123759663636510524072065789961260999703413331494845843732621618480134596499579678740658412906240 +(4,96),2973777751865438616830432601828572818656932782625709044135366434840196758493113664381236167079649150030848382505369946136826240 +(86,14),-57700620058563159909356300364646523708992797848573458829921737741469350172541330663090788903854398328678596403918565933844932571157252106848374196800 +(96,4),-2728521246839266081789333426761069867289144655229769880399294400115484774273080050260623094805317823480995377764342828352645136160 +(72,28),-4430248289616918353809394719412108843541793933973377605436721848154345514280436748607219130686844922765454670378566931641843270799844313279525685176967912359732203988440 +(42,58),-10605383451287325314313807848080024080867423219551078766919325180557237571230037668935531680704989278616391124751551926147958787323607943656480439515346692001558312299988314006460624186664005673760 +(5,95),344159581664800340403604771199609038331620308639214343973378845183879590861255928884639429084943294542910383148287040527335627571022634908640 +(71,29),-68489932967000428899744756580993867945656276629735544167644977869990155485039472406096862398062691277528734856624123718316941058117838661464820513019100751551119689120320 +(55,45),-524063447887504657532149177563090052365385903346886326638018887611928319455037561315831465516781849967112581137991084744270525875102090262344250564038337906889283952102004144830309178560 +(2,98),707190536901207647829837674343774129582159066610380756431287685174671071224004624477647040 +(100,0),-91461158123783137122697397476857357418750633461367914322579026697369512751047337367692277761351484717813209296148860000 +(65,35),-269819452437041441236379610024393264862117221430915807094692093630275083746258488258575265518689564357071553741614131983450598075436948568079848378909981415335596012831203620080 +(22,78),173985048891485057916281123171973087146694855883514900066296501549625831249049185286151603567688796788539727581743541423688293725365023604779463449252434877215259424857334445946155869866949386837691496063355785064145390547903601920 +(46,54),-10426806019895498706819877069376201250770194036196989195411415549486244381640921554985644886449070953376082684704770027381067028365539852511780842543723656598979084406764578012181301964391388160 +(62,38),-259460825897257744799324620757917430691491556970758483644310957325749811492667024979210475696680435602531789648661673661184926178270528513826189949044616892490456203179964906875520 +(94,6),-66744825028628943735554903214310816346006168307768256141115900364133501687839216711377735242477826375102697834231077453238831920897280 +(47,53),-1671107930954065297311229448548203924519712698416938266890686972580381516343229185282828167618851102284943378733874978840332504305483101713864773246706882135414081582155850997776649178052209920 +(98,2),-40534250767843618963639557654868988485519975139998555288333420479652453882453412703030269549759201666216348218962064297469760 +(89,11),-357838239355885313077261651769718110565122104047605907217316219228398214735661334165737349239990568756134573611334300219130383431185393185423360 +(30,70),1101094328598040820522329327285596048176566238390627760101272456594329391987469205117552361324216870334168109118811607296547979993414171013175709906997165990114137832126632602534421352792623887442544132716443875616960 +(20,80),35844488348261022473992965109858434245335620954542481894075450163450167431608591617932074309525628358903650307744680040265916631312980244877347614227997873619962033051882050670539712189194505868469804796647783878292950949210531680 +(0,100),540 +(60,40),-19995887868320081623454296205629391346064786541153336062549159844035033836776265294288484067849995670494315440089789405581552105038865520979658303155934487218899777459663119639760960 +(17,83),67038517693966648518524441235435626986027802365556316502118326308388135985019147009947181391820109934096947583611083382309446902358009078427696165012720899331969974583304589043109378903815632433231196985162097348954637826880 +(51,49),-1059381371844544860289681541267058101568604102204976782542134366633984913177997656822022125999113818553777440261756901638165564128084344037547525243798431322935733351368134129476607265716640 +(1,99),1130164099088342316440054929471427517904818794869892005361695680 +(50,50),-6775013856489575578663285324005791929259388570075541138640868429197969205958973480636576494415796499411062310016903889180145024181314965517346460464104989700579007758983751066350113401637760 +(61,39),-2328527176591680261712514130187720641995246432010511517178549453768259415399223609619280078928200782935417437025207057882243189393330101895115395754003911743797604473691179767732480 +(91,9),-69083180419155198907752636443466254601973033074492158299260087111451190964750672826766227594822548692139037078093545297455606167169204916480 +(45,55),-63912113618592859886358051253016184583821189481159482249841035073874145578099077560520936803298846973898842781443766872813091665970720008408588691384168171555024811896396249296001137399192078400 +(54,46),-3639090738768004022615085831734326077468832957402077025289381305321700089328866876930528627681227796747710137421154866950618945732880453377990211686047327845514666003109553595354259166720 +(7,93),40530432452851166221655359874620923848721221403966776914567868259474989930964548595678726417627721783968223639613921128552853479829099901019930260120379178966876160 +(31,69),-5228932924303038699005338227199230010922500618905266825691863080872123233352741122125063111685561620088393078703154537390152585858997606689321026575750118765516006250934105609619435716007354337676027321063086479040 +(16,84),58429860278372440355634321427516250450872490985512999113128560408902852307457773523578272284560544626551058831213040415863624549538031342374167067712423025566390903384005207815742066027313792672932403457593789391692144940 +(38,62),89035434019182077293808129905378037712684822767564182496274510576207835443697246209189855648572534037003785300406000531094724205167759821856854916836452042970246053908778791588635846955686773880939620480 +(32,68),-297992465596252742976032279612798731071613136189932916886347652238335918087204588465621952142880472027402146717556980482131949973835209282223788168782277583691785959727948438626306680430714113752951895075462327940 +(93,7),-7871936545711657755988168753747876750909486453264806575392381543392200856112895356259467259757077955433829857180097112673945268841484800 +(33,67),13570188840983775995670729622643099489862003817495370526635417483114111051631150073653341896928056666528422544964582585924014561089671844792043769398990780261633981394527013525855639660030884068567780449994655680 +(88,12),-21634054222972832787301279568433924692160186558974041055626979155215324765336842004362355702633612489933345654812284334955892393554818664037472520 +(74,26),-15305871808277524320847655491589723423214261973420101356937892807972467450413782918347595296504304176025128336109386151753483710290941339499284745099693494403345423520 +(83,17),-3889544357316574946498824996926865555314259234614798866216696382633102265474858385411260426910788976492619026564309416496799959681335041213651945783127680 +(78,22),-81215719625355165548099245128450581475673768640556817230930593234031325092364498367330989570975400012425625459968434127408476762798384061024578550274790260917440 +(13,87),11843689533829415103371342332976210836164323516267314222322841435019966974780152072719370844069983501637576839992934288034584280431607065514757496682373786507657255594262167308160746023296582506705155193469920 +(10,90),3467553670816400800916635652479270447498247556403137097879906686210265356403991777899083349412444827261075954060200000892125939137250163752346576860956408596319520786132613396707055645611360 +(85,15),-2572214958882206345192709924022881705350756202687833575301883367522194813184093553273615956901876287288865719267284433490779600327057101768706867795200 +(12,88),39522531808853661894780047433232438318898916245412392024391452300503011884090581512150351130813664247607457448000716779705808065827460336138256965371185981142552155943805641008131260292942228206908477760 +(35,65),7145355414102276727329919651435197170293502044944994103884534361642233037112241700361581349084749621203779710355583364893522095316458486232425332861889278370652219407424543661062519820069440857999909900784320 +(56,44),-73347887914227363754535551107994536791867844943255766938457665325173694824972876715588639350859650453252870294231086353476676214130321275527936644622316138024725953943908956010210028160 +(82,18),-132848952065246251428435344130978879639646210305354807320498626804492669588702965835282368810285731448106876038580043714173683393349112048186616446112374880 +(11,89),27350145617984607134866939726729200951960326429596232030531057750473747824882005993955060125198550777052307485801614981427497385956095079506240721182084976675276958556657928193088376877406181076800 +(66,34),-24695652136232799618064142993882956880589977004645969167734826968827587763654835230596370286211501137583355532638564614631266244111054114182890750088028603994170535883204681280 +(40,60),77963087667753908162916734228049148849140001366199379843520362911296763319638753142393803340467657259198389997484633632220829101581085700887307464365866484132802562751597978726217950403025559468256200 +(75,25),-814950708379514230933511224352355519231456892290010016540967916298269496295546349481734413050557279441008827240092145570614004847847699115356512337054864903773089280 +(21,79),177314694828781641903809193557058016979196307455631584784548847004557323455336488881153819730554387989619599013002545494953387084957416664086744897497125001608759039832818990100022274260429974296708896445754158184549240026650948320 +(14,86),809365068153866694074619206702000584108747980775558099836257210898206797685911082655591507717917848828912377041463523529263538833075628188814343130467689035302891887430047175828615193732472628485873392320012611520 +(59,41),-164677104910938155468123803158320014425481819393052093726483996438026217937185686237061279099766539397943003124158940025028840053265507958876857393079024370055152016134168625931567040 +(8,92),170999768288736469073509997354384420492135009332034801553442361319095413856900310940144767689510642587292181985267928125858491631451549616934927214328611986052125391582198400 +(58,42),-1303760050878895094221030358735295804399974759162176363200179817081475418009070231671467556235370606747767923476897980907217895073757734186172804390167944141562603699014489032253618720 +(73,27),-268985629411474200190978234228782666999119883927606578384195284587223242900143814962165561773025915142519140868803000374462236966402153664237143483108481206934633559040 +(97,3),-12287672951681574618196561582398232678136931356142751530067791830318833006848554351948826736495746452395204439007436380726366720 +(24,76),-56924112541032236616997498171132676735173717634473479333522805761132346762517281102774048484336985482740017195328593923775706241007091428327645896458158626626726493836895756342183895208636051063067644697713034786060934165873120 +(34,66),-367947262460003630005474111137131052644643154998481800737422378330675170515167885063646981606533582371451880459815531589197072267378723744460129028957616200702015317899094510448686999912199130766319347656723200 +(90,10),-5283443775949313245621538035975817700102954053372072435083421387498605183599117416265017441812620594922026627379590406846018311733317120238080 +(69,31),-13620429714491215494265117809425014054079562370900858979556152800286298328217782463786836024720232160309703369385113622818405994865173509516783242661109650391226633987814080 +(44,56),-440137601741530642758469604575122088906060711827376313792038289113873487249538624123505269859608667820920476048896729628303536990320172373822412733175772944719124015813200319550368796704120527520 +(41,59),-1446024551614918495363509543259457172983998246579353612459940183603613456884910665806130284203343099365557807164457496486501481077132080074712719687017086166536151822699756238112836177446097771525120 +(77,23),-1880489746552643932031188321017146079898291563756240213899599142040923671716603981751317343992180639334122341379262629820510560532116149467987153380254295786705600 +(19,81),1703122322490947606726826055338744544921896817634268064800428838089242458902351424153178726459583392573382762039744595867810739636838973349398933093847317200948583207079181573921533529769111122562803264633054214796296976165058880 +(68,32),-175751712523668855969640221535877286931248233334778796566186226858046350593103593975980844059283132422256880073705513536215485943131303501602998204362431473979890930315750800 +(36,64),-79034940767188407402603950087529508864754037971598427346096546963357091120784015398505084326936986191205038697795721359109008179698266136450615630933059855710939553273717025780765854525396392426826040391200 +(18,82),20704965252654654334046841099851117332602654794130240145329733987005195745507792481496422457776967909255417980765177356432061403912405449792880769617689227573659176256584137251255174428635833108677944780594344394262445585320160 +(67,33),-2141937546474986230383387551086641217165912994631719321505790976659117172200421454641982623456366173643191887124417778896725753282034044211112621549200250017192389641166454080 +(92,8),-792209419006037464734107475544001463973332519532164536244919275727025842325706099322014666701857322125861957091663914563504052279229182560 +(64,36),-2798514994084094844548222514326316097737437877419390599865560791890507904591108874843970916295781836197686536722627423473663743176825204611485612761022219470826855808340302692500 +(25,75),1767675606375479941810258959769515992612703981275958337754863927158672610297789267041241471039908495972858860213861995341612571364595572723961495154715016710226949323482387685395023603990236274633953359389297879135980635778240 +(28,72),4106388866352561149094985161151076627139066509816855105611264786699880088559302266104439400272498999980982014670562297664629110052740467714263536117786677940090113728004445691990011775828499879003827195732439150495468320 +(23,77),22477542827365027612791085317047024389875685317044510065355440254537390713417662808443945909081248228161345018049244731808499506348762240817720268498785432352711632612627424266208266440455061718068983834020409351631452035550452160 +(15,85),13546474339001535824861680351767912084525526034082609521682146449136263465786913128145884955465532000679026076774105057233391245152703524229787254024502047350385440162526112876617445162660171707619869263435430683127840 +(26,74),-12105716248201988955444645527722336248201668560615904473478889945925740379133414191627696570849769734885279379001810731905343277441207114196739771931490611672059250823386630241859358574532673442106049232346073111938352749760 +(43,57),-1945195365798107101443944651776311878774843691598061765728967950253961392913188706494488590179661793791033778408870527199351788735649227624707589665448038861108610446223627285447112676683652248320 +(70,30),-995386348147756594820052458598837179976639180961935262531179614310334351340042587771733216478926363307814455626409340492362458889266728965389460356330219464985000958218880 +(27,73),-99464974154438037586025867906792860855020428723649387437560890814729752467195841965234911023793774442040032460059438925978552512682818229790029221620282723663444928297586809351413822842881070438267372612759776936925676800 +(29,71),-80794411173100468178376438794551301244727509543210745428978435488347054459789190704573262316363777964332942199033491106591974960136854909907631434053287066855611258669885061039982540276652908142972813630508303005007040 +(3,97),94897867404320909926216095020099445783871859262275296061040858749052946802304902052413940807945410499729300480 +(48,52),-268145527663935872988067788934655959519596132949916392651084714955032740811213973925980690352145989062348287952816618946644141809877622481157889198924861443219211830715394842012628476528882780 +(49,51),-42806438208790732734105630691897920867915657409169075548420610873479828597717322148759535307789874439578544768931706190775399658462001503467564760137941387437827009087080668659102826493030080 +(52,48),-163087521830168278763036508524142588649768180727457703577237653613440020545545035841638130572193555678828029046228736037994592704162672868340576386847427854952569280894330813895180297644560 +(57,43),-9947880818447258550335503255315506536756839623893693812534631594365874998476020711751921715253866025522207990581118535818266050162638596146677603972494203365045553194775360512499095040 +(9,91),68552461368243144496972937188308987776778400459886764130740161115900538509073503604199196419269655377472419348332375910582374372393189695757774663106945922614545707710092794398962560 +(79,21),-3259419776478612807696268347368881135456355144662130551345771477551029378497736353570597087300611027670641548140158954199456436513896908149550242497891831503360 +(39,61),-3171569582868703543628693486611264621310111295208899336467516965745378580384927626720076941857731524794731775828903328977997546357224560255498608472181377957769968814642305632487020792477028538269960960 +(63,37),-27604588940113594672874771337875531899712335053815470678506933216277847415212669827415502348283585682031260424087650408730135585686033328208934728832821094252594668535531376572160 +(95,5),-473212260992964915887860268855705440965383009143716872816782295542372041741003432518156123129699161216076568454357056015269921857920 +(84,16),-104556304686093245202487525665488998273635771097528918582023786609349971989968351386704351279232665516716038976747325993172465828862379973838275884267520 +(87,13),-1175317381682250528254043949054306113505209123499952888453545792424617387965913335663024598231217998498837819547445636105871554914967243303136906560 diff --git a/ComputeGV/example_output_4fold_cicy.txt b/ComputeGV/example_output_4fold_cicy.txt new file mode 100644 index 0000000..1812545 --- /dev/null +++ b/ComputeGV/example_output_4fold_cicy.txt @@ -0,0 +1,382 @@ +0,(1,0,-4,0,0,0),-20 +0,(2,0,-8,0,0,0),-820 +0,(3,0,-12,0,0,0),-68060 +0,(4,0,-16,0,0,0),-7486440 +0,(1,0,0,4,0,0),-20 +0,(5,0,-20,0,0,0),-965038900 +0,(6,0,-24,0,0,0),-137569841980 +0,(7,0,-28,0,0,0),-21025364147340 +0,(8,0,-32,0,0,0),-3381701440136400 +0,(1,0,-3,0,1,0),256 +0,(2,0,-7,0,1,0),16384 +0,(1,0,-3,0,-1,1),256 +0,(9,0,-36,0,0,0),-565563880222390140 +0,(2,0,-7,0,-1,1),16384 +0,(3,0,-11,0,1,0),1875200 +0,(1,1,-3,0,0,-1),256 +0,(10,0,-40,0,0,0),-97547208266548098900 +0,(2,0,0,8,0,0),-820 +0,(1,0,0,3,1,0),256 +0,(3,0,-11,0,-1,1),1875200 +0,(2,1,-7,0,0,-1),16384 +0,(4,0,-15,0,1,0),264780800 +0,(1,-1,-3,1,0,1),256 +0,(11,0,-44,0,0,0),-17249904137787210605980 +0,(5,0,-19,0,1,0),41716869120 +0,(12,0,-48,0,0,0),-3113965536138337597215480 +0,(4,0,-15,0,-1,1),264780800 +0,(3,1,-11,0,0,-1),1875200 +0,(2,-1,-7,1,0,1),16384 +0,(1,0,-3,1,1,-1),256 +0,(1,0,0,3,-1,1),256 +0,(1,0,-3,1,-1,0),256 +0,(5,0,-19,0,-1,1),41716869120 +0,(1,1,0,3,0,-1),256 +0,(3,-1,-11,1,0,1),1875200 +0,(6,0,-23,0,1,0),7031308168192 +0,(13,0,-52,0,0,0),-571958745987394518574775460 +0,(2,0,-7,1,1,-1),16384 +0,(4,1,-15,0,0,-1),264780800 +1,(0,1,0,0,1,-2),32 +1,(0,1,0,0,-1,-1),32 +1,(0,-1,0,1,1,0),-32 +1,(0,-1,0,1,-1,1),-32 +1,(0,1,0,-1,0,-1),32 +1,(0,1,1,0,0,-1),32 +1,(0,-1,0,0,0,1),-32 +1,(1,1,-3,0,0,-1),192 +1,(0,-1,1,1,0,1),-32 +1,(2,1,-7,0,0,-1),6048 +1,(1,-1,-3,1,0,1),-192 +1,(3,1,-11,0,0,-1),459712 +1,(2,-1,-7,1,0,1),-6048 +1,(1,1,0,3,0,-1),192 +1,(3,-1,-11,1,0,1),-459712 +1,(4,1,-15,0,0,-1),48600000 +2,(1,0,-4,0,0,0),80 +2,(2,0,-8,0,0,0),3280 +2,(3,0,-12,0,0,0),272240 +2,(4,0,-16,0,0,0),29945760 +2,(5,0,-20,0,0,0),3860155600 +2,(6,0,-24,0,0,0),550279367920 +2,(7,0,-28,0,0,0),84101456589360 +2,(0,0,1,0,1,0),32 +2,(8,0,-32,0,0,0),13526805760545600 +2,(1,0,-3,0,1,0),-832 +2,(0,0,1,0,-1,1),32 +2,(0,1,1,0,0,-1),32 +2,(2,0,-7,0,1,0),-59488 +2,(1,0,-3,0,-1,1),-832 +2,(9,0,-36,0,0,0),2262255520889560560 +2,(2,0,-7,0,-1,1),-59488 +2,(3,0,-11,0,1,0),-7041088 +2,(1,1,-3,0,0,-1),-832 +2,(10,0,-40,0,0,0),390188833066192395600 +2,(0,-1,1,1,0,1),32 +2,(3,0,-11,0,-1,1),-7041088 +2,(2,1,-7,0,0,-1),-59488 +2,(0,0,1,1,1,-1),32 +2,(4,0,-15,0,1,0),-1010523200 +2,(1,-1,-3,1,0,1),-832 +2,(11,0,-44,0,0,0),68999616551148842423920 +2,(0,0,1,1,-1,0),32 +2,(5,0,-19,0,1,0),-160747854336 +2,(12,0,-48,0,0,0),12455862144553350388861920 +2,(4,0,-15,0,-1,1),-1010523200 +2,(3,1,-11,0,0,-1),-7041088 +2,(2,-1,-7,1,0,1),-59488 +2,(1,0,-3,1,1,-1),-832 +2,(1,0,-3,1,-1,0),-832 +2,(5,0,-19,0,-1,1),-160747854336 +2,(3,-1,-11,1,0,1),-7041088 +2,(6,0,-23,0,1,0),-27266234657184 +2,(13,0,-52,0,0,0),2287834983949578074299101840 +2,(2,0,-7,1,1,-1),-59488 +2,(4,1,-15,0,0,-1),-1010523200 +3,(0,-1,0,1,1,0),32 +3,(0,-1,0,1,-1,1),32 +3,(0,0,0,1,0,-1),32 +3,(1,0,0,4,0,0),-80 +3,(0,0,0,-1,1,0),-32 +3,(0,0,0,-1,-1,1),-32 +3,(0,1,0,-1,0,-1),-32 +3,(2,0,0,8,0,0),-3280 +3,(0,-1,1,1,0,1),32 +3,(1,0,0,3,1,0),832 +3,(0,0,1,1,1,-1),32 +3,(1,-1,-3,1,0,1),192 +3,(0,0,1,1,-1,0),32 +3,(2,-1,-7,1,0,1),6048 +3,(1,0,-3,1,1,-1),192 +3,(1,0,0,3,-1,1),832 +3,(1,0,-3,1,-1,0),192 +3,(1,1,0,3,0,-1),832 +3,(3,-1,-11,1,0,1),459712 +3,(2,0,-7,1,1,-1),6048 +4,(0,0,0,0,-2,1),-64 +4,(0,1,0,0,1,-2),32 +4,(0,1,0,0,-1,-1),-32 +4,(0,-1,0,1,1,0),32 +4,(0,-1,0,1,-1,1),-32 +4,(0,0,0,-1,1,0),32 +4,(0,0,0,-1,-1,1),-32 +4,(0,0,1,0,1,0),32 +4,(1,0,-3,0,1,0),192 +4,(0,0,1,0,-1,1),-32 +4,(2,0,-7,0,1,0),6048 +4,(1,0,-3,0,-1,1),-192 +4,(2,0,-7,0,-1,1),-6048 +4,(3,0,-11,0,1,0),459712 +4,(0,0,0,0,1,-1),32 +4,(1,0,0,3,1,0),192 +4,(3,0,-11,0,-1,1),-459712 +4,(0,0,1,1,1,-1),32 +4,(0,0,0,0,-1,0),-32 +4,(4,0,-15,0,1,0),48600000 +4,(0,0,1,1,-1,0),-32 +4,(5,0,-19,0,1,0),6119622144 +4,(4,0,-15,0,-1,1),-48600000 +4,(1,0,-3,1,1,-1),192 +4,(1,0,0,3,-1,1),-192 +4,(1,0,-3,1,-1,0),-192 +4,(5,0,-19,0,-1,1),-6119622144 +4,(6,0,-23,0,1,0),858998015584 +4,(2,0,-7,1,1,-1),6048 +5,(0,0,0,0,-2,1),32 +5,(0,1,0,0,1,-2),-64 +5,(0,1,0,0,-1,-1),-32 +5,(0,-1,0,1,-1,1),32 +5,(0,0,0,1,0,-1),-32 +5,(0,0,0,-1,-1,1),32 +5,(0,1,0,-1,0,-1),-32 +5,(0,0,1,0,-1,1),32 +5,(0,1,1,0,0,-1),-32 +5,(0,-1,0,0,0,1),32 +5,(1,0,-3,0,-1,1),192 +5,(2,0,-7,0,-1,1),6048 +5,(0,0,0,0,1,-1),-32 +5,(1,1,-3,0,0,-1),-192 +5,(0,-1,1,1,0,1),32 +5,(3,0,-11,0,-1,1),459712 +5,(2,1,-7,0,0,-1),-6048 +5,(0,0,1,1,1,-1),-32 +5,(1,-1,-3,1,0,1),192 +5,(4,0,-15,0,-1,1),48600000 +5,(3,1,-11,0,0,-1),-459712 +5,(2,-1,-7,1,0,1),6048 +5,(1,0,-3,1,1,-1),-192 +5,(1,0,0,3,-1,1),192 +5,(5,0,-19,0,-1,1),6119622144 +5,(1,1,0,3,0,-1),-192 +5,(3,-1,-11,1,0,1),459712 +5,(2,0,-7,1,1,-1),-6048 +5,(4,1,-15,0,0,-1),-48600000 +6,(0,1,0,0,1,-2),-128 +6,(0,1,0,0,-1,-1),-128 +6,(0,-1,0,1,1,0),-128 +6,(0,-1,0,1,-1,1),-128 +6,(0,0,0,1,0,-1),-256 +6,(0,1,0,-1,0,-1),-128 +6,(0,1,1,0,0,-1),-128 +6,(0,-1,0,0,0,1),-128 +6,(0,0,0,0,1,-1),-256 +6,(1,1,-3,0,0,-1),-768 +6,(0,-1,1,1,0,1),-128 +6,(2,1,-7,0,0,-1),-24192 +6,(0,0,1,1,1,-1),-256 +6,(0,0,0,0,-1,0),-256 +6,(1,-1,-3,1,0,1),-768 +6,(0,0,1,1,-1,0),-256 +6,(3,1,-11,0,0,-1),-1838848 +6,(2,-1,-7,1,0,1),-24192 +6,(1,0,-3,1,1,-1),-1536 +6,(1,0,-3,1,-1,0),-1536 +6,(1,1,0,3,0,-1),-768 +6,(3,-1,-11,1,0,1),-1838848 +6,(2,0,-7,1,1,-1),-48384 +6,(4,1,-15,0,0,-1),-194400000 +7,(0,-1,0,1,1,0),128 +7,(0,-1,0,1,-1,1),128 +7,(0,0,0,1,0,-1),128 +7,(0,-1,0,0,0,1),128 +7,(0,0,0,0,1,-1),128 +7,(0,-1,1,1,0,1),128 +7,(0,0,1,1,1,-1),128 +7,(0,0,0,0,-1,0),128 +7,(1,-1,-3,1,0,1),768 +7,(0,0,1,1,-1,0),128 +7,(2,-1,-7,1,0,1),24192 +7,(1,0,-3,1,1,-1),768 +7,(1,0,-3,1,-1,0),768 +7,(3,-1,-11,1,0,1),1838848 +7,(2,0,-7,1,1,-1),24192 +8,(0,1,0,0,1,-2),256 +8,(0,1,0,0,-1,-1),256 +8,(0,0,0,1,0,-1),256 +8,(0,1,0,-1,0,-1),256 +8,(0,1,1,0,0,-1),256 +8,(0,0,0,0,1,-1),256 +8,(1,1,-3,0,0,-1),1536 +8,(2,1,-7,0,0,-1),48384 +8,(0,0,1,1,1,-1),256 +8,(0,0,0,0,-1,0),256 +8,(0,0,1,1,-1,0),256 +8,(3,1,-11,0,0,-1),3677696 +8,(1,0,-3,1,1,-1),1536 +8,(1,0,-3,1,-1,0),1536 +8,(1,1,0,3,0,-1),1536 +8,(2,0,-7,1,1,-1),48384 +8,(4,1,-15,0,0,-1),388800000 +9,(1,0,-4,0,0,0),-320 +9,(2,0,-8,0,0,0),-13120 +9,(3,0,-12,0,0,0),-1088960 +9,(4,0,-16,0,0,0),-119783040 +9,(5,0,-20,0,0,0),-15440622400 +9,(6,0,-24,0,0,0),-2201117471680 +9,(7,0,-28,0,0,0),-336405826357440 +9,(0,0,1,0,1,0),-128 +9,(8,0,-32,0,0,0),-54107223042182400 +9,(1,0,-3,0,1,0),3328 +9,(0,0,1,0,-1,1),-128 +9,(0,1,1,0,0,-1),-128 +9,(2,0,-7,0,1,0),237952 +9,(1,0,-3,0,-1,1),3328 +9,(9,0,-36,0,0,0),-9049022083558242240 +9,(2,0,-7,0,-1,1),237952 +9,(3,0,-11,0,1,0),28164352 +9,(1,1,-3,0,0,-1),3328 +9,(10,0,-40,0,0,0),-1560755332264769582400 +9,(0,-1,1,1,0,1),-128 +9,(3,0,-11,0,-1,1),28164352 +9,(2,1,-7,0,0,-1),237952 +9,(0,0,1,1,1,-1),-128 +9,(4,0,-15,0,1,0),4042092800 +9,(1,-1,-3,1,0,1),3328 +9,(11,0,-44,0,0,0),-275998466204595369695680 +9,(0,0,1,1,-1,0),-128 +9,(5,0,-19,0,1,0),642991417344 +9,(12,0,-48,0,0,0),-49823448578213401555447680 +9,(4,0,-15,0,-1,1),4042092800 +9,(3,1,-11,0,0,-1),28164352 +9,(2,-1,-7,1,0,1),237952 +9,(1,0,-3,1,1,-1),3328 +9,(1,0,-3,1,-1,0),3328 +9,(5,0,-19,0,-1,1),642991417344 +9,(3,-1,-11,1,0,1),28164352 +9,(6,0,-23,0,1,0),109064938628736 +9,(13,0,-52,0,0,0),-9151339935798312297196407360 +9,(2,0,-7,1,1,-1),237952 +9,(4,1,-15,0,0,-1),4042092800 +10,(0,-1,0,1,1,0),-128 +10,(0,-1,0,1,-1,1),-128 +10,(0,0,0,1,0,-1),-128 +10,(1,0,0,4,0,0),-320 +10,(0,0,0,-1,1,0),-128 +10,(0,0,0,-1,-1,1),-128 +10,(0,1,0,-1,0,-1),-128 +10,(0,-1,0,0,0,1),-256 +10,(0,0,0,0,1,-1),-256 +10,(2,0,0,8,0,0),-13120 +10,(0,-1,1,1,0,1),-128 +10,(1,0,0,3,1,0),3328 +10,(0,0,1,1,1,-1),-128 +10,(0,0,0,0,-1,0),-256 +10,(1,-1,-3,1,0,1),-768 +10,(0,0,1,1,-1,0),-128 +10,(2,-1,-7,1,0,1),-24192 +10,(1,0,-3,1,1,-1),-768 +10,(1,0,0,3,-1,1),3328 +10,(1,0,-3,1,-1,0),-768 +10,(1,1,0,3,0,-1),3328 +10,(3,-1,-11,1,0,1),-1838848 +10,(2,0,-7,1,1,-1),-24192 +11,(0,0,0,0,-2,1),-512 +11,(0,1,0,0,1,-2),128 +11,(0,1,0,0,-1,-1),-384 +11,(0,-1,0,1,1,0),128 +11,(0,-1,0,1,-1,1),-384 +11,(0,0,0,1,0,-1),-256 +11,(0,0,0,-1,1,0),128 +11,(0,0,0,-1,-1,1),-384 +11,(0,0,1,0,1,0),128 +11,(0,1,0,-1,0,-1),-256 +11,(1,0,-3,0,1,0),768 +11,(0,0,1,0,-1,1),-384 +11,(0,1,1,0,0,-1),-256 +11,(0,-1,0,0,0,1),-256 +11,(2,0,-7,0,1,0),24192 +11,(1,0,-3,0,-1,1),-2304 +11,(2,0,-7,0,-1,1),-72576 +11,(3,0,-11,0,1,0),1838848 +11,(0,0,0,0,1,-1),-128 +11,(1,1,-3,0,0,-1),-1536 +11,(0,-1,1,1,0,1),-256 +11,(1,0,0,3,1,0),768 +11,(3,0,-11,0,-1,1),-5516544 +11,(2,1,-7,0,0,-1),-48384 +11,(0,0,1,1,1,-1),-128 +11,(0,0,0,0,-1,0),-640 +11,(4,0,-15,0,1,0),194400000 +11,(1,-1,-3,1,0,1),-1536 +11,(0,0,1,1,-1,0),-640 +11,(5,0,-19,0,1,0),24478488576 +11,(4,0,-15,0,-1,1),-583200000 +11,(3,1,-11,0,0,-1),-3677696 +11,(2,-1,-7,1,0,1),-48384 +11,(1,0,-3,1,1,-1),-768 +11,(1,0,0,3,-1,1),-2304 +11,(1,0,-3,1,-1,0),-3840 +11,(5,0,-19,0,-1,1),-73435465728 +11,(1,1,0,3,0,-1),-1536 +11,(3,-1,-11,1,0,1),-3677696 +11,(6,0,-23,0,1,0),3435992062336 +11,(2,0,-7,1,1,-1),-24192 +11,(4,1,-15,0,0,-1),-388800000 +12,(0,0,0,0,-2,1),128 +12,(0,1,0,0,-1,-1),128 +12,(0,-1,0,1,-1,1),128 +12,(0,0,0,1,0,-1),128 +12,(0,0,0,-1,-1,1),128 +12,(0,1,0,-1,0,-1),128 +12,(0,0,1,0,-1,1),128 +12,(0,1,1,0,0,-1),128 +12,(0,-1,0,0,0,1),128 +12,(1,0,-3,0,-1,1),768 +12,(2,0,-7,0,-1,1),24192 +12,(0,0,0,0,1,-1),128 +12,(1,1,-3,0,0,-1),768 +12,(0,-1,1,1,0,1),128 +12,(3,0,-11,0,-1,1),1838848 +12,(2,1,-7,0,0,-1),24192 +12,(0,0,1,1,1,-1),128 +12,(0,0,0,0,-1,0),256 +12,(1,-1,-3,1,0,1),768 +12,(0,0,1,1,-1,0),256 +12,(4,0,-15,0,-1,1),194400000 +12,(3,1,-11,0,0,-1),1838848 +12,(2,-1,-7,1,0,1),24192 +12,(1,0,-3,1,1,-1),768 +12,(1,0,0,3,-1,1),768 +12,(1,0,-3,1,-1,0),1536 +12,(5,0,-19,0,-1,1),24478488576 +12,(1,1,0,3,0,-1),768 +12,(3,-1,-11,1,0,1),1838848 +12,(2,0,-7,1,1,-1),24192 +12,(4,1,-15,0,0,-1),194400000 +13,(0,1,0,0,1,-2),-512 +13,(0,1,0,0,-1,-1),-512 +13,(0,0,0,1,0,-1),-512 +13,(0,1,0,-1,0,-1),-512 +13,(0,1,1,0,0,-1),-512 +13,(0,0,0,0,1,-1),-512 +13,(1,1,-3,0,0,-1),-3072 +13,(2,1,-7,0,0,-1),-96768 +13,(0,0,1,1,1,-1),-512 +13,(0,0,0,0,-1,0),-512 +13,(0,0,1,1,-1,0),-512 +13,(3,1,-11,0,0,-1),-7355392 +13,(1,0,-3,1,1,-1),-3072 +13,(1,0,-3,1,-1,0),-3072 +13,(1,1,0,3,0,-1),-3072 +13,(2,0,-7,1,1,-1),-96768 +13,(4,1,-15,0,0,-1),-777600000 diff --git a/ComputeGV/mpreal.h b/ComputeGV/mpreal.h new file mode 100644 index 0000000..1c97629 --- /dev/null +++ b/ComputeGV/mpreal.h @@ -0,0 +1,3263 @@ +/* + MPFR C++: Multi-precision floating point number class for C++. + Based on MPFR library: http://mpfr.org + + Project homepage: http://www.holoborodko.com/pavel/mpfr + Contact e-mail: pavel@holoborodko.com + + Copyright (c) 2008-2020 Pavel Holoborodko + + Contributors: + Dmitriy Gubanov, Konstantin Holoborodko, Brian Gladman, + Helmut Jarausch, Fokko Beekhof, Ulrich Mutze, Heinz van Saanen, + Pere Constans, Peter van Hoof, Gael Guennebaud, Tsai Chia Cheng, + Alexei Zubanov, Jauhien Piatlicki, Victor Berger, John Westwood, + Petr Aleksandrov, Orion Poplawski, Charles Karney, Arash Partow, + Rodney James, Jorge Leitao, Jerome Benoit, Michal Maly. + + Licensing: + (A) MPFR C++ is under GNU General Public License ("GPL"). + + (B) Non-free licenses may also be purchased from the author, for users who + do not want their programs protected by the GPL. + + The non-free licenses are for users that wish to use MPFR C++ in + their products but are unwilling to release their software + under the GPL (which would require them to release source code + and allow free redistribution). + + Such users can purchase an unlimited-use license from the author. + Contact us for more details. + + GNU General Public License ("GPL") copyright permissions statement: + ************************************************************************** + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef __MPREAL_H__ +#define __MPREAL_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Options +#define MPREAL_HAVE_MSVC_DEBUGVIEW // Enable Debugger Visualizer for "Debug" builds in MSVC. +#define MPREAL_HAVE_DYNAMIC_STD_NUMERIC_LIMITS // Enable extended std::numeric_limits specialization. + // Meaning that "digits", "round_style" and similar members are defined as functions, not constants. + // See std::numeric_limits at the end of the file for more information. + +// Library version +#define MPREAL_VERSION_MAJOR 3 +#define MPREAL_VERSION_MINOR 6 +#define MPREAL_VERSION_PATCHLEVEL 8 +#define MPREAL_VERSION_STRING "3.6.8" + +// Detect compiler using signatures from http://predef.sourceforge.net/ +#if defined(__GNUC__) && defined(__INTEL_COMPILER) + #define IsInf(x) isinf(x) // Intel ICC compiler on Linux + +#elif defined(_MSC_VER) // Microsoft Visual C++ + #define IsInf(x) (!_finite(x)) + +#else + #define IsInf(x) std::isinf(x) // GNU C/C++ (and/or other compilers), just hope for C99 conformance +#endif + +// A Clang feature extension to determine compiler features. +#ifndef __has_feature + #define __has_feature(x) 0 +#endif + +// Detect support for r-value references (move semantic). +// Move semantic should be enabled with great care in multi-threading environments, +// especially if MPFR uses custom memory allocators. +// Everything should be thread-safe and support passing ownership over thread boundary. +#if (__has_feature(cxx_rvalue_references) || \ + defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \ + (defined(_MSC_VER) && _MSC_VER >= 1600) && !defined(MPREAL_DISABLE_MOVE_SEMANTIC)) + + #define MPREAL_HAVE_MOVE_SUPPORT + + // Use fields in mpfr_t structure to check if it was initialized / set dummy initialization + #define mpfr_is_initialized(x) (0 != (x)->_mpfr_d) + #define mpfr_set_uninitialized(x) ((x)->_mpfr_d = 0 ) +#endif + +// Detect support for explicit converters. +#if (__has_feature(cxx_explicit_conversions) || \ + (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC_MINOR >= 5) || __cplusplus >= 201103L || \ + (defined(_MSC_VER) && _MSC_VER >= 1800) || \ + (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1300)) + + #define MPREAL_HAVE_EXPLICIT_CONVERTERS +#endif + +#define MPFR_USE_INTMAX_T // Enable 64-bit integer types - should be defined before mpfr.h + +#if defined(MPREAL_HAVE_MSVC_DEBUGVIEW) && defined(_MSC_VER) && defined(_DEBUG) + #define MPREAL_MSVC_DEBUGVIEW_CODE DebugView = toString(); + #define MPREAL_MSVC_DEBUGVIEW_DATA std::string DebugView; +#else + #define MPREAL_MSVC_DEBUGVIEW_CODE + #define MPREAL_MSVC_DEBUGVIEW_DATA +#endif + +#include + +#if (MPFR_VERSION < MPFR_VERSION_NUM(3,0,0)) + #include // Needed for random() +#endif + +// Less important options +#define MPREAL_DOUBLE_BITS_OVERFLOW -1 // Triggers overflow exception during conversion to double if mpreal + // cannot fit in MPREAL_DOUBLE_BITS_OVERFLOW bits + // = -1 disables overflow checks (default) + +// Fast replacement for mpfr_set_zero(x, +1): +// (a) uses low-level data members, might not be forward compatible +// (b) sign is not set, add (x)->_mpfr_sign = 1; +#define mpfr_set_zero_fast(x) ((x)->_mpfr_exp = __MPFR_EXP_ZERO) + +#if defined(__GNUC__) + #define MPREAL_PERMISSIVE_EXPR __extension__ +#else + #define MPREAL_PERMISSIVE_EXPR +#endif + +namespace mpfr { + +class mpreal { +private: + mpfr_t mp; + +public: + + // Get default rounding mode & precision + inline static mp_rnd_t get_default_rnd() { return (mp_rnd_t)(mpfr_get_default_rounding_mode()); } + inline static mp_prec_t get_default_prec() { return (mpfr_get_default_prec)(); } + + // Constructors && type conversions + mpreal(); + mpreal(const mpreal& u); + mpreal(const mpf_t u); + mpreal(const mpz_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const mpq_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const double u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const long double u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const unsigned long long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const long long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const unsigned long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const unsigned int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd()); + + // Construct mpreal from mpfr_t structure. + // shared = true allows to avoid deep copy, so that mpreal and 'u' share the same data & pointers. + mpreal(const mpfr_t u, bool shared = false); + + mpreal(const char* s, mp_prec_t prec = mpreal::get_default_prec(), int base = 10, mp_rnd_t mode = mpreal::get_default_rnd()); + mpreal(const std::string& s, mp_prec_t prec = mpreal::get_default_prec(), int base = 10, mp_rnd_t mode = mpreal::get_default_rnd()); + + ~mpreal(); + +#ifdef MPREAL_HAVE_MOVE_SUPPORT + mpreal& operator=(mpreal&& v); + mpreal(mpreal&& u); +#endif + + // Operations + // = + // +, -, *, /, ++, --, <<, >> + // *=, +=, -=, /=, + // <, >, ==, <=, >= + + // = + mpreal& operator=(const mpreal& v); + mpreal& operator=(const mpf_t v); + mpreal& operator=(const mpz_t v); + mpreal& operator=(const mpq_t v); + mpreal& operator=(const long double v); + mpreal& operator=(const double v); + mpreal& operator=(const unsigned long int v); + mpreal& operator=(const unsigned long long int v); + mpreal& operator=(const long long int v); + mpreal& operator=(const unsigned int v); + mpreal& operator=(const long int v); + mpreal& operator=(const int v); + mpreal& operator=(const char* s); + mpreal& operator=(const std::string& s); + template mpreal& operator= (const std::complex& z); + + // + + mpreal& operator+=(const mpreal& v); + mpreal& operator+=(const mpf_t v); + mpreal& operator+=(const mpz_t v); + mpreal& operator+=(const mpq_t v); + mpreal& operator+=(const long double u); + mpreal& operator+=(const double u); + mpreal& operator+=(const unsigned long int u); + mpreal& operator+=(const unsigned int u); + mpreal& operator+=(const long int u); + mpreal& operator+=(const int u); + + mpreal& operator+=(const long long int u); + mpreal& operator+=(const unsigned long long int u); + mpreal& operator-=(const long long int u); + mpreal& operator-=(const unsigned long long int u); + mpreal& operator*=(const long long int u); + mpreal& operator*=(const unsigned long long int u); + mpreal& operator/=(const long long int u); + mpreal& operator/=(const unsigned long long int u); + + const mpreal operator+() const; + mpreal& operator++ (); + const mpreal operator++ (int); + + // - + mpreal& operator-=(const mpreal& v); + mpreal& operator-=(const mpz_t v); + mpreal& operator-=(const mpq_t v); + mpreal& operator-=(const long double u); + mpreal& operator-=(const double u); + mpreal& operator-=(const unsigned long int u); + mpreal& operator-=(const unsigned int u); + mpreal& operator-=(const long int u); + mpreal& operator-=(const int u); + const mpreal operator-() const; + friend const mpreal operator-(const unsigned long int b, const mpreal& a); + friend const mpreal operator-(const unsigned int b, const mpreal& a); + friend const mpreal operator-(const long int b, const mpreal& a); + friend const mpreal operator-(const int b, const mpreal& a); + friend const mpreal operator-(const double b, const mpreal& a); + mpreal& operator-- (); + const mpreal operator-- (int); + + // * + mpreal& operator*=(const mpreal& v); + mpreal& operator*=(const mpz_t v); + mpreal& operator*=(const mpq_t v); + mpreal& operator*=(const long double v); + mpreal& operator*=(const double v); + mpreal& operator*=(const unsigned long int v); + mpreal& operator*=(const unsigned int v); + mpreal& operator*=(const long int v); + mpreal& operator*=(const int v); + + // / + mpreal& operator/=(const mpreal& v); + mpreal& operator/=(const mpz_t v); + mpreal& operator/=(const mpq_t v); + mpreal& operator/=(const long double v); + mpreal& operator/=(const double v); + mpreal& operator/=(const unsigned long int v); + mpreal& operator/=(const unsigned int v); + mpreal& operator/=(const long int v); + mpreal& operator/=(const int v); + friend const mpreal operator/(const unsigned long int b, const mpreal& a); + friend const mpreal operator/(const unsigned int b, const mpreal& a); + friend const mpreal operator/(const long int b, const mpreal& a); + friend const mpreal operator/(const int b, const mpreal& a); + friend const mpreal operator/(const double b, const mpreal& a); + + //<<= Fast Multiplication by 2^u + mpreal& operator<<=(const unsigned long int u); + mpreal& operator<<=(const unsigned int u); + mpreal& operator<<=(const long int u); + mpreal& operator<<=(const int u); + + //>>= Fast Division by 2^u + mpreal& operator>>=(const unsigned long int u); + mpreal& operator>>=(const unsigned int u); + mpreal& operator>>=(const long int u); + mpreal& operator>>=(const int u); + + // Type Conversion operators + bool toBool ( ) const; + long toLong (mp_rnd_t mode = GMP_RNDZ) const; + unsigned long toULong (mp_rnd_t mode = GMP_RNDZ) const; + long long toLLong (mp_rnd_t mode = GMP_RNDZ) const; + unsigned long long toULLong (mp_rnd_t mode = GMP_RNDZ) const; + float toFloat (mp_rnd_t mode = GMP_RNDN) const; + double toDouble (mp_rnd_t mode = GMP_RNDN) const; + long double toLDouble (mp_rnd_t mode = GMP_RNDN) const; + +#if defined (MPREAL_HAVE_EXPLICIT_CONVERTERS) + explicit operator bool () const { return toBool(); } + explicit operator signed char () const { return (signed char)toLong(); } + explicit operator unsigned char () const { return (unsigned char)toULong(); } + explicit operator short () const { return (short)toLong(); } + explicit operator unsigned short () const { return (unsigned short)toULong();} + explicit operator int () const { return (int)toLong(); } + explicit operator unsigned int () const { return (unsigned int)toULong(); } + explicit operator long () const { return toLong(); } + explicit operator unsigned long () const { return toULong(); } + explicit operator long long () const { return toLLong(); } + explicit operator unsigned long long () const { return toULLong(); } + explicit operator float () const { return toFloat(); } + explicit operator double () const { return toDouble(); } + explicit operator long double () const { return toLDouble(); } +#endif + + // Get raw pointers so that mpreal can be directly used in raw mpfr_* functions + ::mpfr_ptr mpfr_ptr(); + ::mpfr_srcptr mpfr_ptr() const; + ::mpfr_srcptr mpfr_srcptr() const; + + // Convert mpreal to string with n significant digits in base b + // n = -1 -> convert with the maximum available digits + std::string toString(int n = -1, int b = 10, mp_rnd_t mode = mpreal::get_default_rnd()) const; + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + std::string toString(const std::string& format) const; +#endif + + std::ostream& output(std::ostream& os) const; + + // Math Functions + friend const mpreal sqr (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode); + friend const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode); + friend const mpreal pow (const mpreal& a, const long int b, mp_rnd_t rnd_mode); + friend const mpreal pow (const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode); + friend const mpreal pow (const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode); + friend const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode); + friend inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode); + friend inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode); + friend inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode); + friend int cmpabs(const mpreal& a,const mpreal& b); + + friend const mpreal log (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal log2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal logb (const mpreal& v, mp_rnd_t rnd_mode); + friend mp_exp_t ilogb(const mpreal& v); + friend const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal log1p(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal expm1(const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal nextpow2(const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode); + friend int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode); + friend const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + + friend const mpreal fac_ui (unsigned long int v, mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode); + + friend const mpreal gamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal tgamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal lgamma (const mpreal& v, int *signp, mp_rnd_t rnd_mode); + friend const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode); + friend const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode); + friend const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode); + friend const mpreal sum (const mpreal tab[], const unsigned long int n, int& status, mp_rnd_t rnd_mode); + friend int sgn (const mpreal& v); + +// MPFR 2.4.0 Specifics +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + friend int sinh_cosh (mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal li2 (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal rec_sqrt (const mpreal& v, mp_rnd_t rnd_mode); + + // MATLAB's semantic equivalents + friend const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); // Remainder after division + friend const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); // Modulus after division +#endif + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) + friend const mpreal digamma (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal ai (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode); // use gmp_randinit_default() to init state, gmp_randclear() to clear +#endif + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,1,0)) + friend const mpreal grandom (gmp_randstate_t& state, mp_rnd_t rnd_mode); // use gmp_randinit_default() to init state, gmp_randclear() to clear + friend const mpreal grandom (unsigned int seed); +#endif + + // Uniformly distributed random number generation in [0,1] using + // Mersenne-Twister algorithm by default. + // Use parameter to setup seed, e.g.: random((unsigned)time(NULL)) + // Check urandom() for more precise control. + friend const mpreal random(unsigned int seed); + + // Splits mpreal value into fractional and integer parts. + // Returns fractional part and stores integer part in n. + friend const mpreal modf(const mpreal& v, mpreal& n); + + // Constants + // don't forget to call mpfr_free_cache() for every thread where you are using const-functions + friend const mpreal const_log2 (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_pi (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_euler (mp_prec_t prec, mp_rnd_t rnd_mode); + friend const mpreal const_catalan (mp_prec_t prec, mp_rnd_t rnd_mode); + + // returns +inf iff sign>=0 otherwise -inf + friend const mpreal const_infinity(int sign, mp_prec_t prec); + + // Output/ Input + friend std::ostream& operator<<(std::ostream& os, const mpreal& v); + friend std::istream& operator>>(std::istream& is, mpreal& v); + + // Integer Related Functions + friend const mpreal rint (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal ceil (const mpreal& v); + friend const mpreal floor(const mpreal& v); + friend const mpreal round(const mpreal& v); + friend long lround(const mpreal& v); + friend long long llround(const mpreal& v); + friend const mpreal trunc(const mpreal& v); + friend const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_floor (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_round (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal rint_trunc (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode); + friend const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal remquo (const mpreal& x, const mpreal& y, int* q, mp_rnd_t rnd_mode); + + // Miscellaneous Functions + friend const mpreal nexttoward (const mpreal& x, const mpreal& y); + friend const mpreal nextabove (const mpreal& x); + friend const mpreal nextbelow (const mpreal& x); + + // use gmp_randinit_default() to init state, gmp_randclear() to clear + friend const mpreal urandomb (gmp_randstate_t& state); + +// MPFR < 2.4.2 Specifics +#if (MPFR_VERSION <= MPFR_VERSION_NUM(2,4,2)) + friend const mpreal random2 (mp_size_t size, mp_exp_t exp); +#endif + + // Instance Checkers + friend bool isnan (const mpreal& v); + friend bool isinf (const mpreal& v); + friend bool isfinite (const mpreal& v); + + friend bool isnum (const mpreal& v); + friend bool iszero (const mpreal& v); + friend bool isint (const mpreal& v); + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) + friend bool isregular(const mpreal& v); +#endif + + // Set/Get instance properties + inline mp_prec_t get_prec() const; + inline void set_prec(mp_prec_t prec, mp_rnd_t rnd_mode = get_default_rnd()); // Change precision with rounding mode + + // Aliases for get_prec(), set_prec() - needed for compatibility with std::complex interface + inline mpreal& setPrecision(int Precision, mp_rnd_t RoundingMode = get_default_rnd()); + inline int getPrecision() const; + + // Set mpreal to +/- inf, NaN, +/-0 + mpreal& setInf (int Sign = +1); + mpreal& setNan (); + mpreal& setZero (int Sign = +1); + mpreal& setSign (int Sign, mp_rnd_t RoundingMode = get_default_rnd()); + + //Exponent + mp_exp_t get_exp() const; + int set_exp(mp_exp_t e); + int check_range (int t, mp_rnd_t rnd_mode = get_default_rnd()); + int subnormalize (int t, mp_rnd_t rnd_mode = get_default_rnd()); + + // Inexact conversion from float + inline bool fits_in_bits(double x, int n); + + // Set/Get global properties + static void set_default_prec(mp_prec_t prec); + static void set_default_rnd(mp_rnd_t rnd_mode); + + static mp_exp_t get_emin (void); + static mp_exp_t get_emax (void); + static mp_exp_t get_emin_min (void); + static mp_exp_t get_emin_max (void); + static mp_exp_t get_emax_min (void); + static mp_exp_t get_emax_max (void); + static int set_emin (mp_exp_t exp); + static int set_emax (mp_exp_t exp); + + // Efficient swapping of two mpreal values - needed for std algorithms + friend void swap(mpreal& x, mpreal& y); + + friend const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + friend const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode); + +private: + // Human friendly Debug Preview in Visual Studio. + // Put one of these lines: + // + // mpfr::mpreal= ; Show value only + // mpfr::mpreal=, bits ; Show value & precision + // + // at the beginning of + // [Visual Studio Installation Folder]\Common7\Packages\Debugger\autoexp.dat + MPREAL_MSVC_DEBUGVIEW_DATA + + // "Smart" resources deallocation. Checks if instance initialized before deletion. + void clear(::mpfr_ptr); +}; + +////////////////////////////////////////////////////////////////////////// +// Exceptions +class conversion_overflow : public std::exception { +public: + std::string why() { return "inexact conversion from floating point"; } +}; + +////////////////////////////////////////////////////////////////////////// +// Constructors & converters +// Default constructor: creates mp number and initializes it to 0. +inline mpreal::mpreal() +{ + mpfr_init2(mpfr_ptr(), mpreal::get_default_prec()); + mpfr_set_zero_fast(mpfr_ptr()); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const mpreal& u) +{ + mpfr_init2(mpfr_ptr(),mpfr_get_prec(u.mpfr_srcptr())); + mpfr_set (mpfr_ptr(),u.mpfr_srcptr(),mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +#ifdef MPREAL_HAVE_MOVE_SUPPORT +inline mpreal::mpreal(mpreal&& other) +{ + mpfr_set_uninitialized(mpfr_ptr()); // make sure "other" holds null-pointer (in uninitialized state) + mpfr_swap(mpfr_ptr(), other.mpfr_ptr()); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal& mpreal::operator=(mpreal&& other) +{ + if (this != &other) + { + mpfr_swap(mpfr_ptr(), other.mpfr_ptr()); // destructor for "other" will be called just afterwards + MPREAL_MSVC_DEBUGVIEW_CODE; + } + return *this; +} +#endif + +inline mpreal::mpreal(const mpfr_t u, bool shared) +{ + if(shared) + { + std::memcpy(mpfr_ptr(), u, sizeof(mpfr_t)); + } + else + { + mpfr_init2(mpfr_ptr(), mpfr_get_prec(u)); + mpfr_set (mpfr_ptr(), u, mpreal::get_default_rnd()); + } + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const mpf_t u) +{ + mpfr_init2(mpfr_ptr(),(mp_prec_t) mpf_get_prec(u)); // (gmp: mp_bitcnt_t) unsigned long -> long (mpfr: mp_prec_t) + mpfr_set_f(mpfr_ptr(),u,mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const mpz_t u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2(mpfr_ptr(), prec); + mpfr_set_z(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const mpq_t u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2(mpfr_ptr(), prec); + mpfr_set_q(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const double u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2(mpfr_ptr(), prec); + +#if (MPREAL_DOUBLE_BITS_OVERFLOW > -1) + if(fits_in_bits(u, MPREAL_DOUBLE_BITS_OVERFLOW)) + { + mpfr_set_d(mpfr_ptr(), u, mode); + }else + throw conversion_overflow(); +#else + mpfr_set_d(mpfr_ptr(), u, mode); +#endif + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const long double u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ld(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const unsigned long long int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_uj(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const long long int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_sj(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const unsigned long int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ui(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const unsigned int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_ui(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const long int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_si(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const int u, mp_prec_t prec, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_si(mpfr_ptr(), u, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_str(mpfr_ptr(), s, base, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mpreal::mpreal(const std::string& s, mp_prec_t prec, int base, mp_rnd_t mode) +{ + mpfr_init2 (mpfr_ptr(), prec); + mpfr_set_str(mpfr_ptr(), s.c_str(), base, mode); + + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline void mpreal::clear(::mpfr_ptr x) +{ +#ifdef MPREAL_HAVE_MOVE_SUPPORT + if(mpfr_is_initialized(x)) +#endif + mpfr_clear(x); +} + +inline mpreal::~mpreal() +{ + clear(mpfr_ptr()); +} + +// internal namespace needed for template magic +namespace internal{ + + // Use SFINAE to restrict arithmetic operations instantiation only for numeric types + // This is needed for smooth integration with libraries based on expression templates, like Eigen. + // TODO: Do the same for boolean operators. + template struct result_type {}; + + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; + template <> struct result_type {typedef mpreal type;}; +} + +// + Addition +template +inline const typename internal::result_type::type + operator+(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) += rhs; } + +template +inline const typename internal::result_type::type + operator+(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) += lhs; } + +// - Subtraction +template +inline const typename internal::result_type::type + operator-(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) -= rhs; } + +template +inline const typename internal::result_type::type + operator-(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) -= rhs; } + +// * Multiplication +template +inline const typename internal::result_type::type + operator*(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) *= rhs; } + +template +inline const typename internal::result_type::type + operator*(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) *= lhs; } + +// / Division +template +inline const typename internal::result_type::type + operator/(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) /= rhs; } + +template +inline const typename internal::result_type::type + operator/(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) /= rhs; } + +////////////////////////////////////////////////////////////////////////// +// sqrt +const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal sqrt(const long int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal sqrt(const int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal sqrt(const long double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal sqrt(const double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +// abs +inline const mpreal abs(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()); + +////////////////////////////////////////////////////////////////////////// +// pow +const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +const mpreal pow(const double a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); +inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); + +////////////////////////////////////////////////////////////////////////// +// Estimate machine epsilon for the given precision +// Returns smallest eps such that 1.0 + eps != 1.0 +inline mpreal machine_epsilon(mp_prec_t prec = mpreal::get_default_prec()); + +// Returns smallest eps such that x + eps != x (relative machine epsilon) +inline mpreal machine_epsilon(const mpreal& x); + +// Gives max & min values for the required precision, +// minval is 'safe' meaning 1 / minval does not overflow +// maxval is 'safe' meaning 1 / maxval does not underflow +inline mpreal minval(mp_prec_t prec = mpreal::get_default_prec()); +inline mpreal maxval(mp_prec_t prec = mpreal::get_default_prec()); + +// 'Dirty' equality check 1: |a-b| < min{|a|,|b|} * eps +inline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps); + +// 'Dirty' equality check 2: |a-b| < min{|a|,|b|} * eps( min{|a|,|b|} ) +inline bool isEqualFuzzy(const mpreal& a, const mpreal& b); + +// 'Bitwise' equality check +// maxUlps - a and b can be apart by maxUlps binary numbers. +inline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps); + +////////////////////////////////////////////////////////////////////////// +// Convert precision in 'bits' to decimal digits and vice versa. +// bits = ceil(digits*log[2](10)) +// digits = floor(bits*log[10](2)) + +inline mp_prec_t digits2bits(int d); +inline int bits2digits(mp_prec_t b); + +////////////////////////////////////////////////////////////////////////// +// min, max +const mpreal (max)(const mpreal& x, const mpreal& y); +const mpreal (min)(const mpreal& x, const mpreal& y); + +////////////////////////////////////////////////////////////////////////// +// Implementation +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// Operators - Assignment +inline mpreal& mpreal::operator=(const mpreal& v) +{ + if (this != &v) + { + mp_prec_t tp = mpfr_get_prec( mpfr_srcptr()); + mp_prec_t vp = mpfr_get_prec(v.mpfr_srcptr()); + + if(tp != vp){ + clear(mpfr_ptr()); + mpfr_init2(mpfr_ptr(), vp); + } + + mpfr_set(mpfr_ptr(), v.mpfr_srcptr(), mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + } + return *this; +} + +inline mpreal& mpreal::operator=(const mpf_t v) +{ + mpfr_set_f(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const mpz_t v) +{ + mpfr_set_z(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const mpq_t v) +{ + mpfr_set_q(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const long double v) +{ + mpfr_set_ld(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const double v) +{ +#if (MPREAL_DOUBLE_BITS_OVERFLOW > -1) + if(fits_in_bits(v, MPREAL_DOUBLE_BITS_OVERFLOW)) + { + mpfr_set_d(mpfr_ptr(),v,mpreal::get_default_rnd()); + }else + throw conversion_overflow(); +#else + mpfr_set_d(mpfr_ptr(),v,mpreal::get_default_rnd()); +#endif + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const unsigned long int v) +{ + mpfr_set_ui(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const unsigned int v) +{ + mpfr_set_ui(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const unsigned long long int v) +{ + mpfr_set_uj(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const long long int v) +{ + mpfr_set_sj(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const long int v) +{ + mpfr_set_si(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const int v) +{ + mpfr_set_si(mpfr_ptr(), v, mpreal::get_default_rnd()); + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator=(const char* s) +{ + // Use other converters for more precise control on base & precision & rounding: + // + // mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode) + // mpreal(const std::string& s,mp_prec_t prec, int base, mp_rnd_t mode) + // + // Here we assume base = 10 and we use precision of target variable. + + mpfr_t t; + + mpfr_init2(t, mpfr_get_prec(mpfr_srcptr())); + + if(0 == mpfr_set_str(t, s, 10, mpreal::get_default_rnd())) + { + mpfr_set(mpfr_ptr(), t, mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + } + + clear(t); + return *this; +} + +inline mpreal& mpreal::operator=(const std::string& s) +{ + // Use other converters for more precise control on base & precision & rounding: + // + // mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode) + // mpreal(const std::string& s,mp_prec_t prec, int base, mp_rnd_t mode) + // + // Here we assume base = 10 and we use precision of target variable. + + mpfr_t t; + + mpfr_init2(t, mpfr_get_prec(mpfr_srcptr())); + + if(0 == mpfr_set_str(t, s.c_str(), 10, mpreal::get_default_rnd())) + { + mpfr_set(mpfr_ptr(), t, mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + } + + clear(t); + return *this; +} + +template +inline mpreal& mpreal::operator= (const std::complex& z) +{ + return *this = z.real(); +} + +////////////////////////////////////////////////////////////////////////// +// + Addition +inline mpreal& mpreal::operator+=(const mpreal& v) +{ + mpfr_add(mpfr_ptr(), mpfr_srcptr(), v.mpfr_srcptr(), mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const mpf_t u) +{ + *this += mpreal(u); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const mpz_t u) +{ + mpfr_add_z(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const mpq_t u) +{ + mpfr_add_q(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+= (const long double u) +{ + *this += mpreal(u); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+= (const double u) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpfr_add_d(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); +#else + *this += mpreal(u); +#endif + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const unsigned long int u) +{ + mpfr_add_ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const unsigned int u) +{ + mpfr_add_ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const long int u) +{ + mpfr_add_si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const int u) +{ + mpfr_add_si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator+=(const long long int u) { *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator+=(const unsigned long long int u){ *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator-=(const long long int u) { *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator-=(const unsigned long long int u){ *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator*=(const long long int u) { *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator*=(const unsigned long long int u){ *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator/=(const long long int u) { *this /= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } +inline mpreal& mpreal::operator/=(const unsigned long long int u){ *this /= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; } + +inline const mpreal mpreal::operator+()const { return mpreal(*this); } + +inline const mpreal operator+(const mpreal& a, const mpreal& b) +{ + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_add(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; +} + +inline mpreal& mpreal::operator++() +{ + return *this += 1; +} + +inline const mpreal mpreal::operator++ (int) +{ + mpreal x(*this); + *this += 1; + return x; +} + +inline mpreal& mpreal::operator--() +{ + return *this -= 1; +} + +inline const mpreal mpreal::operator-- (int) +{ + mpreal x(*this); + *this -= 1; + return x; +} + +////////////////////////////////////////////////////////////////////////// +// - Subtraction +inline mpreal& mpreal::operator-=(const mpreal& v) +{ + mpfr_sub(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const mpz_t v) +{ + mpfr_sub_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const mpq_t v) +{ + mpfr_sub_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const long double v) +{ + *this -= mpreal(v); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const double v) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpfr_sub_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); +#else + *this -= mpreal(v); +#endif + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const unsigned long int v) +{ + mpfr_sub_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const unsigned int v) +{ + mpfr_sub_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const long int v) +{ + mpfr_sub_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator-=(const int v) +{ + mpfr_sub_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline const mpreal mpreal::operator-()const +{ + mpreal u(*this); + mpfr_neg(u.mpfr_ptr(),u.mpfr_srcptr(),mpreal::get_default_rnd()); + return u; +} + +inline const mpreal operator-(const mpreal& a, const mpreal& b) +{ + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_sub(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; +} + +inline const mpreal operator-(const double b, const mpreal& a) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpfr_d_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +#else + mpreal x(b, mpfr_get_prec(a.mpfr_ptr())); + x -= a; + return x; +#endif +} + +inline const mpreal operator-(const unsigned long int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpfr_ui_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator-(const unsigned int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpfr_ui_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator-(const long int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpfr_si_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator-(const int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_ptr())); + mpfr_si_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +////////////////////////////////////////////////////////////////////////// +// * Multiplication +inline mpreal& mpreal::operator*= (const mpreal& v) +{ + mpfr_mul(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const mpz_t v) +{ + mpfr_mul_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const mpq_t v) +{ + mpfr_mul_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const long double v) +{ + *this *= mpreal(v); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const double v) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpfr_mul_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); +#else + *this *= mpreal(v); +#endif + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const unsigned long int v) +{ + mpfr_mul_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const unsigned int v) +{ + mpfr_mul_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const long int v) +{ + mpfr_mul_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator*=(const int v) +{ + mpfr_mul_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline const mpreal operator*(const mpreal& a, const mpreal& b) +{ + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr()))); + mpfr_mul(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; +} + +////////////////////////////////////////////////////////////////////////// +// / Division +inline mpreal& mpreal::operator/=(const mpreal& v) +{ + mpfr_div(mpfr_ptr(),mpfr_srcptr(),v.mpfr_srcptr(),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const mpz_t v) +{ + mpfr_div_z(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const mpq_t v) +{ + mpfr_div_q(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const long double v) +{ + *this /= mpreal(v); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const double v) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpfr_div_d(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); +#else + *this /= mpreal(v); +#endif + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const unsigned long int v) +{ + mpfr_div_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const unsigned int v) +{ + mpfr_div_ui(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const long int v) +{ + mpfr_div_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator/=(const int v) +{ + mpfr_div_si(mpfr_ptr(),mpfr_srcptr(),v,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline const mpreal operator/(const mpreal& a, const mpreal& b) +{ + mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_srcptr()), mpfr_get_prec(b.mpfr_srcptr()))); + mpfr_div(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd()); + return c; +} + +inline const mpreal operator/(const unsigned long int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator/(const unsigned int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator/(const long int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator/(const int b, const mpreal& a) +{ + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +} + +inline const mpreal operator/(const double b, const mpreal& a) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + mpreal x(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_d_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd()); + return x; +#else + mpreal x(b, mpfr_get_prec(a.mpfr_ptr())); + x /= a; + return x; +#endif +} + +////////////////////////////////////////////////////////////////////////// +// Shifts operators - Multiplication/Division by power of 2 +inline mpreal& mpreal::operator<<=(const unsigned long int u) +{ + mpfr_mul_2ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator<<=(const unsigned int u) +{ + mpfr_mul_2ui(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator<<=(const long int u) +{ + mpfr_mul_2si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator<<=(const int u) +{ + mpfr_mul_2si(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator>>=(const unsigned long int u) +{ + mpfr_div_2ui(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator>>=(const unsigned int u) +{ + mpfr_div_2ui(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator>>=(const long int u) +{ + mpfr_div_2si(mpfr_ptr(),mpfr_srcptr(),u,mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::operator>>=(const int u) +{ + mpfr_div_2si(mpfr_ptr(),mpfr_srcptr(),static_cast(u),mpreal::get_default_rnd()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline const mpreal operator<<(const mpreal& v, const unsigned long int k) +{ + return mul_2ui(v,k); +} + +inline const mpreal operator<<(const mpreal& v, const unsigned int k) +{ + return mul_2ui(v,static_cast(k)); +} + +inline const mpreal operator<<(const mpreal& v, const long int k) +{ + return mul_2si(v,k); +} + +inline const mpreal operator<<(const mpreal& v, const int k) +{ + return mul_2si(v,static_cast(k)); +} + +inline const mpreal operator>>(const mpreal& v, const unsigned long int k) +{ + return div_2ui(v,k); +} + +inline const mpreal operator>>(const mpreal& v, const long int k) +{ + return div_2si(v,k); +} + +inline const mpreal operator>>(const mpreal& v, const unsigned int k) +{ + return div_2ui(v,static_cast(k)); +} + +inline const mpreal operator>>(const mpreal& v, const int k) +{ + return div_2si(v,static_cast(k)); +} + +// mul_2ui +inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) +{ + mpreal x(v); + mpfr_mul_2ui(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); + return x; +} + +// mul_2si +inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) +{ + mpreal x(v); + mpfr_mul_2si(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); + return x; +} + +inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode) +{ + mpreal x(v); + mpfr_div_2ui(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); + return x; +} + +inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode) +{ + mpreal x(v); + mpfr_div_2si(x.mpfr_ptr(),v.mpfr_srcptr(),k,rnd_mode); + return x; +} + +////////////////////////////////////////////////////////////////////////// +//Relational operators + +// WARNING: +// +// Please note that following checks for double-NaN are guaranteed to work only in IEEE math mode: +// +// isnan(b) = (b != b) +// isnan(b) = !(b == b) (we use in code below) +// +// Be cautions if you use compiler options which break strict IEEE compliance (e.g. -ffast-math in GCC). +// Use std::isnan instead (C++11). + +inline bool operator > (const mpreal& a, const mpreal& b ){ return (mpfr_greater_p(a.mpfr_srcptr(),b.mpfr_srcptr()) != 0 ); } +inline bool operator > (const mpreal& a, const unsigned long int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) > 0 ); } +inline bool operator > (const mpreal& a, const unsigned int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) > 0 ); } +inline bool operator > (const mpreal& a, const long int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) > 0 ); } +inline bool operator > (const mpreal& a, const int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) > 0 ); } +inline bool operator > (const mpreal& a, const long double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_ld(a.mpfr_srcptr(),b) > 0 ); } +inline bool operator > (const mpreal& a, const double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_d (a.mpfr_srcptr(),b) > 0 ); } + +inline bool operator >= (const mpreal& a, const mpreal& b ){ return (mpfr_greaterequal_p(a.mpfr_srcptr(),b.mpfr_srcptr()) != 0 ); } +inline bool operator >= (const mpreal& a, const unsigned long int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) >= 0 ); } +inline bool operator >= (const mpreal& a, const unsigned int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) >= 0 ); } +inline bool operator >= (const mpreal& a, const long int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) >= 0 ); } +inline bool operator >= (const mpreal& a, const int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) >= 0 ); } +inline bool operator >= (const mpreal& a, const long double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_ld(a.mpfr_srcptr(),b) >= 0 ); } +inline bool operator >= (const mpreal& a, const double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_d (a.mpfr_srcptr(),b) >= 0 ); } + +inline bool operator < (const mpreal& a, const mpreal& b ){ return (mpfr_less_p(a.mpfr_srcptr(),b.mpfr_srcptr()) != 0 ); } +inline bool operator < (const mpreal& a, const unsigned long int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) < 0 ); } +inline bool operator < (const mpreal& a, const unsigned int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) < 0 ); } +inline bool operator < (const mpreal& a, const long int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) < 0 ); } +inline bool operator < (const mpreal& a, const int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) < 0 ); } +inline bool operator < (const mpreal& a, const long double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_ld(a.mpfr_srcptr(),b) < 0 ); } +inline bool operator < (const mpreal& a, const double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_d (a.mpfr_srcptr(),b) < 0 ); } + +inline bool operator <= (const mpreal& a, const mpreal& b ){ return (mpfr_lessequal_p(a.mpfr_srcptr(),b.mpfr_srcptr()) != 0 ); } +inline bool operator <= (const mpreal& a, const unsigned long int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) <= 0 ); } +inline bool operator <= (const mpreal& a, const unsigned int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) <= 0 ); } +inline bool operator <= (const mpreal& a, const long int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) <= 0 ); } +inline bool operator <= (const mpreal& a, const int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) <= 0 ); } +inline bool operator <= (const mpreal& a, const long double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_ld(a.mpfr_srcptr(),b) <= 0 ); } +inline bool operator <= (const mpreal& a, const double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_d (a.mpfr_srcptr(),b) <= 0 ); } + +inline bool operator == (const mpreal& a, const mpreal& b ){ return (mpfr_equal_p(a.mpfr_srcptr(),b.mpfr_srcptr()) != 0 ); } +inline bool operator == (const mpreal& a, const unsigned long int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const unsigned int b ){ return !isnan(a) && (mpfr_cmp_ui(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const long int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const int b ){ return !isnan(a) && (mpfr_cmp_si(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const long double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_ld(a.mpfr_srcptr(),b) == 0 ); } +inline bool operator == (const mpreal& a, const double b ){ return !isnan(a) && (b == b) && (mpfr_cmp_d (a.mpfr_srcptr(),b) == 0 ); } + +inline bool operator != (const mpreal& a, const mpreal& b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const unsigned long int b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const unsigned int b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const long int b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const int b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const long double b ){ return !(a == b); } +inline bool operator != (const mpreal& a, const double b ){ return !(a == b); } + +inline bool isnan (const mpreal& op){ return (mpfr_nan_p (op.mpfr_srcptr()) != 0 ); } +inline bool isinf (const mpreal& op){ return (mpfr_inf_p (op.mpfr_srcptr()) != 0 ); } +inline bool isfinite (const mpreal& op){ return (mpfr_number_p (op.mpfr_srcptr()) != 0 ); } +inline bool iszero (const mpreal& op){ return (mpfr_zero_p (op.mpfr_srcptr()) != 0 ); } +inline bool isint (const mpreal& op){ return (mpfr_integer_p(op.mpfr_srcptr()) != 0 ); } + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) +inline bool isregular(const mpreal& op){ return (mpfr_regular_p(op.mpfr_srcptr()));} +#endif + +////////////////////////////////////////////////////////////////////////// +// Type Converters +inline bool mpreal::toBool ( ) const { return mpfr_zero_p (mpfr_srcptr()) == 0; } +inline long mpreal::toLong (mp_rnd_t mode) const { return mpfr_get_si (mpfr_srcptr(), mode); } +inline unsigned long mpreal::toULong (mp_rnd_t mode) const { return mpfr_get_ui (mpfr_srcptr(), mode); } +inline float mpreal::toFloat (mp_rnd_t mode) const { return mpfr_get_flt(mpfr_srcptr(), mode); } +inline double mpreal::toDouble (mp_rnd_t mode) const { return mpfr_get_d (mpfr_srcptr(), mode); } +inline long double mpreal::toLDouble(mp_rnd_t mode) const { return mpfr_get_ld (mpfr_srcptr(), mode); } +inline long long mpreal::toLLong (mp_rnd_t mode) const { return mpfr_get_sj (mpfr_srcptr(), mode); } +inline unsigned long long mpreal::toULLong (mp_rnd_t mode) const { return mpfr_get_uj (mpfr_srcptr(), mode); } + +inline ::mpfr_ptr mpreal::mpfr_ptr() { return mp; } +inline ::mpfr_srcptr mpreal::mpfr_ptr() const { return mp; } +inline ::mpfr_srcptr mpreal::mpfr_srcptr() const { return mp; } + +template +inline std::string toString(T t, std::ios_base & (*f)(std::ios_base&)) +{ + std::ostringstream oss; + oss << f << t; + return oss.str(); +} + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + +inline std::string mpreal::toString(const std::string& format) const +{ + char *s = NULL; + std::string out; + + if( !format.empty() ) + { + if(!(mpfr_asprintf(&s, format.c_str(), mpfr_srcptr()) < 0)) + { + out = std::string(s); + + mpfr_free_str(s); + } + } + + return out; +} + +#endif + +inline std::string mpreal::toString(int n, int b, mp_rnd_t mode) const +{ + // TODO: Add extended format specification (f, e, rounding mode) as it done in output operator + (void)b; + (void)mode; + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + + std::ostringstream format; + + int digits = (n >= 0) ? n : 2 + bits2digits(mpfr_get_prec(mpfr_srcptr())); + + format << "%." << digits << "RNg"; + + return toString(format.str()); + +#else + + char *s, *ns = NULL; + size_t slen, nslen; + mp_exp_t exp; + std::string out; + + if(mpfr_inf_p(mp)) + { + if(mpfr_sgn(mp)>0) return "+Inf"; + else return "-Inf"; + } + + if(mpfr_zero_p(mp)) return "0"; + if(mpfr_nan_p(mp)) return "NaN"; + + s = mpfr_get_str(NULL, &exp, b, 0, mp, mode); + ns = mpfr_get_str(NULL, &exp, b, (std::max)(0,n), mp, mode); + + if(s!=NULL && ns!=NULL) + { + slen = strlen(s); + nslen = strlen(ns); + if(nslen<=slen) + { + mpfr_free_str(s); + s = ns; + slen = nslen; + } + else { + mpfr_free_str(ns); + } + + // Make human eye-friendly formatting if possible + if (exp>0 && static_cast(exp)s+exp) ptr--; + + if(ptr==s+exp) out = std::string(s,exp+1); + else out = std::string(s,exp+1)+'.'+std::string(s+exp+1,ptr-(s+exp+1)+1); + + //out = string(s,exp+1)+'.'+string(s+exp+1); + } + else + { + // Remove zeros starting from right end + char* ptr = s+slen-1; + while (*ptr=='0' && ptr>s+exp-1) ptr--; + + if(ptr==s+exp-1) out = std::string(s,exp); + else out = std::string(s,exp)+'.'+std::string(s+exp,ptr-(s+exp)+1); + + //out = string(s,exp)+'.'+string(s+exp); + } + + }else{ // exp<0 || exp>slen + if(s[0]=='-') + { + // Remove zeros starting from right end + char* ptr = s+slen-1; + while (*ptr=='0' && ptr>s+1) ptr--; + + if(ptr==s+1) out = std::string(s,2); + else out = std::string(s,2)+'.'+std::string(s+2,ptr-(s+2)+1); + + //out = string(s,2)+'.'+string(s+2); + } + else + { + // Remove zeros starting from right end + char* ptr = s+slen-1; + while (*ptr=='0' && ptr>s) ptr--; + + if(ptr==s) out = std::string(s,1); + else out = std::string(s,1)+'.'+std::string(s+1,ptr-(s+1)+1); + + //out = string(s,1)+'.'+string(s+1); + } + + // Make final string + if(--exp) + { + if(exp>0) out += "e+"+mpfr::toString(exp,std::dec); + else out += "e"+mpfr::toString(exp,std::dec); + } + } + + mpfr_free_str(s); + return out; + }else{ + return "conversion error!"; + } +#endif +} + + +////////////////////////////////////////////////////////////////////////// +// I/O +inline std::ostream& mpreal::output(std::ostream& os) const +{ + std::ostringstream format; + const std::ios::fmtflags flags = os.flags(); + + format << ((flags & std::ios::showpos) ? "%+" : "%"); + if (os.precision() >= 0) + format << '.' << os.precision() << "R*" + << ((flags & std::ios::floatfield) == std::ios::fixed ? 'f' : + (flags & std::ios::floatfield) == std::ios::scientific ? 'e' : + 'g'); + else + format << "R*e"; + + char *s = NULL; + if(!(mpfr_asprintf(&s, format.str().c_str(), + mpfr::mpreal::get_default_rnd(), + mpfr_srcptr()) + < 0)) + { + os << std::string(s); + mpfr_free_str(s); + } + return os; +} + +inline std::ostream& operator<<(std::ostream& os, const mpreal& v) +{ + return v.output(os); +} + +inline std::istream& operator>>(std::istream &is, mpreal& v) +{ + // TODO: use cout::hexfloat and other flags to setup base + std::string tmp; + is >> tmp; + mpfr_set_str(v.mpfr_ptr(), tmp.c_str(), 10, mpreal::get_default_rnd()); + return is; +} + +////////////////////////////////////////////////////////////////////////// +// Bits - decimal digits relation +// bits = ceil(digits*log[2](10)) +// digits = floor(bits*log[10](2)) + +inline mp_prec_t digits2bits(int d) +{ + const double LOG2_10 = 3.3219280948873624; + + return mp_prec_t(std::ceil( d * LOG2_10 )); +} + +inline int bits2digits(mp_prec_t b) +{ + const double LOG10_2 = 0.30102999566398119; + + return int(std::floor( b * LOG10_2 )); +} + +////////////////////////////////////////////////////////////////////////// +// Set/Get number properties +inline mpreal& mpreal::setSign(int sign, mp_rnd_t RoundingMode) +{ + mpfr_setsign(mpfr_ptr(), mpfr_srcptr(), sign < 0, RoundingMode); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline int mpreal::getPrecision() const +{ + return int(mpfr_get_prec(mpfr_srcptr())); +} + +inline mpreal& mpreal::setPrecision(int Precision, mp_rnd_t RoundingMode) +{ + mpfr_prec_round(mpfr_ptr(), Precision, RoundingMode); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::setInf(int sign) +{ + mpfr_set_inf(mpfr_ptr(), sign); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::setNan() +{ + mpfr_set_nan(mpfr_ptr()); + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mpreal& mpreal::setZero(int sign) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) + mpfr_set_zero(mpfr_ptr(), sign); +#else + mpfr_set_si(mpfr_ptr(), 0, (mpfr_get_default_rounding_mode)()); + setSign(sign); +#endif + + MPREAL_MSVC_DEBUGVIEW_CODE; + return *this; +} + +inline mp_prec_t mpreal::get_prec() const +{ + return mpfr_get_prec(mpfr_srcptr()); +} + +inline void mpreal::set_prec(mp_prec_t prec, mp_rnd_t rnd_mode) +{ + mpfr_prec_round(mpfr_ptr(),prec,rnd_mode); + MPREAL_MSVC_DEBUGVIEW_CODE; +} + +inline mp_exp_t mpreal::get_exp () const +{ + return mpfr_get_exp(mpfr_srcptr()); +} + +inline int mpreal::set_exp (mp_exp_t e) +{ + int x = mpfr_set_exp(mpfr_ptr(), e); + MPREAL_MSVC_DEBUGVIEW_CODE; + return x; +} + +inline mpreal& negate(mpreal& x) // -x in place +{ + mpfr_neg(x.mpfr_ptr(),x.mpfr_srcptr(),mpreal::get_default_rnd()); + return x; +} + +inline const mpreal frexp(const mpreal& x, mp_exp_t* exp, mp_rnd_t mode = mpreal::get_default_rnd()) +{ + mpreal y(x); +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,1,0)) + mpfr_frexp(exp,y.mpfr_ptr(),x.mpfr_srcptr(),mode); +#else + *exp = mpfr_get_exp(y.mpfr_srcptr()); + mpfr_set_exp(y.mpfr_ptr(),0); +#endif + return y; +} + +inline const mpreal frexp(const mpreal& x, int* exp, mp_rnd_t mode = mpreal::get_default_rnd()) +{ + mp_exp_t expl; + mpreal y = frexp(x, &expl, mode); + *exp = int(expl); + return y; +} + +inline const mpreal ldexp(const mpreal& v, mp_exp_t exp) +{ + mpreal x(v); + + // rounding is not important since we are just increasing the exponent (= exact operation) + mpfr_mul_2si(x.mpfr_ptr(), x.mpfr_srcptr(), exp, mpreal::get_default_rnd()); + return x; +} + +inline const mpreal scalbn(const mpreal& v, mp_exp_t exp) +{ + return ldexp(v, exp); +} + +inline mpreal machine_epsilon(mp_prec_t prec) +{ + /* the smallest eps such that 1 + eps != 1 */ + return machine_epsilon(mpreal(1, prec)); +} + +inline mpreal machine_epsilon(const mpreal& x) +{ + /* the smallest eps such that x + eps != x */ + if( x < 0) + { + return nextabove(-x) + x; + }else{ + return nextabove( x) - x; + } +} + +// minval is 'safe' meaning 1 / minval does not overflow +inline mpreal minval(mp_prec_t prec) +{ + /* min = 1/2 * 2^emin = 2^(emin - 1) */ + return mpreal(1, prec) << mpreal::get_emin()-1; +} + +// maxval is 'safe' meaning 1 / maxval does not underflow +inline mpreal maxval(mp_prec_t prec) +{ + /* max = (1 - eps) * 2^emax, eps is machine epsilon */ + return (mpreal(1, prec) - machine_epsilon(prec)) << mpreal::get_emax(); +} + +inline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps) +{ + return abs(a - b) <= machine_epsilon((max)(abs(a), abs(b))) * maxUlps; +} + +inline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps) +{ + return abs(a - b) <= eps; +} + +inline bool isEqualFuzzy(const mpreal& a, const mpreal& b) +{ + return isEqualFuzzy(a, b, machine_epsilon((max)(1, (min)(abs(a), abs(b))))); +} + +////////////////////////////////////////////////////////////////////////// +// C++11 sign functions. +inline mpreal copysign(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal rop(0, mpfr_get_prec(x.mpfr_ptr())); + mpfr_setsign(rop.mpfr_ptr(), x.mpfr_srcptr(), mpfr_signbit(y.mpfr_srcptr()), rnd_mode); + return rop; +} + +inline bool signbit(const mpreal& x) +{ + return mpfr_signbit(x.mpfr_srcptr()); +} + +inline mpreal& setsignbit(mpreal& x, bool minus, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpfr_setsign(x.mpfr_ptr(), x.mpfr_srcptr(), minus, rnd_mode); + return x; +} + +inline const mpreal modf(const mpreal& v, mpreal& n) +{ + mpreal f(v); + + // rounding is not important since we are using the same number + mpfr_frac (f.mpfr_ptr(),f.mpfr_srcptr(),mpreal::get_default_rnd()); + mpfr_trunc(n.mpfr_ptr(),v.mpfr_srcptr()); + return f; +} + +inline int mpreal::check_range (int t, mp_rnd_t rnd_mode) +{ + return mpfr_check_range(mpfr_ptr(),t,rnd_mode); +} + +inline int mpreal::subnormalize (int t,mp_rnd_t rnd_mode) +{ + int r = mpfr_subnormalize(mpfr_ptr(),t,rnd_mode); + MPREAL_MSVC_DEBUGVIEW_CODE; + return r; +} + +inline mp_exp_t mpreal::get_emin (void) +{ + return mpfr_get_emin(); +} + +inline int mpreal::set_emin (mp_exp_t exp) +{ + return mpfr_set_emin(exp); +} + +inline mp_exp_t mpreal::get_emax (void) +{ + return mpfr_get_emax(); +} + +inline int mpreal::set_emax (mp_exp_t exp) +{ + return mpfr_set_emax(exp); +} + +inline mp_exp_t mpreal::get_emin_min (void) +{ + return mpfr_get_emin_min(); +} + +inline mp_exp_t mpreal::get_emin_max (void) +{ + return mpfr_get_emin_max(); +} + +inline mp_exp_t mpreal::get_emax_min (void) +{ + return mpfr_get_emax_min(); +} + +inline mp_exp_t mpreal::get_emax_max (void) +{ + return mpfr_get_emax_max(); +} + +////////////////////////////////////////////////////////////////////////// +// Mathematical Functions +////////////////////////////////////////////////////////////////////////// +#define MPREAL_UNARY_MATH_FUNCTION_BODY(f) \ + mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); \ + mpfr_##f(y.mpfr_ptr(), x.mpfr_srcptr(), r); \ + return y; + +inline const mpreal sqr (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ MPREAL_UNARY_MATH_FUNCTION_BODY(sqr ); } + +inline const mpreal sqrt (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ MPREAL_UNARY_MATH_FUNCTION_BODY(sqrt); } + +inline const mpreal sqrt(const unsigned long int x, mp_rnd_t r) +{ + mpreal y; + mpfr_sqrt_ui(y.mpfr_ptr(), x, r); + return y; +} + +inline const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode) +{ + return sqrt(static_cast(v),rnd_mode); +} + +inline const mpreal sqrt(const long int v, mp_rnd_t rnd_mode) +{ + if (v>=0) return sqrt(static_cast(v),rnd_mode); + else return mpreal().setNan(); // NaN +} + +inline const mpreal sqrt(const int v, mp_rnd_t rnd_mode) +{ + if (v>=0) return sqrt(static_cast(v),rnd_mode); + else return mpreal().setNan(); // NaN +} + +inline const mpreal root(const mpreal& x, unsigned long int k, mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); +#if (MPFR_VERSION >= MPFR_VERSION_NUM(4,0,0)) + mpfr_rootn_ui(y.mpfr_ptr(), x.mpfr_srcptr(), k, r); +#else + mpfr_root(y.mpfr_ptr(), x.mpfr_srcptr(), k, r); +#endif + return y; +} + +inline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal y(0, mpfr_get_prec(a.mpfr_srcptr())); + mpfr_dim(y.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), r); + return y; +} + +inline int cmpabs(const mpreal& a,const mpreal& b) +{ + return mpfr_cmpabs(a.mpfr_ptr(), b.mpfr_srcptr()); +} + +inline int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + return mpfr_sin_cos(s.mpfr_ptr(), c.mpfr_ptr(), v.mpfr_srcptr(), rnd_mode); +} + +inline const mpreal sqrt (const long double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); } +inline const mpreal sqrt (const double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); } + +inline const mpreal cbrt (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cbrt ); } +inline const mpreal fabs (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } +inline const mpreal abs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); } +inline const mpreal log (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log ); } +inline const mpreal log2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log2 ); } +inline const mpreal log10 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log10); } +inline const mpreal exp (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp ); } +inline const mpreal exp2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp2 ); } +inline const mpreal exp10 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp10); } +inline const mpreal cos (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cos ); } +inline const mpreal sin (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sin ); } +inline const mpreal tan (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(tan ); } +inline const mpreal sec (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sec ); } +inline const mpreal csc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(csc ); } +inline const mpreal cot (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cot ); } +inline const mpreal acos (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(acos ); } +inline const mpreal asin (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(asin ); } +inline const mpreal atan (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(atan ); } + +inline const mpreal logb (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { return log2 (abs(x),r); } +inline mp_exp_t ilogb (const mpreal& x) { return x.get_exp(); } + +inline const mpreal acot (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return atan (1/v, r); } +inline const mpreal asec (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return acos (1/v, r); } +inline const mpreal acsc (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return asin (1/v, r); } +inline const mpreal acoth (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return atanh(1/v, r); } +inline const mpreal asech (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return acosh(1/v, r); } +inline const mpreal acsch (const mpreal& v, mp_rnd_t r = mpreal::get_default_rnd()) { return asinh(1/v, r); } + +inline const mpreal cosh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(cosh ); } +inline const mpreal sinh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sinh ); } +inline const mpreal tanh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(tanh ); } +inline const mpreal sech (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(sech ); } +inline const mpreal csch (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(csch ); } +inline const mpreal coth (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(coth ); } +inline const mpreal acosh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(acosh); } +inline const mpreal asinh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(asinh); } +inline const mpreal atanh (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(atanh); } + +inline const mpreal log1p (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(log1p ); } +inline const mpreal expm1 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(expm1 ); } +inline const mpreal eint (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(eint ); } +inline const mpreal gamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(gamma ); } +inline const mpreal tgamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(gamma ); } +inline const mpreal lngamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(lngamma); } +inline const mpreal zeta (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(zeta ); } +inline const mpreal erf (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(erf ); } +inline const mpreal erfc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(erfc ); } +inline const mpreal besselj0(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(j0 ); } +inline const mpreal besselj1(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(j1 ); } +inline const mpreal bessely0(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(y0 ); } +inline const mpreal bessely1(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(y1 ); } + +inline const mpreal nextpow2(const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal y(0, x.getPrecision()); + + if(!iszero(x)) + y = ceil(log2(abs(x,r),r)); + + return y; +} + +inline const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_atan2(a.mpfr_ptr(), y.mpfr_srcptr(), x.mpfr_srcptr(), rnd_mode); + return a; +} + +inline const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_hypot(a.mpfr_ptr(), x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); + return a; +} + +inline const mpreal hypot(const mpreal& a, const mpreal& b, const mpreal& c) +{ + if(isnan(a) || isnan(b) || isnan(c)) return mpreal().setNan(); + else + { + mpreal absa = abs(a), absb = abs(b), absc = abs(c); + mpreal w = (std::max)(absa, (std::max)(absb, absc)); + mpreal r; + + if (!iszero(w)) + { + mpreal iw = 1/w; + r = w * sqrt(sqr(absa*iw) + sqr(absb*iw) + sqr(absc*iw)); + } + + return r; + } +} + +inline const mpreal hypot(const mpreal& a, const mpreal& b, const mpreal& c, const mpreal& d) +{ + if(isnan(a) || isnan(b) || isnan(c) || isnan(d)) return mpreal().setNan(); + else + { + mpreal absa = abs(a), absb = abs(b), absc = abs(c), absd = abs(d); + mpreal w = (std::max)(absa, (std::max)(absb, (std::max)(absc, absd))); + mpreal r; + + if (!iszero(w)) + { + mpreal iw = 1/w; + r = w * sqrt(sqr(absa*iw) + sqr(absb*iw) + sqr(absc*iw) + sqr(absd*iw)); + } + + return r; + } +} + +inline const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_remainder(a.mpfr_ptr(), x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); + return a; +} + +inline const mpreal remquo (const mpreal& x, const mpreal& y, int* q, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + long lq; + mpreal a(0,(std::max)(y.getPrecision(), x.getPrecision())); + mpfr_remquo(a.mpfr_ptr(), &lq, x.mpfr_srcptr(), y.mpfr_srcptr(), rnd_mode); + if (q) *q = int(lq); + return a; +} + +inline const mpreal fac_ui (unsigned long int v, mp_prec_t prec = mpreal::get_default_prec(), + mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(0, prec); + mpfr_fac_ui(x.mpfr_ptr(),v,rnd_mode); + return x; +} + + +inline const mpreal lgamma (const mpreal& v, int *signp = 0, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(v); + int tsignp; + + if(signp) mpfr_lgamma(x.mpfr_ptr(), signp,v.mpfr_srcptr(),rnd_mode); + else mpfr_lgamma(x.mpfr_ptr(),&tsignp,v.mpfr_srcptr(),rnd_mode); + + return x; +} + + +inline const mpreal besseljn (long n, const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal y(0, x.getPrecision()); + mpfr_jn(y.mpfr_ptr(), n, x.mpfr_srcptr(), r); + return y; +} + +inline const mpreal besselyn (long n, const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal y(0, x.getPrecision()); + mpfr_yn(y.mpfr_ptr(), n, x.mpfr_srcptr(), r); + return y; +} + +inline const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a; + mp_prec_t p1, p2, p3; + + p1 = v1.get_prec(); + p2 = v2.get_prec(); + p3 = v3.get_prec(); + + a.set_prec(p3>p2?(p3>p1?p3:p1):(p2>p1?p2:p1)); + + mpfr_fma(a.mp,v1.mp,v2.mp,v3.mp,rnd_mode); + return a; +} + +inline const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a; + mp_prec_t p1, p2, p3; + + p1 = v1.get_prec(); + p2 = v2.get_prec(); + p3 = v3.get_prec(); + + a.set_prec(p3>p2?(p3>p1?p3:p1):(p2>p1?p2:p1)); + + mpfr_fms(a.mp,v1.mp,v2.mp,v3.mp,rnd_mode); + return a; +} + +inline const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a; + mp_prec_t p1, p2; + + p1 = v1.get_prec(); + p2 = v2.get_prec(); + + a.set_prec(p1>p2?p1:p2); + + mpfr_agm(a.mp, v1.mp, v2.mp, rnd_mode); + + return a; +} + +inline const mpreal sum (const mpreal tab[], const unsigned long int n, int& status, mp_rnd_t mode = mpreal::get_default_rnd()) +{ + mpfr_srcptr *p = new mpfr_srcptr[n]; + + for (unsigned long int i = 0; i < n; i++) + p[i] = tab[i].mpfr_srcptr(); + + mpreal x; + status = mpfr_sum(x.mpfr_ptr(), (mpfr_ptr*)p, n, mode); + + delete [] p; + return x; +} + +////////////////////////////////////////////////////////////////////////// +// MPFR 2.4.0 Specifics +#if (MPFR_VERSION >= MPFR_VERSION_NUM(2,4,0)) + +inline int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + return mpfr_sinh_cosh(s.mp,c.mp,v.mp,rnd_mode); +} + +inline const mpreal li2 (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) +{ + MPREAL_UNARY_MATH_FUNCTION_BODY(li2); +} + +inline const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + /* R = rem(X,Y) if Y != 0, returns X - n * Y where n = trunc(X/Y). */ + return fmod(x, y, rnd_mode); +} + +inline const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + (void)rnd_mode; + + /* + + m = mod(x,y) if y != 0, returns x - n*y where n = floor(x/y) + + The following are true by convention: + - mod(x,0) is x + - mod(x,x) is 0 + - mod(x,y) for x != y and y != 0 has the same sign as y. + + */ + + if(iszero(y)) return x; + if(x == y) return 0; + + mpreal m = x - floor(x / y) * y; + + return copysign(abs(m),y); // make sure result has the same sign as Y +} + +inline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal a; + mp_prec_t yp, xp; + + yp = y.get_prec(); + xp = x.get_prec(); + + a.set_prec(yp>xp?yp:xp); + + mpfr_fmod(a.mp, x.mp, y.mp, rnd_mode); + + return a; +} + +inline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(v); + mpfr_rec_sqrt(x.mp,v.mp,rnd_mode); + return x; +} +#endif // MPFR 2.4.0 Specifics + +////////////////////////////////////////////////////////////////////////// +// MPFR 3.0.0 Specifics +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) +inline const mpreal digamma (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(digamma); } +inline const mpreal ai (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(ai); } +#endif // MPFR 3.0.0 Specifics + +////////////////////////////////////////////////////////////////////////// +// Constants +inline const mpreal const_log2 (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal x(0, p); + mpfr_const_log2(x.mpfr_ptr(), r); + return x; +} + +inline const mpreal const_pi (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal x(0, p); + mpfr_const_pi(x.mpfr_ptr(), r); + return x; +} + +inline const mpreal const_euler (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal x(0, p); + mpfr_const_euler(x.mpfr_ptr(), r); + return x; +} + +inline const mpreal const_catalan (mp_prec_t p = mpreal::get_default_prec(), mp_rnd_t r = mpreal::get_default_rnd()) +{ + mpreal x(0, p); + mpfr_const_catalan(x.mpfr_ptr(), r); + return x; +} + +inline const mpreal const_infinity (int sign = 1, mp_prec_t p = mpreal::get_default_prec()) +{ + mpreal x(0, p); + mpfr_set_inf(x.mpfr_ptr(), sign); + return x; +} + +////////////////////////////////////////////////////////////////////////// +// Integer Related Functions +inline const mpreal ceil(const mpreal& v) +{ + mpreal x(v); + mpfr_ceil(x.mp,v.mp); + return x; +} + +inline const mpreal floor(const mpreal& v) +{ + mpreal x(v); + mpfr_floor(x.mp,v.mp); + return x; +} + +inline const mpreal round(const mpreal& v) +{ + mpreal x(v); + mpfr_round(x.mp,v.mp); + return x; +} + +inline long lround(const mpreal& v) +{ + long r = std::numeric_limits::min(); + mpreal x = round(v); + if (abs(x) < -mpreal(r)) // Assume mpreal(LONG_MIN) is exact + r = x.toLong(); + return r; +} + +inline long long llround(const mpreal& v) +{ + long long r = std::numeric_limits::min(); + mpreal x = round(v); + if (abs(x) < -mpreal(r)) // Assume mpreal(LLONG_MIN) is exact + r = x.toLLong(); + return r; +} + +inline const mpreal trunc(const mpreal& v) +{ + mpreal x(v); + mpfr_trunc(x.mp,v.mp); + return x; +} + +inline const mpreal rint (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint ); } +inline const mpreal rint_ceil (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_ceil ); } +inline const mpreal rint_floor (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_floor); } +inline const mpreal rint_round (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_round); } +inline const mpreal rint_trunc (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_trunc); } +inline const mpreal frac (const mpreal& x, mp_rnd_t r = mpreal::get_default_rnd()) { MPREAL_UNARY_MATH_FUNCTION_BODY(frac ); } + +////////////////////////////////////////////////////////////////////////// +// Miscellaneous Functions +inline int sgn(const mpreal& op) +{ + // Please note, this is classic signum function which ignores sign of zero. + // Use signbit if you need sign of zero. + return mpfr_sgn(op.mpfr_srcptr()); +} + +////////////////////////////////////////////////////////////////////////// +// Miscellaneous Functions +inline void swap (mpreal& a, mpreal& b) { mpfr_swap(a.mpfr_ptr(),b.mpfr_ptr()); } +inline const mpreal (max)(const mpreal& x, const mpreal& y){ return (x>y?x:y); } +inline const mpreal (min)(const mpreal& x, const mpreal& y){ return (x= MPFR_VERSION_NUM(3,0,0)) +inline const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x; + mpfr_urandom(x.mpfr_ptr(), state, rnd_mode); + return x; +} +#endif + +#if (MPFR_VERSION <= MPFR_VERSION_NUM(2,4,2)) +inline const mpreal random2 (mp_size_t size, mp_exp_t exp) +{ + mpreal x; + mpfr_random2(x.mpfr_ptr(),size,exp); + return x; +} +#endif + +// Uniformly distributed random number generation +// a = random(seed); <- initialization & first random number generation +// a = random(); <- next random numbers generation +// seed != 0 +inline const mpreal random(unsigned int seed = 0) +{ +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,0,0)) + static gmp_randstate_t state; + static bool initialize = true; + + if(initialize) + { + gmp_randinit_default(state); + gmp_randseed_ui(state,0); + initialize = false; + } + + if(seed != 0) gmp_randseed_ui(state,seed); + + return mpfr::urandom(state); +#else + if(seed != 0) std::srand(seed); + return mpfr::mpreal(std::rand()/(double)RAND_MAX); +#endif +} + +#if (MPFR_VERSION >= MPFR_VERSION_NUM(3,1,0)) +inline const mpreal grandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x; +#if (MPFR_VERSION >= MPFR_VERSION_NUM(4,0,0)) + mpfr_nrandom(x.mpfr_ptr(), state, rnd_mode); +#else + mpfr_grandom(x.mpfr_ptr(), NULL, state, rnd_mode); +#endif + return x; +} + +inline const mpreal grandom(unsigned int seed = 0) +{ + static gmp_randstate_t state; + static bool initialize = true; + + if(initialize) + { + gmp_randinit_default(state); + gmp_randseed_ui(state,0); + initialize = false; + } + + if(seed != 0) gmp_randseed_ui(state,seed); + + return mpfr::grandom(state); +} +#endif + +////////////////////////////////////////////////////////////////////////// +// Set/Get global properties +inline void mpreal::set_default_prec(mp_prec_t prec) +{ + mpfr_set_default_prec(prec); +} + +inline void mpreal::set_default_rnd(mp_rnd_t rnd_mode) +{ + mpfr_set_default_rounding_mode(rnd_mode); +} + +inline bool mpreal::fits_in_bits(double x, int n) +{ + int i; + double t; + return IsInf(x) || (std::modf ( std::ldexp ( std::frexp ( x, &i ), n ), &t ) == 0.0); +} + +inline const mpreal pow(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(a); + mpfr_pow(x.mp,x.mp,b.mp,rnd_mode); + return x; +} + +inline const mpreal pow(const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(a); + mpfr_pow_z(x.mp,x.mp,b,rnd_mode); + return x; +} + +inline const mpreal pow(const mpreal& a, const long long b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + (void)rnd_mode; + return pow(a,mpreal(b)); +} + +inline const mpreal pow(const mpreal& a, const unsigned long long b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + (void)rnd_mode; + return pow(a,mpreal(b)); +} + +inline const mpreal pow(const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(a); + mpfr_pow_ui(x.mp,x.mp,b,rnd_mode); + return x; +} + +inline const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode) +{ + return pow(a,static_cast(b),rnd_mode); +} + +inline const mpreal pow(const mpreal& a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(a); + mpfr_pow_si(x.mp,x.mp,b,rnd_mode); + return x; +} + +inline const mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode) +{ + return pow(a,static_cast(b),rnd_mode); +} + +inline const mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode) +{ + return pow(a,mpreal(b),rnd_mode); +} + +inline const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode) +{ + return pow(a,mpreal(b),rnd_mode); +} + +inline const mpreal pow(const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd()) +{ + mpreal x(a); + mpfr_ui_pow(x.mp,a,b.mp,rnd_mode); + return x; +} + +inline const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode) +{ + return pow(static_cast(a),b,rnd_mode); +} + +inline const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),b,rnd_mode); + else return pow(mpreal(a),b,rnd_mode); +} + +inline const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),b,rnd_mode); + else return pow(mpreal(a),b,rnd_mode); +} + +inline const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); +} + +inline const mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); +} + +// pow unsigned long int +inline const mpreal pow(const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + mpreal x(a); + mpfr_ui_pow_ui(x.mp,a,b,rnd_mode); + return x; +} + +inline const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode) +{ + return pow(a,static_cast(b),rnd_mode); //mpfr_ui_pow_ui +} + +inline const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode) +{ + if(b>0) return pow(a,static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode) +{ + if(b>0) return pow(a,static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode) +{ + return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode) +{ + return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow +} + +// pow unsigned int +inline const mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + return pow(static_cast(a),b,rnd_mode); //mpfr_ui_pow_ui +} + +inline const mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode) +{ + return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui +} + +inline const mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode) +{ + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode) +{ + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode) +{ + return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow +} + +inline const mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode) +{ + return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow +} + +// pow long int +inline const mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + if (a>0) return pow(static_cast(a),b,rnd_mode); //mpfr_ui_pow_ui + else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode) +{ + if (a>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(mpreal(a),static_cast(b),rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode) +{ + if (a>0) + { + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + }else{ + return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si + } +} + +inline const mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode) +{ + if (a>0) + { + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + }else{ + return pow(mpreal(a),static_cast(b),rnd_mode); // mpfr_pow_si + } +} + +inline const mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow +} + +inline const mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow +} + +// pow int +inline const mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + if (a>0) return pow(static_cast(a),b,rnd_mode); //mpfr_ui_pow_ui + else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode) +{ + if (a>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(mpreal(a),static_cast(b),rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode) +{ + if (a>0) + { + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + }else{ + return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si + } +} + +inline const mpreal pow(const int a, const int b, mp_rnd_t rnd_mode) +{ + if (a>0) + { + if(b>0) return pow(static_cast(a),static_cast(b),rnd_mode); //mpfr_ui_pow_ui + else return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + }else{ + return pow(mpreal(a),static_cast(b),rnd_mode); // mpfr_pow_si + } +} + +inline const mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow +} + +inline const mpreal pow(const int a, const double b, mp_rnd_t rnd_mode) +{ + if (a>=0) return pow(static_cast(a),mpreal(b),rnd_mode); //mpfr_ui_pow + else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow +} + +// pow long double +inline const mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),mpreal(b),rnd_mode); +} + +inline const mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),static_cast(b),rnd_mode); //mpfr_pow_ui +} + +inline const mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si +} + +inline const mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),static_cast(b),rnd_mode); // mpfr_pow_si +} + +inline const mpreal pow(const double a, const double b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),mpreal(b),rnd_mode); +} + +inline const mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); // mpfr_pow_ui +} + +inline const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),static_cast(b),rnd_mode); // mpfr_pow_ui +} + +inline const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si +} + +inline const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode) +{ + return pow(mpreal(a),static_cast(b),rnd_mode); // mpfr_pow_si +} +} // End of mpfr namespace + +// Explicit specialization of std::swap for mpreal numbers +// Thus standard algorithms will use efficient version of swap (due to Koenig lookup) +// Non-throwing swap C++ idiom: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-throwing_swap +namespace std +{ + inline const mpfr::mpreal& min(const mpfr::mpreal& a, const mpfr::mpreal& b, bool omitnan = false) + { + if(omitnan) + { + if(isnan(a)) return b; + else if(isnan(b)) return a; + } + else + { + if(isnan(a)) return a; + else if(isnan(b)) return b; + } + + return a <= b ? a : b; + } + + inline const mpfr::mpreal& max(const mpfr::mpreal& a, const mpfr::mpreal& b, bool omitnan = false) + { + if(omitnan) + { + if(isnan(a)) return b; + else if(isnan(b)) return a; + } + else + { + if(isnan(a)) return a; + else if(isnan(b)) return b; + } + + return a >= b ? a : b; + } + + + template <> + inline void swap(mpfr::mpreal& x, mpfr::mpreal& y) + { + return mpfr::swap(x, y); + } + + template<> + class numeric_limits + { + public: + static const bool is_specialized = true; + static const bool is_signed = true; + static const bool is_integer = false; + static const bool is_exact = false; + static const int radix = 2; + + static const bool has_infinity = true; + static const bool has_quiet_NaN = true; + static const bool has_signaling_NaN = true; + + static const bool is_iec559 = true; // = IEEE 754 + static const bool is_bounded = true; + static const bool is_modulo = false; + static const bool traps = true; + static const bool tinyness_before = true; + + static const float_denorm_style has_denorm = denorm_absent; + + inline static mpfr::mpreal (min) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::minval(precision); } + inline static mpfr::mpreal (max) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::maxval(precision); } + inline static mpfr::mpreal lowest (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return -mpfr::maxval(precision); } + + // Returns smallest eps such that 1 + eps != 1 (classic machine epsilon) + inline static mpfr::mpreal epsilon(mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::machine_epsilon(precision); } + + // Returns smallest eps such that x + eps != x (relative machine epsilon) + inline static mpfr::mpreal epsilon(const mpfr::mpreal& x) { return mpfr::machine_epsilon(x); } + + inline static mpfr::mpreal round_error(mp_prec_t precision = mpfr::mpreal::get_default_prec()) + { + mp_rnd_t r = mpfr::mpreal::get_default_rnd(); + + if(r == GMP_RNDN) return mpfr::mpreal(0.5, precision); + else return mpfr::mpreal(1.0, precision); + } + + inline static const mpfr::mpreal infinity() { return mpfr::const_infinity(); } + inline static const mpfr::mpreal quiet_NaN() { return mpfr::mpreal().setNan(); } + inline static const mpfr::mpreal signaling_NaN() { return mpfr::mpreal().setNan(); } + inline static const mpfr::mpreal denorm_min() { return (min)(); } + + // Please note, exponent range is not fixed in MPFR + static const int min_exponent = MPFR_EMIN_DEFAULT; + static const int max_exponent = MPFR_EMAX_DEFAULT; + MPREAL_PERMISSIVE_EXPR static const int min_exponent10 = (int) (MPFR_EMIN_DEFAULT * 0.3010299956639811); + MPREAL_PERMISSIVE_EXPR static const int max_exponent10 = (int) (MPFR_EMAX_DEFAULT * 0.3010299956639811); + +#ifdef MPREAL_HAVE_DYNAMIC_STD_NUMERIC_LIMITS + + // Following members should be constant according to standard, but they can be variable in MPFR + // So we define them as functions here. + // + // This is preferable way for std::numeric_limits specialization. + // But it is incompatible with standard std::numeric_limits and might not work with other libraries, e.g. boost. + // See below for compatible implementation. + inline static float_round_style round_style() + { + mp_rnd_t r = mpfr::mpreal::get_default_rnd(); + + switch (r) + { + case GMP_RNDN: return round_to_nearest; + case GMP_RNDZ: return round_toward_zero; + case GMP_RNDU: return round_toward_infinity; + case GMP_RNDD: return round_toward_neg_infinity; + default: return round_indeterminate; + } + } + + inline static int digits() { return int(mpfr::mpreal::get_default_prec()); } + inline static int digits(const mpfr::mpreal& x) { return x.getPrecision(); } + + inline static int digits10(mp_prec_t precision = mpfr::mpreal::get_default_prec()) + { + return mpfr::bits2digits(precision); + } + + inline static int digits10(const mpfr::mpreal& x) + { + return mpfr::bits2digits(x.getPrecision()); + } + + inline static int max_digits10(mp_prec_t precision = mpfr::mpreal::get_default_prec()) + { + return digits10(precision); + } +#else + // Digits and round_style are NOT constants when it comes to mpreal. + // If possible, please use functions digits() and round_style() defined above. + // + // These (default) values are preserved for compatibility with existing libraries, e.g. boost. + // Change them accordingly to your application. + // + // For example, if you use 256 bits of precision uniformly in your program, then: + // digits = 256 + // digits10 = 77 + // max_digits10 = 78 + // + // Approximate formula for decimal digits is: digits10 = floor(log10(2) * digits). See bits2digits() for more details. + + static const std::float_round_style round_style = round_to_nearest; + static const int digits = 53; + static const int digits10 = 15; + static const int max_digits10 = 16; +#endif + }; + +} + +#endif /* __MPREAL_H__ */