├── matrix_decomposition_villa.pdf ├── data ├── DonorNote.txt ├── SPECT.names ├── SPECT.train ├── SPECTF.names ├── SMALL.train ├── SPECT.test ├── SPECTF.train ├── SPECTF.test └── SPECTFincorrect.test ├── unittest_matrixdecomposition.py ├── unittest_matrixgeneration.py ├── copyright.txt ├── README.md ├── matrixgeneration.py ├── test_synthetic_matrixes.py ├── matrixdecomposition.py ├── test_real_data.py └── completion_accuracy.svg /matrix_decomposition_villa.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fela/matrix-completion/HEAD/matrix_decomposition_villa.pdf -------------------------------------------------------------------------------- /data/DonorNote.txt: -------------------------------------------------------------------------------- 1 | September 1, 2006 2 | 3 | SPECTF.test has been modified (see Donor Note below for justification). 4 | The incorrect test set has been renamed to SPECTFincorrect.test 5 | 6 | --Librarian 7 | 8 | 9 | Donor Note: 10 | 11 | > The incorrect file is the SPECTF.test file in the SPECT dataset. It contains 12 | > too many examples (duplicates the training file) and some of the data points are repeated. 13 | -------------------------------------------------------------------------------- /unittest_matrixdecomposition.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Fri Jun 1 11:18:35 2012 4 | 5 | @author: Fela Winkelmolen 6 | """ 7 | 8 | import unittest 9 | import matrixdecomposition as md 10 | 11 | import scipy as sp 12 | 13 | class TestMatrixGeneration(unittest.TestCase): 14 | def test_decomposition_id(self): 15 | # testing using the identity map 16 | TH = sp.array([[1, 2, 3], [2, 4, 6]]) 17 | GA = sp.array([[0, 0, 0], [0, 100, 0]]) 18 | 19 | Y = TH + GA 20 | 21 | A, B = md.matrix_decomposition(Y, lambda_d=0.1, mu_d=0.08, alpha=1000) 22 | 23 | self.assertLess(abs(TH-A).sum(), 1.0, "") 24 | self.assertLess(abs(TH-A).max(), 0.2, "") 25 | 26 | self.assertLess(abs(GA-A).sum() < 1.0, "") 27 | 28 | 29 | if __name__ == '__main__': 30 | unittest.main() 31 | -------------------------------------------------------------------------------- /unittest_matrixgeneration.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Thu May 31 11:18:10 2012 4 | 5 | @author: Fela Winkelmolen 6 | """ 7 | 8 | import unittest 9 | import matrix_generation as mg 10 | 11 | import scipy as sp 12 | import numpy.random as random 13 | import numpy.linalg 14 | 15 | class TestMatrixGeneration(unittest.TestCase): 16 | def test_ortonormal(self): 17 | n = 15 18 | I = sp.identity(n) 19 | for _ in range(0, 100): 20 | M = mg.ortonormal(n) 21 | self.assertTrue( (M.dot(M.T) - I <= mg.delta()).all() ) 22 | 23 | def test_low_rank(self): 24 | for _ in range(0, 100): 25 | rank = random.randint(3, 8) 26 | M = mg.low_rank(15, rank) 27 | actual_rank = numpy.linalg.matrix_rank(M, mg.delta() * 4) 28 | self.assertEqual(actual_rank, rank) 29 | 30 | if __name__ == '__main__': 31 | unittest.main() 32 | -------------------------------------------------------------------------------- /copyright.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2012 Fela Winkelmolen 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Matrix Completion 2 | ================= 3 | 4 | This code implements a matrix completion and decomposition algorithm, based on [this][1] paper. 5 | 6 | [1]:http://arxiv.org/abs/1102.4807 7 | 8 | The main method you will want to use is `matrix_decomposition()` which decomposes an optionally incomplete matrix, into two components, one low rank, and one sparse. It takes the following arguments: 9 | 10 | * `Y`: the matrix to decompose. `Y` is assumed to be equal to `TH + GA + W`, where `TH` is an approximately low rank matrix, `GA` is a sparse "spiky" matrix, and `W` is noise. A full matrix needs to be given, but some parts can be ignored, as specified by the mask. 11 | * `Mask`: a mask can be given to treat the matrix as incomplete. It must be of the same dimentions as `Y`. It must have `0` or `False` in the positions where `Y` is incomplete, `1` or `True` elsewhere. Defaults to `None`. 12 | * `lambda_d`: regularization paramater for the low rank `TH` matrix. 13 | * `mu_d`: regularization parameter for the sparse `GA` matrix. Use higher values if no spikes are expected. 14 | * `alpha`: parameter that limits the maximum element of the low rank TH matrix. Bigger matrices will need bigger alpha` values. 15 | 16 | The method will **return** `TH` and `GA`. 17 | 18 | Additionally the code contains some methods and classes to generate synthetic matrices and to test the decomposition in various ways. 19 | 20 | -------------------------------------------------------------------------------- /matrixgeneration.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Thu May 31 11:09:39 2012 4 | 5 | @author: Fela Winkelmolen 6 | 7 | Some methods to generate test matrixes 8 | """ 9 | 10 | import scipy as sp 11 | import scipy.linalg as linalg 12 | import numpy.random as random 13 | #import load 14 | 15 | def delta(): 16 | return sp.finfo(float).eps * 16 17 | 18 | def ortonormal(m): 19 | I = sp.identity(m) 20 | 21 | # eigenvectors of a random symmetric m by m matrix 22 | A = sp.rand(m, m) 23 | #print '---------------------------' 24 | #print A.sum() 25 | S = A * A.T 26 | _, P = linalg.eigh(S) 27 | #print P 28 | #print P.dot(P.T) 29 | # check if really ortonormal 30 | if ((P.dot(P.T) - I > delta()).any()): 31 | return ortonormal(m) # try again 32 | return P 33 | 34 | def low_rank(m, rank): 35 | diag = sp.concatenate((sp.rand(rank)*5+1, sp.zeros(m-rank))) 36 | E = sp.diag(diag) 37 | return ortonormal(m).dot(E).dot(ortonormal(m).T) 38 | 39 | def spiky(m, spikes=None, avg=1.0, sigma=None): 40 | # substitute None with default values 41 | spikes = spikes or m 42 | sigma = sigma or avg/6.0 43 | 44 | GA = sp.zeros((m, m)) 45 | r = random.randint(0, m, spikes) # row indexes of spikes 46 | c = random.randint(0, m, spikes) # column indexes of spikes 47 | GA[[r, c]] = sigma * random.randn(spikes) + avg 48 | return GA 49 | 50 | def selection(m, perc): 51 | return sp.rand(m, m) >= perc 52 | -------------------------------------------------------------------------------- /test_synthetic_matrixes.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Mon Jul 2 09:19:57 2012 4 | 5 | @author: Fela Winkelmolen 6 | """ 7 | 8 | import scipy as sp 9 | import scipy.linalg 10 | from matrixgeneration import * 11 | import matrixdecomposition as md 12 | 13 | class Tester: 14 | def __init__(self): 15 | sp.random.seed(0) 16 | self._decomposition_args = {} 17 | self.verbose = True 18 | self._generate_matrix() 19 | 20 | def set_decomposition_options(self, **kwargs): 21 | self._decomposition_args = kwargs 22 | 23 | """ sets the following instance variables: 24 | * _Y is the input matrix of the decomposition algorithm 25 | * _Mask is the mask of _Y equal to True in the positions 26 | where _Y is observed 27 | * _TH is the first component of _Y, which we want to recover 28 | * _GA is the other component""" 29 | def _generate_matrix(self): 30 | pass 31 | 32 | def comparative_test(self): 33 | TH, GA = self._TH, self._GA 34 | Y, Mask, args = self._Y, self._Mask, self._decomposition_args 35 | A, B = md.matrix_decomposition(Y, Mask, **args) 36 | if self.verbose == True: 37 | print GA[1, :] 38 | print B[1, :] 39 | print Mask[1, :] 40 | print TH[1, :] 41 | print A[1, :] 42 | 43 | error = ((TH - A)**2).sum() / TH.size 44 | print "mean square error:", error 45 | error2 = ((TH - Y*Mask)**2).sum() / TH.size 46 | print "mse for naive solution:", error2 47 | print "improvement:", error2/error, "times" 48 | 49 | class SintheticMatrixTester(Tester): 50 | def __init__(self): 51 | # default values 52 | self._size = 30 53 | self._rank = 3 54 | self._holes = 0.2 55 | self._noise = 5 56 | Tester.__init__(self) 57 | 58 | def _generate_matrix(self): 59 | size = self._size 60 | TH = low_rank(size, self._rank) + sp.rand(size, size)/50*self._noise 61 | GA = spiky(size) 62 | Mask = selection(size, self._holes) 63 | Y = (TH + GA) * Mask 64 | self._Y, self._TH, self._GA, self._Mask = Y, TH, GA, Mask 65 | 66 | def no_noise_test(self): 67 | pass 68 | 69 | def default_test(self): 70 | pass 71 | 72 | t = SintheticMatrixTester() 73 | t.comparative_test() -------------------------------------------------------------------------------- /matrixdecomposition.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sun Apr 15 12:17:57 2012 4 | 5 | @author: Fela Winkelmolen 6 | """ 7 | 8 | 9 | import scipy as sp 10 | import scipy.linalg 11 | from matrixgeneration import * 12 | 13 | """ 14 | Decomposes an optionally incomplete matrix, into two components, one low rank, and one sparse. It takes the following arguments: 15 | Y: The matrix to decompose. It is supposed that Y is equal to TH + GA + W, where TH is an approximately low rank matrix, GA is a sparse "spiky" matrix, and W is noise. A full matrix needs to be given, but some parts can be ignored, as specified by the mask. 16 | Mask: A mask can be given to treat the matrix as incomplete. It must be of the same dimentions as Y. It must have 0 or False in the positions where Y is incomplete, 1 or True elsewhere. Defaults to None. 17 | lambda_d: regularization paramater for the low rank TH matrix. 18 | mu_d: regularization parameter for the sparse GA matrix. Use higher values if no spikes are expected. 19 | alpha: parameter that limits the maximum element of the low rank TH matrix. Bigger matrices will need a bigger alpha values. 20 | 21 | It will return TH and GA. 22 | """ 23 | def matrix_decomposition(Y, Mask=None, lambda_d=0.025, mu_d=0.005, alpha=20, max_iterations=1000): 24 | # default value 25 | if Mask == None: 26 | Mask = Y*0+1 27 | t = 1.0 28 | TH = GA = TH_last = GA_last = Y * 0.0 # theta and gamma 29 | for k in range(0, max_iterations): 30 | t_last = t 31 | #print (t_last - 1)/t 32 | t = ( 1.0 + sp.sqrt(1 + 4 * t**2) )/ 2.0 33 | #print (t_last - 1)/t 34 | Z = TH + (t_last - 1)/t*(TH-TH_last) 35 | N = GA + (t_last - 1)/t*(GA-GA_last) 36 | lambd = 0.5 # TODO: check 37 | f = ((Z+N) - Y) * 0.5 38 | first = Z - f*Mask 39 | second = N - f*Mask 40 | TH_last, GA_last = TH, GA 41 | TH, GA = prox_g([first, second], lambd, lambda_d, mu_d, alpha) 42 | if sp.sqrt(((TH - TH_last)**2).sum()) + sp.sqrt(((GA - GA_last)**2).sum()) < 1e-2: 43 | print k, "iterations" 44 | break 45 | return [TH, GA] 46 | 47 | def prox_g(grad, lambd, lambda_d, mu_d, alpha): 48 | N, Z = grad 49 | 50 | X = N 51 | P = Q = N*0.0 52 | for i in range(0, 500): # TODO: how many iterations? 53 | Y = prox1(X+P, lambda_d, lambd) 54 | P = X + P - Y 55 | X_last = X 56 | X = prox2(Y+Q, alpha) 57 | Q = Y + Q - X 58 | if sp.sqrt(((X - X_last)**2).sum()) < 1e-4: 59 | break 60 | V = X 61 | 62 | # soft thresholding 63 | W = soft_threshold(Z, mu_d*lambd) 64 | return [V, W] 65 | 66 | # projection of nuclear norm 67 | def prox1(X, lambda_d, lambd): 68 | U, s, Vh = sp.linalg.svd(X) 69 | d1, d2 = X.shape 70 | E = sp.linalg.diagsvd(s, d1, d2) # sigma 71 | S = soft_threshold(E, lambda_d*lambd) 72 | return U.dot(S.dot(Vh)) 73 | 74 | # projection in Q 75 | def prox2(X, alpha): 76 | limit = alpha / sp.sqrt(sp.array(X.shape).prod()) 77 | X = sp.minimum(X, limit) 78 | X = sp.maximum(X, -limit) 79 | return X 80 | 81 | def soft_threshold(X, s): 82 | return (X-s)*(X>s) + (X+s)*(X<-s) 83 | 84 | #sp.random.seed(0) 85 | #size = 30 86 | #TH = low_rank(size, 3) 87 | #GA = spiky(size) 88 | #Y = TH + GA 89 | #X = selection(size, 0.) 90 | #A, B = matrix_decomposition(Y*X, Mask=X) 91 | #print X[1, :] 92 | #print TH[1, :] 93 | #print A[1, :] 94 | #print GA[1, :] 95 | #print B[1, :] 96 | -------------------------------------------------------------------------------- /data/SPECT.names: -------------------------------------------------------------------------------- 1 | 1. Title of Database: SPECT heart data 2 | 3 | 2. Sources: 4 | -- Original owners: Krzysztof J. Cios, Lukasz A. Kurgan 5 | University of Colorado at Denver, Denver, CO 80217, U.S.A. 6 | Krys.Cios@cudenver.edu 7 | Lucy S. Goodenday 8 | Medical College of Ohio, OH, U.S.A. 9 | 10 | -- Donors: Lukasz A.Kurgan, Krzysztof J. Cios 11 | -- Date: 10/01/01 12 | 13 | 3. Past Usage: 14 | 1. Kurgan, L.A., Cios, K.J., Tadeusiewicz, R., Ogiela, M. & Goodenday, L.S. 15 | "Knowledge Discovery Approach to Automated Cardiac SPECT Diagnosis" 16 | Artificial Intelligence in Medicine, vol. 23:2, pp 149-169, Oct 2001 17 | 18 | Results: The CLIP3 machine learning algorithm achieved 84.0% accuracy 19 | References: 20 | Cios, K.J., Wedding, D.K. & Liu, N. 21 | CLIP3: cover learning using integer programming. 22 | Kybernetes, 26:4-5, pp 513-536, 1997 23 | 24 | Cios, K.J. & Kurgan, L. 25 | Hybrid Inductive Machine Learning: An Overview of CLIP Algorithms, 26 | In: Jain, L.C., and Kacprzyk, J. (Eds.) 27 | New Learning Paradigms in Soft Computing, 28 | Physica-Verlag (Springer), 2001 29 | 30 | SPECT is a good data set for testing ML algorithms; it has 267 instances 31 | that are descibed by 23 binary attributes 32 | 33 | Other results (in press): 34 | -- CLIP4 algorithm achieved 86.1% accuracy 35 | -- ensemble of CLIP4 classifiers achieved 90.4% accuracy 36 | -- Predicted attribute: OVERALL_DIAGNOSIS (binary) 37 | 38 | 4. Relevant Information: 39 | The dataset describes diagnosing of cardiac Single Proton Emission Computed Tomography (SPECT) images. 40 | Each of the patients is classified into two categories: normal and abnormal. 41 | The database of 267 SPECT image sets (patients) was processed to extract features that summarize the original SPECT images. 42 | As a result, 44 continuous feature pattern was created for each patient. 43 | The pattern was further processed to obtain 22 binary feature patterns. 44 | The CLIP3 algorithm was used to generate classification rules from these patterns. 45 | The CLIP3 algorithm generated rules that were 84.0% accurate (as compared with cardilogists' diagnoses). 46 | 47 | 5. Number of Instances: 267 48 | 6. Number of Attributes: 23 (22 binary + 1 binary class) 49 | 7. Attribute Information: 50 | 1. OVERALL_DIAGNOSIS: 0,1 (class attribute, binary) 51 | 2. F1: 0,1 (the partial diagnosis 1, binary) 52 | 3. F2: 0,1 (the partial diagnosis 2, binary) 53 | 4. F3: 0,1 (the partial diagnosis 3, binary) 54 | 5. F4: 0,1 (the partial diagnosis 4, binary) 55 | 6. F5: 0,1 (the partial diagnosis 5, binary) 56 | 7. F6: 0,1 (the partial diagnosis 6, binary) 57 | 8. F7: 0,1 (the partial diagnosis 7, binary) 58 | 9. F8: 0,1 (the partial diagnosis 8, binary) 59 | 10. F9: 0,1 (the partial diagnosis 9, binary) 60 | 11. F10: 0,1 (the partial diagnosis 10, binary) 61 | 12. F11: 0,1 (the partial diagnosis 11, binary) 62 | 13. F12: 0,1 (the partial diagnosis 12, binary) 63 | 14. F13: 0,1 (the partial diagnosis 13, binary) 64 | 15. F14: 0,1 (the partial diagnosis 14, binary) 65 | 16. F15: 0,1 (the partial diagnosis 15, binary) 66 | 17. F16: 0,1 (the partial diagnosis 16, binary) 67 | 18. F17: 0,1 (the partial diagnosis 17, binary) 68 | 19. F18: 0,1 (the partial diagnosis 18, binary) 69 | 20. F19: 0,1 (the partial diagnosis 19, binary) 70 | 21. F20: 0,1 (the partial diagnosis 20, binary) 71 | 22. F21: 0,1 (the partial diagnosis 21, binary) 72 | 23. F22: 0,1 (the partial diagnosis 22, binary) 73 | -- dataset is divided into: 74 | -- training data ("SPECT.train" 80 instances) 75 | -- testing data ("SPECT.test" 187 instances) 76 | 8. Missing Attribute Values: None 77 | 9. Class Distribution: 78 | -- entire data 79 | Class # examples 80 | 0 55 81 | 1 212 82 | -- training dataset 83 | Class # examples 84 | 0 40 85 | 1 40 86 | -- testing dataset 87 | Class # examples 88 | 0 15 89 | 1 172 90 | -------------------------------------------------------------------------------- /data/SPECT.train: -------------------------------------------------------------------------------- 1 | 1,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0 2 | 1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1 3 | 1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0 4 | 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1 5 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0 6 | 1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1 7 | 1,1,0,1,1,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,1,1 8 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1 9 | 1,0,0,1,0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,1,1 10 | 1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 11 | 1,1,1,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,1 12 | 1,1,1,0,0,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0 13 | 1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1 14 | 1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1 15 | 1,1,0,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,0,1,1 16 | 1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1 17 | 1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0 18 | 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 19 | 1,1,0,1,0,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0 20 | 1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0 21 | 1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1 22 | 1,1,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0 23 | 1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0 24 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0 25 | 1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 26 | 1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0 27 | 1,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0 28 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 29 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 30 | 1,1,0,1,1,1,0,0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,1 31 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 32 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 33 | 1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,0,1,0,0,1 34 | 1,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,1,1,1,0,0,1,1 35 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,1,0 36 | 1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1 37 | 1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,1,1 38 | 1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 39 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0 40 | 1,1,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0 41 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 42 | 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 43 | 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 44 | 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 45 | 0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0 46 | 0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1 47 | 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0 48 | 0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 49 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 50 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 51 | 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1 52 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 53 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 54 | 0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 55 | 0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1 56 | 0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 57 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0 58 | 0,1,1,1,0,1,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0 59 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 60 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 61 | 0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 62 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 63 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 64 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 65 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 66 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 67 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 68 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 69 | 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 70 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 71 | 0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 72 | 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 73 | 0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0 74 | 0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,1,0 75 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 76 | 0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 77 | 0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0 78 | 0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0 79 | 0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1 80 | 0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -------------------------------------------------------------------------------- /data/SPECTF.names: -------------------------------------------------------------------------------- 1 | 1. Title of Database: SPECTF heart data 2 | 3 | 2. Sources: 4 | -- Original owners: Krzysztof J. Cios, Lukasz A. Kurgan 5 | University of Colorado at Denver, Denver, CO 80217, U.S.A. 6 | Krys.Cios@cudenver.edu 7 | Lucy S. Goodenday 8 | Medical College of Ohio, OH, U.S.A. 9 | -- Donors: Lukasz A.Kurgan, Krzysztof J. Cios 10 | -- Date: 10/01/01 11 | 12 | 3. Past Usage: 13 | 1. Kurgan, L.A., Cios, K.J., Tadeusiewicz, R., Ogiela, M. & Goodenday, L.S. 14 | "Knowledge Discovery Approach to Automated Cardiac SPECT Diagnosis" 15 | Artificial Intelligence in Medicine, vol. 23:2, pp 149-169, Oct 2001 16 | 17 | Results: The CLIP3 machine learning algorithm achieved 77.0% accuracy. 18 | CLIP3 references: 19 | Cios, K.J., Wedding, D.K. & Liu, N. 20 | CLIP3: cover learning using integer programming. 21 | Kybernetes, 26:4-5, pp 513-536, 1997 22 | 23 | Cios K. J. & Kurgan L. 24 | Hybrid Inductive Machine Learning: An Overview of CLIP Algorithms, 25 | In: Jain L.C., and Kacprzyk J. (Eds.) 26 | New Learning Paradigms in Soft Computing, 27 | Physica-Verlag (Springer), 2001 28 | 29 | 30 | SPECTF is a good data set for testing ML algorithms; it has 267 instances that are descibed by 45 attributes. 31 | Predicted attribute: OVERALL_DIAGNOSIS (binary) 32 | NOTE: See the SPECT heart data for binary data for the same classification task. 33 | 34 | 4. Relevant Information: 35 | The dataset describes diagnosing of cardiac Single Proton Emission Computed Tomography (SPECT) images. 36 | Each of the patients is classified into two categories: normal and abnormal. 37 | The database of 267 SPECT image sets (patients) was processed to extract features that summarize the original SPECT images. 38 | As a result, 44 continuous feature pattern was created for each patient. 39 | The CLIP3 algorithm was used to generate classification rules from these patterns. 40 | The CLIP3 algorithm generated rules that were 77.0% accurate (as compared with cardilogists' diagnoses). 41 | 42 | 5. Number of Instances: 267 43 | 6. Number of Attributes: 45 (44 continuous + 1 binary class) 44 | 7. Attribute Information: 45 | 1. OVERALL_DIAGNOSIS: 0,1 (class attribute, binary) 46 | 2. F1R: continuous (count in ROI (region of interest) 1 in rest) 47 | 3. F1S: continuous (count in ROI 1 in stress) 48 | 4. F2R: continuous (count in ROI 2 in rest) 49 | 5. F2S: continuous (count in ROI 2 in stress) 50 | 6. F3R: continuous (count in ROI 3 in rest) 51 | 7. F3S: continuous (count in ROI 3 in stress) 52 | 8. F4R: continuous (count in ROI 4 in rest) 53 | 9. F4S: continuous (count in ROI 4 in stress) 54 | 10. F5R: continuous (count in ROI 5 in rest) 55 | 11. F5S: continuous (count in ROI 5 in stress) 56 | 12. F6R: continuous (count in ROI 6 in rest) 57 | 13. F6S: continuous (count in ROI 6 in stress) 58 | 14. F7R: continuous (count in ROI 7 in rest) 59 | 15. F7S: continuous (count in ROI 7 in stress) 60 | 16. F8R: continuous (count in ROI 8 in rest) 61 | 17. F8S: continuous (count in ROI 8 in stress) 62 | 18. F9R: continuous (count in ROI 9 in rest) 63 | 19. F9S: continuous (count in ROI 9 in stress) 64 | 20. F10R: continuous (count in ROI 10 in rest) 65 | 21. F10S: continuous (count in ROI 10 in stress) 66 | 22. F11R: continuous (count in ROI 11 in rest) 67 | 23. F11S: continuous (count in ROI 11 in stress) 68 | 24. F12R: continuous (count in ROI 12 in rest) 69 | 25. F12S: continuous (count in ROI 12 in stress) 70 | 26. F13R: continuous (count in ROI 13 in rest) 71 | 27. F13S: continuous (count in ROI 13 in stress) 72 | 28. F14R: continuous (count in ROI 14 in rest) 73 | 29. F14S: continuous (count in ROI 14 in stress) 74 | 30. F15R: continuous (count in ROI 15 in rest) 75 | 31. F15S: continuous (count in ROI 15 in stress) 76 | 32. F16R: continuous (count in ROI 16 in rest) 77 | 33. F16S: continuous (count in ROI 16 in stress) 78 | 34. F17R: continuous (count in ROI 17 in rest) 79 | 35. F17S: continuous (count in ROI 17 in stress) 80 | 36. F18R: continuous (count in ROI 18 in rest) 81 | 37. F18S: continuous (count in ROI 18 in stress) 82 | 38. F19R: continuous (count in ROI 19 in rest) 83 | 39. F19S: continuous (count in ROI 19 in stress) 84 | 40. F20R: continuous (count in ROI 20 in rest) 85 | 41. F20S: continuous (count in ROI 20 in stress) 86 | 42. F21R: continuous (count in ROI 21 in rest) 87 | 43. F21S: continuous (count in ROI 21 in stress) 88 | 44. F22R: continuous (count in ROI 22 in rest) 89 | 45. F22S: continuous (count in ROI 22 in stress) 90 | -- all continuous attributes have integer values from the 0 to 100 91 | -- dataset is divided into: 92 | -- training data ("SPECTF.train" 80 instances) 93 | -- testing data ("SPECTF.test" 187 instances) 94 | 8. Missing Attribute Values: None 95 | 9. Class Distribution: 96 | -- entire data 97 | Class # examples 98 | 0 55 99 | 1 212 100 | -- training dataset 101 | Class # examples 102 | 0 40 103 | 1 40 104 | -- testing dataset 105 | Class # examples 106 | 0 15 107 | 1 172 108 | 109 | NOTE: See the SPECT heart data for binary data for the same classification task. 110 | -------------------------------------------------------------------------------- /test_real_data.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Mon Jul 2 09:19:57 2012 4 | 5 | @author: Fela Winkelmolen 6 | 7 | Tests using the data from http://archive.ics.uci.edu/ml/datasets/SPECTF+Heart 8 | """ 9 | 10 | import scipy as sp 11 | import scipy.linalg 12 | from matrixgeneration import * 13 | import matrixdecomposition as md 14 | 15 | 16 | ############################################################# 17 | class Experiment: 18 | def __init__(self, **opt): 19 | # default values 20 | self.filename = opt.pop('filename', None) or 'SMALL' 21 | self.seed = opt.pop('seed', None) or 0 22 | self.holes = opt.pop('holes', None) 23 | # do not overwrite if holes is set to .0! 24 | if self.holes == None: 25 | self.holes = 0.2 # holes percentage 26 | self.completion = opt.pop('completion', None) or 'matrix' 27 | 28 | self.options = opt 29 | self.generate_matrix() 30 | 31 | def run(self): 32 | self.generate_mask() 33 | TH, GA = self.TH, self.GA 34 | Y, Mask = self.Y, self.mask 35 | A = self.matrix_completion() 36 | 37 | n = (1-Mask).sum() 38 | diff = (TH-A)*(1-Mask) 39 | sqerr = (diff**2).sum() 40 | if n != 0: 41 | sqerr /= n 42 | return sqrt(sqerr) 43 | 44 | def matrix_completion(self): 45 | if self.completion == 'matrix': 46 | res, _ = md.matrix_decomposition(self.Y, self.mask, **self.options) 47 | elif self.completion == 'mean': 48 | means = self.Y.mean(0) # means along the column axis 49 | # calculate the true means along the column axis 50 | # using only the values in the mask 51 | rows, cols = self.Y.shape 52 | means = sp.zeros(cols) 53 | # calculate the true means along the column axis 54 | # using only the values in the mask 55 | for c in range(cols): 56 | sum = 0.0 57 | n = 0 58 | for r in range(rows): 59 | if self.mask[r][c]: 60 | sum += self.Y[r][c] 61 | n += 1 62 | if n == 0: 63 | means[c] = 0 64 | else: 65 | means[c] = sum/n 66 | 67 | res = double(self.Y) 68 | for r in range(rows): 69 | for c in range(cols): 70 | if not self.mask[r][c]: 71 | res[r][c] = means[c] 72 | return res 73 | 74 | 75 | # called once after initialization 76 | def generate_matrix(self): 77 | filename = 'data/' + self.filename + '.train' 78 | self.TH, _ = self.load_data(filename) 79 | self.GA = self.TH * 0 80 | self.Y = self.TH + self.GA 81 | 82 | def generate_mask(self, holes=None): 83 | if holes != None: 84 | self.holes = holes 85 | rows, cols = self.GA.shape 86 | if self.seed != None: 87 | seed(self.seed) 88 | self.mask = rand(rows,cols) > self.holes 89 | 90 | @staticmethod 91 | def load_data(filename): 92 | M = [[int(i) for i in line.split(',')] for line in open(filename)] 93 | M = sp.array(M) 94 | y = M[:, 0] 95 | X = M[:, range(1, M.shape[1])] 96 | return (X, y) 97 | 98 | def holes_experiment(**opt): 99 | n = opt.pop('steps', None) or 5 100 | runs = opt.pop('runs', None) or 1 101 | label = opt.pop('label', None) 102 | #opt['mu_d'] = 0 103 | y = sp.array(range(n+1)) / float(n) 104 | x = [] 105 | for holes in y: 106 | print '.', 107 | acc = [] 108 | e = Experiment(**opt) 109 | for i in range(runs): 110 | e.generate_mask(holes) 111 | acc.append(e.run()) 112 | x.append(sp.array(acc).mean()) 113 | plot(y, x, label=label) 114 | legend(loc=0) 115 | 116 | def param_experiment(param_name, params, **opt): 117 | label = opt.pop('label', None) or param_name 118 | scale = opt.pop('scale', None) or 'linear' 119 | x = [] 120 | for p in params: 121 | print '.', 122 | opt[param_name] = p 123 | e = Experiment(**opt) 124 | x.append(e.run()) 125 | xscale(scale) 126 | plot(params, x, label=label) 127 | legend(loc=0) 128 | 129 | 130 | 131 | # exponential range 132 | def exp_range(minval=0.001, maxval=100, steps=10): 133 | min_exp = sp.log(minval) 134 | max_exp = sp.log(maxval) 135 | return sp.exp(sp.linspace(min_exp, max_exp, num=steps)) 136 | 137 | # test for different completion percentage 138 | # more runs are made to get an estimate of the variance 139 | # and completion using the mean of the column is used for comparison 140 | def experiment1(): 141 | for s in range(5): 142 | holes_experiment(steps=10, alpha=100000, completion='matrix', seed=s) 143 | 144 | #holes_experiment(steps=10, alpha=100000, mu_d=1, completion='matrix', label='mu_d=1') 145 | 146 | holes_experiment(steps=20, runs=5, alpha=100000, completion='mean', seed=0, label='mean') 147 | 148 | # test different values of mu_d 149 | def experiment2(): 150 | params = exp_range(0.00001, 100, 30) 151 | param_experiment('mu_d', params, alpha=100000, label='0.2') 152 | figure() 153 | params = exp_range(0.00001, 100, 30) 154 | param_experiment('mu_d', params, alpha=100000, holes=0.6, label='0.6') 155 | 156 | # test different values of lambda_d 157 | def experiment3(): 158 | params = exp_range(0.005, 0.2,) 159 | param_experiment('lambda_d', params, alpha=100000, label='0.2') 160 | figure() 161 | param_experiment('lambda_d', params, alpha=100000, holes=0.6, label='0.2') 162 | -------------------------------------------------------------------------------- /data/SMALL.train: -------------------------------------------------------------------------------- 1 | 1, 67, 68, 73, 78, 65, 63, 67, 60, 63, 62, 71, 68, 76, 73, 59, 61, 62, 56, 74, 73, 78, 76, 79, 79, 70, 70, 68, 67, 65, 67, 76, 75, 63, 61, 61, 56, 76, 75, 74, 77, 76, 74, 59, 68 2 | 1, 75, 74, 71, 71, 62, 58, 70, 64, 71, 68, 76, 68, 71, 71, 58, 58, 70, 69, 70, 72, 75, 73, 74, 72, 66, 60, 63, 66, 70, 64, 75, 70, 64, 62, 66, 62, 68, 69, 69, 66, 64, 58, 57, 52 3 | 1, 83, 64, 66, 67, 67, 74, 74, 72, 64, 68, 75, 73, 78, 73, 72, 57, 71, 67, 73, 65, 78, 73, 76, 69, 63, 57, 63, 53, 67, 60, 77, 74, 69, 64, 67, 64, 69, 63, 68, 54, 65, 64, 43, 42 4 | 1, 72, 66, 65, 65, 64, 61, 71, 78, 73, 69, 68, 65, 62, 65, 66, 66, 72, 74, 67, 61, 77, 71, 68, 65, 64, 60, 73, 69, 70, 69, 74, 72, 61, 63, 69, 68, 68, 63, 71, 72, 65, 63, 58, 60 5 | 1, 62, 60, 69, 61, 63, 63, 70, 68, 70, 65, 77, 56, 71, 65, 69, 68, 74, 78, 77, 70, 80, 73, 79, 75, 76, 67, 74, 69, 66, 71, 70, 61, 54, 54, 66, 66, 58, 56, 72, 73, 71, 64, 49, 42 6 | 1, 68, 63, 67, 67, 65, 72, 74, 72, 70, 71, 79, 71, 72, 67, 68, 69, 75, 79, 67, 65, 78, 69, 72, 67, 64, 59, 67, 65, 73, 70, 80, 69, 63, 61, 70, 70, 70, 67, 77, 71, 77, 72, 68, 59 7 | 1, 80, 76, 77, 76, 67, 68, 71, 76, 69, 66, 76, 78, 61, 71, 58, 61, 61, 68, 78, 72, 72, 75, 61, 66, 58, 62, 69, 66, 55, 40, 70, 71, 67, 58, 57, 58, 62, 65, 59, 45, 53, 58, 54, 55 8 | 1, 68, 63, 62, 58, 60, 57, 69, 78, 59, 53, 61, 58, 48, 50, 52, 50, 72, 70, 59, 59, 71, 77, 50, 49, 53, 44, 76, 74, 64, 66, 68, 63, 52, 52, 66, 67, 74, 70, 77, 74, 66, 60, 59, 56 9 | 1, 77, 61, 71, 69, 70, 66, 57, 55, 67, 67, 79, 72, 79, 71, 64, 54, 62, 63, 39, 47, 75, 76, 67, 71, 63, 44, 22, 25, 21, 18, 72, 79, 57, 58, 48, 40, 41, 39, 19, 16, 68, 72, 56, 65 10 | 1, 69, 68, 73, 74, 62, 67, 74, 73, 67, 65, 70, 75, 64, 68, 58, 57, 66, 70, 57, 63, 68, 71, 68, 69, 40, 38, 55, 59, 67, 67, 76, 78, 65, 67, 61, 65, 76, 79, 74, 73, 64, 56, 53, 45 11 | 1, 65, 69, 70, 71, 56, 63, 63, 70, 44, 51, 78, 74, 48, 49, 49, 52, 58, 60, 49, 51, 80, 65, 51, 48, 58, 43, 64, 62, 71, 70, 78, 73, 71, 57, 71, 73, 68, 64, 62, 59, 59, 64, 53, 55 12 | 1, 65, 63, 73, 75, 67, 61, 76, 65, 62, 62, 79, 75, 74, 70, 57, 52, 62, 62, 62, 63, 78, 72, 57, 50, 39, 36, 51, 51, 41, 43, 64, 70, 56, 54, 50, 46, 66, 67, 49, 43, 43, 43, 41, 43 13 | 1, 71, 73, 65, 80, 62, 67, 65, 77, 66, 68, 72, 80, 71, 74, 58, 62, 67, 73, 73, 73, 83, 78, 66, 77, 60, 59, 61, 61, 53, 46, 73, 75, 67, 65, 62, 65, 62, 66, 62, 60, 61, 68, 43, 56 14 | 1, 64, 75, 52, 46, 59, 54, 79, 78, 61, 68, 61, 71, 36, 28, 59, 58, 67, 74, 51, 55, 57, 78, 31, 32, 40, 43, 66, 78, 49, 49, 47, 39, 31, 27, 59, 75, 51, 73, 60, 56, 41, 21, 33, 22 15 | 1, 62, 54, 65, 65, 24, 31, 79, 66, 53, 54, 76, 72, 47, 50, 30, 25, 73, 74, 62, 55, 76, 78, 56, 47, 27, 34, 56, 78, 68, 68, 66, 68, 60, 60, 66, 68, 55, 51, 68, 71, 31, 29, 27, 18 16 | 1, 57, 43, 62, 50, 43, 57, 61, 44, 44, 24, 53, 36, 60, 69, 58, 61, 30, 32, 61, 63, 75, 72, 62, 71, 42, 44, 67, 74, 29, 19, 76, 77, 65, 66, 41, 41, 57, 46, 27, 12, 41, 52, 42, 49 17 | 1, 67, 65, 61, 61, 60, 62, 75, 74, 68, 68, 72, 75, 70, 75, 63, 68, 72, 75, 64, 70, 76, 75, 70, 70, 67, 63, 66, 67, 69, 66, 77, 77, 64, 66, 68, 69, 70, 69, 75, 66, 71, 70, 57, 63 18 | 1, 62, 54, 73, 68, 72, 71, 76, 76, 62, 52, 66, 58, 73, 65, 70, 70, 73, 73, 59, 52, 65, 59, 70, 55, 72, 65, 68, 70, 69, 66, 69, 66, 61, 51, 69, 72, 60, 54, 74, 68, 73, 67, 56, 52 19 | 1, 67, 59, 54, 48, 63, 67, 77, 78, 71, 61, 57, 57, 59, 50, 72, 72, 77, 77, 76, 73, 85, 67, 58, 50, 39, 33, 54, 50, 57, 50, 45, 41, 38, 43, 76, 77, 80, 69, 61, 48, 63, 61, 37, 36 20 | 1, 65, 56, 67, 58, 76, 79, 70, 71, 59, 50, 76, 61, 72, 64, 69, 73, 71, 68, 67, 50, 75, 65, 71, 62, 63, 70, 66, 55, 59, 52, 74, 60, 59, 58, 68, 63, 54, 38, 57, 52, 71, 74, 59, 65 21 | 1, 71, 56, 75, 74, 61, 69, 73, 73, 65, 63, 71, 69, 70, 74, 61, 64, 70, 66, 70, 69, 76, 81, 62, 60, 39, 39, 72, 72, 58, 64, 71, 71, 56, 55, 62, 61, 70, 75, 57, 63, 41, 61, 34, 40 22 | 1, 73, 59, 76, 61, 67, 52, 66, 46, 70, 59, 76, 72, 71, 75, 63, 33, 68, 49, 68, 49, 73, 66, 70, 58, 30, 14, 54, 41, 54, 41, 76, 66, 77, 57, 62, 26, 74, 57, 58, 47, 40, 9, 28, 19 23 | 1, 77, 69, 77, 79, 60, 59, 65, 68, 57, 54, 76, 76, 60, 66, 39, 36, 63, 65, 54, 60, 75, 71, 59, 63, 43, 38, 64, 49, 53, 42, 67, 73, 62, 60, 55, 52, 59, 58, 55, 43, 41, 37, 39, 26 24 | 1, 66, 65, 72, 74, 59, 61, 67, 65, 59, 58, 70, 72, 71, 67, 58, 52, 64, 63, 73, 71, 78, 59, 75, 72, 54, 45, 66, 64, 61, 60, 73, 74, 58, 57, 60, 59, 74, 71, 75, 74, 70, 66, 63, 61 25 | 1, 69, 80, 67, 67, 62, 61, 65, 67, 62, 71, 77, 75, 72, 77, 56, 54, 65, 60, 57, 63, 80, 69, 71, 72, 51, 39, 57, 50, 64, 63, 75, 70, 59, 56, 60, 55, 65, 68, 66, 67, 67, 68, 54, 54 26 | 1, 74, 67, 69, 75, 59, 57, 70, 68, 70, 62, 79, 76, 74, 70, 64, 56, 71, 73, 72, 64, 81, 72, 75, 66, 60, 57, 68, 62, 59, 38, 74, 66, 71, 60, 67, 59, 66, 58, 70, 50, 45, 31, 36, 35 27 | 1, 66, 70, 78, 75, 69, 64, 70, 66, 66, 69, 75, 76, 66, 65, 54, 52, 61, 57, 68, 65, 79, 69, 67, 63, 51, 50, 54, 43, 41, 49, 71, 74, 67, 67, 54, 52, 76, 72, 65, 69, 69, 64, 58, 56 28 | 1, 79, 58, 73, 78, 67, 65, 74, 71, 64, 54, 76, 68, 72, 69, 70, 64, 69, 64, 63, 53, 74, 64, 73, 67, 60, 57, 58, 51, 65, 68, 76, 75, 66, 63, 66, 62, 66, 58, 71, 67, 71, 68, 62, 60 29 | 1, 61, 66, 64, 65, 62, 66, 74, 67, 60, 62, 65, 64, 69, 70, 70, 67, 75, 73, 69, 69, 76, 78, 77, 80, 76, 76, 69, 73, 65, 73, 69, 63, 53, 58, 68, 65, 62, 60, 73, 73, 67, 63, 58, 61 30 | 1, 63, 69, 70, 72, 66, 70, 66, 72, 71, 67, 74, 77, 70, 71, 67, 69, 69, 68, 75, 73, 73, 77, 67, 66, 62, 59, 62, 58, 61, 65, 74, 75, 63, 67, 65, 67, 71, 71, 68, 70, 74, 72, 56, 60 31 | 1, 73, 67, 74, 73, 79, 75, 76, 77, 61, 60, 70, 73, 76, 77, 71, 71, 65, 65, 69, 64, 75, 76, 78, 80, 72, 69, 61, 59, 71, 68, 76, 79, 68, 67, 71, 67, 63, 59, 68, 66, 74, 71, 59, 57 32 | 1, 66, 68, 67, 72, 65, 71, 71, 71, 60, 67, 69, 78, 75, 72, 68, 66, 69, 68, 77, 77, 81, 80, 68, 69, 70, 65, 66, 65, 62, 66, 74, 76, 59, 62, 64, 63, 67, 75, 70, 75, 74, 76, 62, 65 33 | 1, 55, 54, 71, 74, 21, 25, 60, 27, 69, 64, 74, 79, 64, 70, 58, 38, 72, 64, 63, 62, 77, 75, 61, 58, 42, 37, 64, 54, 20, 15, 66, 73, 66, 67, 43, 36, 77, 59, 24, 35, 18, 27, 29, 22 34 | 1, 70, 68, 68, 70, 56, 54, 66, 67, 68, 70, 75, 73, 59, 59, 60, 62, 75, 71, 50, 45, 55, 55, 61, 61, 46, 49, 55, 52, 66, 72, 66, 65, 62, 65, 68, 70, 69, 69, 67, 70, 56, 57, 56, 52 35 | 1, 71, 71, 77, 82, 64, 63, 73, 71, 66, 64, 72, 79, 66, 59, 57, 57, 70, 63, 71, 68, 78, 79, 67, 65, 63, 63, 70, 67, 68, 70, 75, 77, 60, 62, 70, 67, 77, 74, 71, 75, 72, 67, 62, 60 36 | 1, 57, 44, 74, 68, 82, 76, 78, 62, 66, 67, 74, 72, 71, 70, 67, 69, 68, 68, 69, 74, 75, 71, 73, 71, 69, 65, 58, 63, 54, 63, 68, 74, 73, 76, 66, 65, 63, 66, 71, 71, 71, 68, 66, 60 37 | 1, 72, 71, 70, 72, 63, 69, 71, 73, 71, 71, 79, 75, 71, 71, 65, 74, 68, 74, 71, 71, 70, 78, 62, 67, 62, 60, 59, 59, 69, 66, 75, 75, 57, 57, 66, 69, 68, 67, 69, 64, 58, 62, 52, 54 38 | 1, 60, 58, 74, 68, 44, 48, 85, 60, 56, 48, 71, 70, 46, 43, 57, 43, 75, 60, 62, 44, 69, 52, 57, 42, 20, 23, 58, 60, 38, 41, 67, 70, 64, 68, 59, 47, 69, 55, 65, 55, 19, 47, 18, 17 39 | 1, 33, 21, 38, 54, 60, 52, 41, 50, 26, 29, 58, 58, 76, 71, 59, 68, 17, 13, 75, 73, 73, 78, 65, 67, 62, 47, 59, 57, 23, 26, 73, 74, 52, 58, 40, 38, 49, 45, 11, 13, 62, 64, 46, 40 40 | 1, 58, 70, 62, 73, 34, 41, 55, 54, 65, 77, 73, 78, 65, 65, 33, 48, 57, 64, 69, 67, 68, 64, 61, 58, 60, 59, 73, 70, 45, 40, 71, 74, 52, 56, 59, 62, 67, 75, 36, 39, 22, 19, 29, 24 41 | 1, 58, 40, 57, 43, 74, 57, 78, 53, 68, 58, 65, 54, 75, 50, 59, 73, 80, 77, 60, 59, 61, 61, 55, 56, 48, 63, 75, 77, 13, 7, 47, 52, 54, 58, 51, 31, 53, 18, 17, 6, 15, 69, 30, 40 42 | 1, 77, 77, 70, 71, 68, 66, 75, 75, 73, 72, 71, 77, 66, 65, 60, 58, 70, 70, 71, 74, 80, 79, 64, 64, 60, 55, 70, 68, 76, 74, 75, 75, 65, 65, 73, 73, 71, 70, 73, 73, 63, 62, 52, 52 43 | 1, 65, 67, 67, 61, 55, 57, 66, 74, 64, 69, 61, 62, 71, 71, 53, 53, 64, 71, 65, 66, 71, 73, 65, 70, 47, 39, 80, 75, 67, 64, 72, 66, 53, 55, 63, 64, 60, 61, 74, 63, 59, 58, 50, 49 44 | 1, 77, 59, 76, 78, 40, 34, 75, 63, 65, 26, 70, 28, 50, 46, 25, 66, 46, 52, 63, 63, 68, 56, 46, 47, 12, 6, 28, 23, 56, 48, 68, 55, 63, 54, 40, 20, 65, 68, 56, 57, 5, 10, 13, 10 45 | 1, 64, 59, 76, 72, 55, 52, 63, 66, 68, 63, 75, 72, 70, 64, 60, 57, 75, 68, 62, 59, 69, 73, 74, 67, 49, 42, 66, 51, 58, 48, 75, 73, 76, 75, 64, 62, 73, 70, 72, 51, 71, 42, 61, 39 46 | 1, 57, 63, 67, 82, 69, 67, 63, 70, 74, 64, 71, 71, 72, 73, 59, 54, 65, 63, 79, 62, 77, 69, 70, 63, 54, 50, 61, 53, 59, 60, 72, 74, 72, 59, 64, 54, 70, 65, 73, 70, 64, 58, 60, 57 47 | -------------------------------------------------------------------------------- /data/SPECT.test: -------------------------------------------------------------------------------- 1 | 1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,0 2 | 1,1,0,0,1,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0 3 | 1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1 4 | 1,0,1,1,1,0,0,1,0,1,0,0,1,1,1,0,1,0,0,0,0,1,0 5 | 1,0,0,1,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,1 6 | 1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,0,1,1 7 | 1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,0,1 8 | 1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0 9 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0 10 | 1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,0 11 | 1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,1,0,0,0 12 | 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0 13 | 1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1 14 | 1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0 15 | 1,1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0 16 | 1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0 17 | 1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,1 18 | 1,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,1 19 | 1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 20 | 1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,1,0,0,0,1,1,0 21 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0 22 | 1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1 23 | 1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0 24 | 1,1,1,0,1,1,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0 25 | 1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 26 | 1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0 27 | 1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0 28 | 1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0 29 | 1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 30 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 31 | 1,1,1,0,0,1,0,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,0 32 | 1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0 33 | 1,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1 34 | 1,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 35 | 1,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 36 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 37 | 1,0,1,1,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0 38 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0 39 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1,1 40 | 1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1 41 | 1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1 42 | 1,0,0,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0 43 | 1,0,0,1,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,1,1,1 44 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 45 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 46 | 1,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1 47 | 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 48 | 1,0,0,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1 49 | 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 50 | 1,1,0,1,1,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0 51 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1 52 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1 53 | 1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,1 54 | 1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1 55 | 1,1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1 56 | 1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,1,0,1,1 57 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 58 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 59 | 1,0,1,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0 60 | 1,0,1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,1 61 | 1,1,1,1,1,1,1,0,0,1,0,1,0,1,0,1,1,0,0,1,1,0,1 62 | 1,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0 63 | 1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1 64 | 1,1,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1 65 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 66 | 1,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0 67 | 1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1 68 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,1,0,0 69 | 1,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,1,0,0,1,1,0,0 70 | 1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,1,1,0,1,1 71 | 1,1,1,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,0,1,1,1 72 | 1,0,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1 73 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1 74 | 1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1 75 | 1,0,0,0,1,0,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0 76 | 1,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,1,0,1,1 77 | 1,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,1,1,1,0,1,1,1 78 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,1,0 79 | 1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1,0,1,1 80 | 1,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1 81 | 1,1,0,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1 82 | 1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1 83 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 84 | 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 85 | 1,1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,0 86 | 1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1 87 | 1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,0,0 88 | 1,0,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,1,0,1,1,0,1 89 | 1,1,0,1,0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1 90 | 1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,1,0 91 | 1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,0,1,1,0,0 92 | 1,1,0,1,1,0,0,0,1,1,0,0,0,1,1,1,1,0,0,1,1,1,1 93 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0 94 | 1,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0 95 | 1,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,1 96 | 1,0,0,0,1,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0 97 | 1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1 98 | 1,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1 99 | 1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,1,1 100 | 1,1,0,1,0,1,1,1,1,0,1,1,1,1,0,0,1,0,1,0,1,1,1 101 | 1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0 102 | 1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1 103 | 1,1,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,1,0 104 | 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0 105 | 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 106 | 1,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,1 107 | 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0 108 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0 109 | 1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0 110 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 111 | 1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 112 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 113 | 1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0 114 | 1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0 115 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 116 | 1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0 117 | 1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 118 | 1,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0 119 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0 120 | 1,1,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,1,1 121 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 122 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 123 | 1,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0 124 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1 125 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 126 | 1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 127 | 1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 128 | 1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,0 129 | 1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0 130 | 1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,0,0 131 | 1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 132 | 1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1 133 | 1,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,0,0,1,0 134 | 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 135 | 1,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0 136 | 1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1 137 | 1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0 138 | 1,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,0 139 | 1,0,0,1,1,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,1,1 140 | 1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0 141 | 1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1 142 | 1,0,1,1,0,0,1,0,1,0,0,1,1,1,0,0,1,0,0,1,1,0,1 143 | 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,1 144 | 1,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,1,1,0,1 145 | 1,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,0,1 146 | 1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1 147 | 1,1,1,1,0,0,1,1,0,1,0,0,1,0,1,0,1,0,0,0,1,1,1 148 | 1,0,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1 149 | 1,1,1,1,1,1,1,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,1 150 | 1,1,0,0,0,1,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,0 151 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1 152 | 1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 153 | 1,1,1,1,0,1,0,1,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0 154 | 1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,0,1,1,1,1,0,0 155 | 1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,1,1 156 | 1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1 157 | 1,0,0,0,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0 158 | 1,1,1,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0 159 | 1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1 160 | 1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,1 161 | 1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0 162 | 1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,0,0,0,1,1 163 | 1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0 164 | 1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1 165 | 1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0 166 | 1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0,0,1,0 167 | 1,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,1,0,0,1,1 168 | 1,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1 169 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 170 | 1,1,1,1,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0 171 | 1,1,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1,0,1,1,1,0,0 172 | 1,1,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,1,0 173 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 174 | 0,0,0,1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0 175 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 176 | 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1 177 | 0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 178 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 179 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 180 | 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0 181 | 0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0 182 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 183 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 184 | 0,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0 185 | 0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0 186 | 0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,0,1,0,0,0,0,0,0 187 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -------------------------------------------------------------------------------- /data/SPECTF.train: -------------------------------------------------------------------------------- 1 | 1,59,52,70,67,73,66,72,61,58,52,72,71,70,77,66,65,67,55,61,57,68,66,72,74,63,64,56,54,67,54,76,74,65,67,66,56,62,56,72,62,74,74,64,67 2 | 1,72,62,69,67,78,82,74,65,69,63,70,70,72,74,70,71,72,75,66,65,73,78,74,79,74,69,69,70,71,69,72,70,62,65,65,71,63,60,69,73,67,71,56,58 3 | 1,71,62,70,64,67,64,79,65,70,69,72,71,68,65,61,61,73,71,75,74,80,74,54,47,53,37,77,68,72,59,72,68,60,60,73,70,66,65,64,55,61,41,51,46 4 | 1,69,71,70,78,61,63,67,65,59,59,66,69,71,75,65,58,60,55,62,59,67,66,74,74,64,60,57,54,70,73,69,76,62,64,61,61,66,65,72,73,68,68,59,63 5 | 1,70,66,61,66,61,58,69,69,72,68,62,71,71,71,63,59,74,75,70,69,83,77,73,70,41,37,39,40,58,46,75,73,65,66,67,69,70,66,70,64,60,55,49,41 6 | 1,57,69,68,75,69,74,73,71,57,61,72,74,73,69,61,58,60,55,71,62,79,70,77,71,65,63,69,55,61,68,75,74,63,64,63,58,69,67,79,77,72,70,61,65 7 | 1,69,66,62,75,67,71,72,76,69,70,66,69,71,80,66,64,71,77,65,61,72,67,71,69,65,57,69,65,68,65,76,73,63,64,69,70,72,72,69,68,70,73,63,59 8 | 1,61,60,60,62,64,72,68,67,74,68,76,70,74,71,76,74,74,70,75,66,69,62,65,60,66,65,68,59,64,59,72,65,55,56,66,66,66,60,60,58,60,67,49,52 9 | 1,65,62,67,68,65,67,71,71,64,56,73,72,68,69,56,57,67,62,74,66,80,76,80,78,53,47,48,36,68,65,74,73,60,60,67,63,74,63,77,79,68,70,59,56 10 | 1,74,73,72,79,66,61,76,66,65,64,78,74,62,57,48,36,62,50,67,63,79,70,61,57,52,36,69,49,55,65,74,73,58,60,64,62,73,69,62,67,60,56,53,46 11 | 1,70,69,60,62,58,60,71,77,69,69,73,68,68,70,69,65,76,75,63,64,67,74,56,60,54,44,68,69,68,68,74,73,61,59,68,67,64,68,64,76,64,61,54,49 12 | 1,67,66,65,77,66,70,72,72,72,67,76,72,73,76,74,71,74,73,69,61,78,70,76,73,70,70,62,51,70,68,79,77,75,68,72,71,69,63,65,61,73,73,64,67 13 | 1,76,69,78,73,68,67,75,70,77,70,79,73,79,75,74,71,76,68,81,79,77,78,75,76,66,76,65,67,67,57,68,75,50,62,62,59,47,49,75,65,74,70,51,48 14 | 1,70,69,67,66,68,60,76,77,70,67,71,71,79,79,70,64,77,76,63,54,68,65,72,67,59,52,56,50,67,61,74,72,67,59,68,66,73,68,74,68,77,69,65,62 15 | 1,78,73,68,74,68,69,63,74,68,67,73,73,66,71,64,67,66,68,61,66,75,71,60,62,64,66,65,67,66,62,74,75,61,61,63,66,68,65,71,62,69,67,61,59 16 | 1,67,51,73,65,69,56,72,63,64,56,68,67,70,62,70,58,68,62,65,59,77,69,68,59,64,55,65,60,70,60,72,65,58,51,66,59,71,62,74,60,76,65,62,56 17 | 1,70,54,66,66,76,46,74,58,68,52,81,58,67,58,68,32,73,59,76,51,82,57,76,54,58,30,69,41,59,59,67,73,62,55,60,55,65,56,65,44,73,36,51,28 18 | 1,63,63,69,72,67,62,65,57,68,53,68,71,73,78,64,58,61,54,70,61,72,67,72,68,57,55,61,53,66,60,76,77,73,66,66,58,75,70,77,67,78,68,64,58 19 | 1,62,56,66,57,74,75,68,59,65,59,74,66,71,65,67,69,66,66,71,72,80,74,71,63,62,72,62,66,66,61,73,68,59,59,63,62,73,73,76,67,77,71,62,58 20 | 1,80,74,82,77,74,74,73,77,64,61,73,73,73,72,62,66,66,68,63,61,69,75,70,75,59,64,63,69,66,66,70,77,62,62,60,65,67,66,74,71,66,71,59,62 21 | 1,63,58,66,55,56,58,69,74,44,48,63,60,76,67,73,73,58,66,68,63,72,74,70,72,77,75,70,71,71,67,75,73,60,59,71,70,65,62,70,69,71,70,58,61 22 | 1,70,65,65,62,68,67,77,74,62,61,66,61,69,74,64,62,71,71,74,70,77,78,69,70,67,65,67,70,49,48,73,71,65,73,73,73,75,71,73,72,73,70,65,64 23 | 1,61,63,58,62,56,60,67,75,61,57,64,71,56,59,66,62,73,76,71,75,83,84,69,71,69,69,69,71,49,43,59,64,56,61,64,72,70,73,69,70,65,68,65,62 24 | 1,70,64,52,58,75,89,70,72,26,30,46,55,54,59,40,40,39,37,35,17,59,52,66,72,23,46,8,31,17,20,49,72,61,70,31,13,40,23,31,30,57,67,41,57 25 | 1,75,71,54,51,53,50,68,69,46,55,11,12,43,48,61,60,73,77,46,45,68,59,65,73,54,60,55,66,54,41,53,52,58,63,72,65,33,23,64,54,36,46,45,52 26 | 1,77,61,62,68,62,58,72,68,77,71,76,77,72,75,62,57,77,74,61,58,72,76,69,68,56,53,57,54,69,70,73,79,65,70,66,68,67,66,71,67,60,60,53,57 27 | 1,75,72,75,79,72,68,79,77,69,66,73,77,67,73,57,58,69,69,67,65,77,68,69,65,58,54,68,60,67,66,75,78,63,66,68,64,72,69,73,61,52,44,34,37 28 | 1,78,76,71,72,65,71,75,74,70,64,65,76,65,73,59,57,65,65,73,73,81,80,68,66,59,44,62,63,62,59,71,74,59,60,64,61,77,76,62,67,44,42,44,30 29 | 1,69,68,75,74,78,72,75,72,61,57,72,71,75,72,70,68,68,62,62,66,67,67,74,78,64,68,62,62,64,63,75,77,66,67,69,65,62,63,64,59,74,75,63,67 30 | 1,72,66,75,67,61,59,64,63,61,67,75,76,66,48,61,56,69,68,68,68,68,75,69,67,68,71,70,68,48,47,74,79,63,75,62,62,64,67,56,52,69,83,59,73 31 | 1,64,64,70,75,70,71,74,71,59,60,62,68,70,66,69,72,69,69,61,63,56,60,62,66,69,71,62,63,67,65,62,58,52,51,67,66,61,56,64,65,71,73,57,63 32 | 1,72,63,68,62,72,63,79,61,57,49,76,75,55,57,43,37,54,52,57,56,78,78,57,55,35,37,57,57,41,35,67,70,75,72,53,46,63,62,53,43,38,35,32,26 33 | 1,79,78,66,63,69,62,78,70,72,71,73,78,75,65,68,62,76,71,68,68,72,71,52,48,23,26,66,59,66,66,72,74,56,58,67,63,66,69,70,74,34,33,11,12 34 | 1,66,81,75,72,69,67,74,81,67,73,76,75,69,64,58,57,74,74,56,62,74,78,55,50,37,38,65,73,61,61,73,73,61,63,67,66,60,71,46,58,35,37,24,20 35 | 1,65,66,71,72,67,75,76,83,70,74,70,76,70,68,63,71,69,76,72,73,76,80,69,68,57,59,59,56,62,68,75,73,65,61,69,73,66,70,63,65,65,67,53,42 36 | 1,71,75,76,74,71,68,67,68,69,75,75,74,59,58,71,69,70,74,74,72,71,78,69,72,69,72,63,61,59,70,72,75,61,66,70,71,59,64,64,60,72,61,55,63 37 | 1,70,66,66,68,71,69,64,61,68,67,50,53,73,71,73,63,71,73,80,81,82,82,67,71,52,47,67,64,66,67,66,75,58,62,65,65,71,67,70,71,67,64,52,53 38 | 1,73,76,68,74,56,59,73,76,54,48,75,78,47,53,25,19,60,56,56,54,80,79,47,53,19,14,58,50,67,71,63,54,49,48,66,65,62,58,57,72,31,30,15,11 39 | 1,68,76,79,78,63,73,68,78,64,71,73,77,67,71,58,57,61,63,52,64,64,74,53,72,36,44,52,54,49,56,73,81,65,80,53,60,63,70,58,64,52,57,49,50 40 | 1,68,64,65,68,63,64,77,73,75,72,80,77,70,71,61,61,73,68,63,62,76,73,69,69,48,59,62,44,66,59,75,74,64,64,63,61,70,69,74,67,51,48,45,45 41 | 0,62,67,64,70,59,58,67,74,60,66,68,68,73,71,60,63,64,74,64,65,74,77,69,73,59,58,58,67,65,69,78,76,61,62,64,67,72,74,71,71,71,69,66,61 42 | 0,62,67,68,70,65,70,73,77,69,70,69,73,71,74,71,71,76,75,66,67,73,73,70,74,63,67,58,68,66,69,78,79,69,70,71,73,72,71,73,77,72,76,64,66 43 | 0,59,68,69,67,69,59,78,73,66,65,77,73,74,66,66,55,71,66,69,68,75,73,80,79,69,65,69,66,68,65,75,71,59,61,65,64,73,71,81,75,74,65,69,66 44 | 0,75,75,70,77,67,75,75,75,67,66,74,73,68,72,64,70,76,70,67,63,74,75,72,68,69,68,75,69,71,74,75,76,63,70,71,69,66,63,70,73,66,68,58,59 45 | 0,77,79,79,77,74,76,76,81,65,68,66,66,74,73,72,68,67,73,63,62,72,67,76,69,68,64,64,61,69,68,73,75,70,66,64,70,70,70,73,76,79,73,65,63 46 | 0,68,64,74,80,76,72,78,75,67,64,75,80,78,77,66,64,67,67,70,60,78,82,70,68,63,60,64,60,54,56,70,73,59,65,55,58,50,51,73,70,69,65,42,41 47 | 0,76,73,74,76,60,69,76,76,68,69,78,79,57,62,69,69,67,66,73,69,80,81,58,68,75,69,73,70,58,65,79,76,74,71,66,64,65,62,78,68,75,68,62,60 48 | 0,61,76,71,68,77,69,77,69,64,75,71,81,75,72,71,69,70,73,61,71,69,79,64,65,62,66,61,65,71,68,67,71,59,64,66,65,60,68,74,71,69,68,63,59 49 | 0,67,65,77,74,67,66,67,70,65,64,75,78,66,74,62,60,65,65,73,72,75,76,74,81,66,65,65,63,63,67,76,80,63,64,63,64,73,72,76,75,72,74,65,64 50 | 0,71,61,74,74,76,74,69,56,68,78,71,78,58,64,70,72,71,68,72,71,79,78,67,68,63,60,67,67,76,74,67,79,67,71,71,64,70,74,83,76,74,73,54,54 51 | 0,64,70,71,69,72,70,75,78,61,66,69,68,68,70,71,70,75,76,73,72,80,78,79,81,74,70,72,79,73,75,77,73,65,64,72,72,59,62,71,74,68,67,58,57 52 | 0,76,75,68,78,71,72,72,75,61,65,67,70,67,75,60,58,63,67,59,63,67,72,74,73,56,56,52,52,67,68,73,78,65,68,61,67,69,74,77,75,74,70,63,61 53 | 0,74,73,72,75,63,62,67,67,73,74,75,79,70,71,64,67,65,69,79,78,81,80,71,73,60,62,69,67,69,69,75,75,66,67,67,66,71,73,66,69,62,65,55,56 54 | 0,65,67,69,76,62,68,65,66,65,64,74,73,60,75,66,63,64,62,73,65,77,74,69,69,66,59,68,59,69,69,76,79,65,63,60,60,69,64,69,74,69,70,62,57 55 | 0,59,75,70,76,62,70,65,74,65,67,75,76,70,73,63,61,74,67,78,69,75,73,70,68,67,64,79,68,70,75,76,77,59,63,72,69,64,64,65,72,61,61,51,55 56 | 0,76,72,73,69,67,73,74,72,60,65,73,66,66,73,68,67,69,70,60,58,66,76,69,75,65,64,63,60,74,71,77,79,61,68,71,70,62,63,73,76,62,69,52,59 57 | 0,71,75,78,78,68,67,75,72,67,68,72,75,74,74,67,66,66,67,66,66,78,80,73,75,67,72,67,67,67,65,77,78,61,64,63,66,51,57,77,67,78,76,60,59 58 | 0,80,76,75,75,69,68,74,75,77,77,76,78,74,70,66,65,67,75,74,73,74,77,68,67,61,58,60,67,61,63,75,75,66,62,59,61,77,74,69,67,65,66,61,58 59 | 0,68,70,66,72,63,71,77,82,61,63,61,62,61,65,65,62,72,77,69,73,72,78,74,77,69,69,77,74,64,63,66,70,58,60,65,69,75,77,77,77,69,77,65,64 60 | 0,67,57,73,78,63,68,72,73,61,59,59,76,71,72,69,66,70,68,65,77,79,68,71,75,62,66,70,78,68,69,70,76,65,65,66,67,62,72,69,72,70,68,60,59 61 | 0,72,74,67,69,69,70,74,81,66,70,73,78,69,80,65,65,70,77,69,70,73,79,64,68,56,58,67,64,68,68,69,74,62,67,66,70,73,77,74,77,71,72,63,65 62 | 0,62,71,78,84,64,68,72,74,53,57,71,70,71,72,54,53,63,67,54,57,71,71,70,74,54,57,54,57,62,64,75,72,62,65,60,64,64,67,72,77,62,62,61,65 63 | 0,69,78,74,76,70,67,69,73,68,75,75,76,71,77,58,61,66,70,67,72,76,72,56,62,56,61,57,62,67,73,76,74,58,63,64,68,66,76,70,72,64,68,60,56 64 | 0,59,65,53,60,72,74,67,69,64,67,64,65,71,70,68,71,72,70,70,70,75,78,72,71,71,71,67,64,67,71,71,74,62,66,72,73,57,57,64,71,70,69,53,49 65 | 0,66,67,63,70,69,70,73,72,61,62,68,68,70,71,71,67,71,69,65,65,76,78,71,70,65,64,68,71,70,71,73,74,58,63,68,71,70,72,77,79,79,79,66,66 66 | 0,62,66,66,68,73,76,68,71,62,62,63,68,74,75,63,68,71,68,58,58,65,66,65,76,64,70,63,60,70,72,71,77,67,69,72,71,63,63,70,72,75,79,62,59 67 | 0,71,71,69,71,65,65,76,73,67,66,69,79,76,76,63,62,74,71,58,66,76,78,78,74,68,66,69,68,68,68,71,74,59,57,65,66,73,71,78,74,68,70,57,55 68 | 0,63,61,75,72,68,71,69,70,64,56,70,75,76,73,70,72,76,73,68,68,79,76,68,76,66,73,58,68,72,75,72,75,65,61,66,67,58,57,72,72,68,71,57,58 69 | 0,74,81,80,78,70,69,74,77,69,71,73,76,68,68,62,61,68,68,67,70,74,80,68,74,57,62,57,65,61,65,71,76,63,65,67,67,70,74,63,72,68,70,61,64 70 | 0,69,64,73,72,49,70,66,71,57,56,64,62,76,74,65,62,63,58,63,63,75,76,78,80,75,77,51,62,74,68,77,77,70,68,68,64,59,58,69,66,74,75,62,59 71 | 0,70,64,68,67,76,68,76,69,67,64,69,65,62,65,70,67,74,68,65,65,74,75,64,69,63,63,64,64,56,61,62,68,66,66,62,58,57,48,75,64,79,74,59,58 72 | 0,65,68,70,78,65,72,72,74,64,69,71,73,72,68,62,62,65,62,72,75,79,78,72,76,66,67,62,61,68,76,72,78,65,64,67,63,64,67,67,77,66,66,59,57 73 | 0,64,53,74,70,65,63,70,70,57,57,64,64,73,74,65,59,65,63,63,62,72,73,79,76,75,68,60,58,69,66,72,76,64,65,63,65,63,65,75,80,74,67,71,67 74 | 0,70,71,71,74,68,66,72,70,66,69,74,72,70,69,64,66,73,72,75,73,81,81,76,75,71,70,74,82,69,72,76,74,60,56,66,66,64,64,73,72,66,63,54,58 75 | 0,72,70,75,80,73,70,76,73,66,56,72,70,73,75,67,65,69,69,73,72,81,77,80,79,67,64,64,66,69,68,70,75,63,59,66,63,74,77,81,78,79,75,65,66 76 | 0,70,75,72,72,67,71,71,78,63,67,73,76,71,74,59,61,67,64,74,71,77,77,70,72,61,61,62,58,63,69,76,75,64,65,66,67,68,70,70,71,64,67,56,54 77 | 0,59,57,67,71,66,68,68,70,56,62,77,61,67,71,75,71,67,64,62,54,64,75,71,72,76,79,75,70,71,77,71,69,56,54,62,64,56,53,71,68,64,63,56,56 78 | 0,67,64,73,75,77,77,74,70,65,62,74,75,65,67,68,70,66,69,67,60,74,75,62,64,66,71,62,61,64,69,73,76,64,66,61,64,65,60,68,75,74,80,67,68 79 | 0,68,65,72,72,47,74,76,74,67,66,71,69,69,67,63,64,68,68,70,74,77,77,73,60,49,48,42,69,70,69,76,79,63,66,64,69,71,73,73,75,68,56,58,44 80 | 0,66,54,69,66,69,69,75,72,63,62,68,66,68,70,71,68,70,69,66,68,73,72,65,73,67,63,60,57,70,68,75,75,65,67,69,65,65,64,67,69,71,68,59,59 -------------------------------------------------------------------------------- /completion_accuracy.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 | 30 | 31 | 32 | 44 | 45 | 46 | 58 | 59 | 60 | 72 | 73 | 74 | 86 | 87 | 88 | 100 | 101 | 102 | 124 | 125 | 126 | 127 | 128 | 129 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 169 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 654 | 655 | 656 | 659 | 660 | 661 | 664 | 665 | 666 | 669 | 670 | 671 | 672 | 680 | 681 | 682 | 685 | 686 | 687 | 688 | 689 | 690 | 708 | 737 | 761 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | -------------------------------------------------------------------------------- /data/SPECTF.test: -------------------------------------------------------------------------------- 1 | 1, 67, 68, 73, 78, 65, 63, 67, 60, 63, 62, 71, 68, 76, 73, 59, 61, 62, 56, 74, 73, 78, 76, 79, 79, 70, 70, 68, 67, 65, 67, 76, 75, 63, 61, 61, 56, 76, 75, 74, 77, 76, 74, 59, 68 2 | 1, 75, 74, 71, 71, 62, 58, 70, 64, 71, 68, 76, 68, 71, 71, 58, 58, 70, 69, 70, 72, 75, 73, 74, 72, 66, 60, 63, 66, 70, 64, 75, 70, 64, 62, 66, 62, 68, 69, 69, 66, 64, 58, 57, 52 3 | 1, 83, 64, 66, 67, 67, 74, 74, 72, 64, 68, 75, 73, 78, 73, 72, 57, 71, 67, 73, 65, 78, 73, 76, 69, 63, 57, 63, 53, 67, 60, 77, 74, 69, 64, 67, 64, 69, 63, 68, 54, 65, 64, 43, 42 4 | 1, 72, 66, 65, 65, 64, 61, 71, 78, 73, 69, 68, 65, 62, 65, 66, 66, 72, 74, 67, 61, 77, 71, 68, 65, 64, 60, 73, 69, 70, 69, 74, 72, 61, 63, 69, 68, 68, 63, 71, 72, 65, 63, 58, 60 5 | 1, 62, 60, 69, 61, 63, 63, 70, 68, 70, 65, 77, 56, 71, 65, 69, 68, 74, 78, 77, 70, 80, 73, 79, 75, 76, 67, 74, 69, 66, 71, 70, 61, 54, 54, 66, 66, 58, 56, 72, 73, 71, 64, 49, 42 6 | 1, 68, 63, 67, 67, 65, 72, 74, 72, 70, 71, 79, 71, 72, 67, 68, 69, 75, 79, 67, 65, 78, 69, 72, 67, 64, 59, 67, 65, 73, 70, 80, 69, 63, 61, 70, 70, 70, 67, 77, 71, 77, 72, 68, 59 7 | 1, 80, 76, 77, 76, 67, 68, 71, 76, 69, 66, 76, 78, 61, 71, 58, 61, 61, 68, 78, 72, 72, 75, 61, 66, 58, 62, 69, 66, 55, 40, 70, 71, 67, 58, 57, 58, 62, 65, 59, 45, 53, 58, 54, 55 8 | 1, 68, 63, 62, 58, 60, 57, 69, 78, 59, 53, 61, 58, 48, 50, 52, 50, 72, 70, 59, 59, 71, 77, 50, 49, 53, 44, 76, 74, 64, 66, 68, 63, 52, 52, 66, 67, 74, 70, 77, 74, 66, 60, 59, 56 9 | 1, 77, 61, 71, 69, 70, 66, 57, 55, 67, 67, 79, 72, 79, 71, 64, 54, 62, 63, 39, 47, 75, 76, 67, 71, 63, 44, 22, 25, 21, 18, 72, 79, 57, 58, 48, 40, 41, 39, 19, 16, 68, 72, 56, 65 10 | 1, 69, 68, 73, 74, 62, 67, 74, 73, 67, 65, 70, 75, 64, 68, 58, 57, 66, 70, 57, 63, 68, 71, 68, 69, 40, 38, 55, 59, 67, 67, 76, 78, 65, 67, 61, 65, 76, 79, 74, 73, 64, 56, 53, 45 11 | 1, 65, 69, 70, 71, 56, 63, 63, 70, 44, 51, 78, 74, 48, 49, 49, 52, 58, 60, 49, 51, 80, 65, 51, 48, 58, 43, 64, 62, 71, 70, 78, 73, 71, 57, 71, 73, 68, 64, 62, 59, 59, 64, 53, 55 12 | 1, 65, 63, 73, 75, 67, 61, 76, 65, 62, 62, 79, 75, 74, 70, 57, 52, 62, 62, 62, 63, 78, 72, 57, 50, 39, 36, 51, 51, 41, 43, 64, 70, 56, 54, 50, 46, 66, 67, 49, 43, 43, 43, 41, 43 13 | 1, 71, 73, 65, 80, 62, 67, 65, 77, 66, 68, 72, 80, 71, 74, 58, 62, 67, 73, 73, 73, 83, 78, 66, 77, 60, 59, 61, 61, 53, 46, 73, 75, 67, 65, 62, 65, 62, 66, 62, 60, 61, 68, 43, 56 14 | 1, 64, 75, 52, 46, 59, 54, 79, 78, 61, 68, 61, 71, 36, 28, 59, 58, 67, 74, 51, 55, 57, 78, 31, 32, 40, 43, 66, 78, 49, 49, 47, 39, 31, 27, 59, 75, 51, 73, 60, 56, 41, 21, 33, 22 15 | 1, 62, 54, 65, 65, 24, 31, 79, 66, 53, 54, 76, 72, 47, 50, 30, 25, 73, 74, 62, 55, 76, 78, 56, 47, 27, 34, 56, 78, 68, 68, 66, 68, 60, 60, 66, 68, 55, 51, 68, 71, 31, 29, 27, 18 16 | 1, 57, 43, 62, 50, 43, 57, 61, 44, 44, 24, 53, 36, 60, 69, 58, 61, 30, 32, 61, 63, 75, 72, 62, 71, 42, 44, 67, 74, 29, 19, 76, 77, 65, 66, 41, 41, 57, 46, 27, 12, 41, 52, 42, 49 17 | 1, 67, 65, 61, 61, 60, 62, 75, 74, 68, 68, 72, 75, 70, 75, 63, 68, 72, 75, 64, 70, 76, 75, 70, 70, 67, 63, 66, 67, 69, 66, 77, 77, 64, 66, 68, 69, 70, 69, 75, 66, 71, 70, 57, 63 18 | 1, 62, 54, 73, 68, 72, 71, 76, 76, 62, 52, 66, 58, 73, 65, 70, 70, 73, 73, 59, 52, 65, 59, 70, 55, 72, 65, 68, 70, 69, 66, 69, 66, 61, 51, 69, 72, 60, 54, 74, 68, 73, 67, 56, 52 19 | 1, 67, 59, 54, 48, 63, 67, 77, 78, 71, 61, 57, 57, 59, 50, 72, 72, 77, 77, 76, 73, 85, 67, 58, 50, 39, 33, 54, 50, 57, 50, 45, 41, 38, 43, 76, 77, 80, 69, 61, 48, 63, 61, 37, 36 20 | 1, 65, 56, 67, 58, 76, 79, 70, 71, 59, 50, 76, 61, 72, 64, 69, 73, 71, 68, 67, 50, 75, 65, 71, 62, 63, 70, 66, 55, 59, 52, 74, 60, 59, 58, 68, 63, 54, 38, 57, 52, 71, 74, 59, 65 21 | 1, 71, 56, 75, 74, 61, 69, 73, 73, 65, 63, 71, 69, 70, 74, 61, 64, 70, 66, 70, 69, 76, 81, 62, 60, 39, 39, 72, 72, 58, 64, 71, 71, 56, 55, 62, 61, 70, 75, 57, 63, 41, 61, 34, 40 22 | 1, 73, 59, 76, 61, 67, 52, 66, 46, 70, 59, 76, 72, 71, 75, 63, 33, 68, 49, 68, 49, 73, 66, 70, 58, 30, 14, 54, 41, 54, 41, 76, 66, 77, 57, 62, 26, 74, 57, 58, 47, 40, 9, 28, 19 23 | 1, 77, 69, 77, 79, 60, 59, 65, 68, 57, 54, 76, 76, 60, 66, 39, 36, 63, 65, 54, 60, 75, 71, 59, 63, 43, 38, 64, 49, 53, 42, 67, 73, 62, 60, 55, 52, 59, 58, 55, 43, 41, 37, 39, 26 24 | 1, 66, 65, 72, 74, 59, 61, 67, 65, 59, 58, 70, 72, 71, 67, 58, 52, 64, 63, 73, 71, 78, 59, 75, 72, 54, 45, 66, 64, 61, 60, 73, 74, 58, 57, 60, 59, 74, 71, 75, 74, 70, 66, 63, 61 25 | 1, 69, 80, 67, 67, 62, 61, 65, 67, 62, 71, 77, 75, 72, 77, 56, 54, 65, 60, 57, 63, 80, 69, 71, 72, 51, 39, 57, 50, 64, 63, 75, 70, 59, 56, 60, 55, 65, 68, 66, 67, 67, 68, 54, 54 26 | 1, 74, 67, 69, 75, 59, 57, 70, 68, 70, 62, 79, 76, 74, 70, 64, 56, 71, 73, 72, 64, 81, 72, 75, 66, 60, 57, 68, 62, 59, 38, 74, 66, 71, 60, 67, 59, 66, 58, 70, 50, 45, 31, 36, 35 27 | 1, 66, 70, 78, 75, 69, 64, 70, 66, 66, 69, 75, 76, 66, 65, 54, 52, 61, 57, 68, 65, 79, 69, 67, 63, 51, 50, 54, 43, 41, 49, 71, 74, 67, 67, 54, 52, 76, 72, 65, 69, 69, 64, 58, 56 28 | 1, 79, 58, 73, 78, 67, 65, 74, 71, 64, 54, 76, 68, 72, 69, 70, 64, 69, 64, 63, 53, 74, 64, 73, 67, 60, 57, 58, 51, 65, 68, 76, 75, 66, 63, 66, 62, 66, 58, 71, 67, 71, 68, 62, 60 29 | 1, 61, 66, 64, 65, 62, 66, 74, 67, 60, 62, 65, 64, 69, 70, 70, 67, 75, 73, 69, 69, 76, 78, 77, 80, 76, 76, 69, 73, 65, 73, 69, 63, 53, 58, 68, 65, 62, 60, 73, 73, 67, 63, 58, 61 30 | 1, 63, 69, 70, 72, 66, 70, 66, 72, 71, 67, 74, 77, 70, 71, 67, 69, 69, 68, 75, 73, 73, 77, 67, 66, 62, 59, 62, 58, 61, 65, 74, 75, 63, 67, 65, 67, 71, 71, 68, 70, 74, 72, 56, 60 31 | 1, 73, 67, 74, 73, 79, 75, 76, 77, 61, 60, 70, 73, 76, 77, 71, 71, 65, 65, 69, 64, 75, 76, 78, 80, 72, 69, 61, 59, 71, 68, 76, 79, 68, 67, 71, 67, 63, 59, 68, 66, 74, 71, 59, 57 32 | 1, 66, 68, 67, 72, 65, 71, 71, 71, 60, 67, 69, 78, 75, 72, 68, 66, 69, 68, 77, 77, 81, 80, 68, 69, 70, 65, 66, 65, 62, 66, 74, 76, 59, 62, 64, 63, 67, 75, 70, 75, 74, 76, 62, 65 33 | 1, 55, 54, 71, 74, 21, 25, 60, 27, 69, 64, 74, 79, 64, 70, 58, 38, 72, 64, 63, 62, 77, 75, 61, 58, 42, 37, 64, 54, 20, 15, 66, 73, 66, 67, 43, 36, 77, 59, 24, 35, 18, 27, 29, 22 34 | 1, 70, 68, 68, 70, 56, 54, 66, 67, 68, 70, 75, 73, 59, 59, 60, 62, 75, 71, 50, 45, 55, 55, 61, 61, 46, 49, 55, 52, 66, 72, 66, 65, 62, 65, 68, 70, 69, 69, 67, 70, 56, 57, 56, 52 35 | 1, 71, 71, 77, 82, 64, 63, 73, 71, 66, 64, 72, 79, 66, 59, 57, 57, 70, 63, 71, 68, 78, 79, 67, 65, 63, 63, 70, 67, 68, 70, 75, 77, 60, 62, 70, 67, 77, 74, 71, 75, 72, 67, 62, 60 36 | 1, 57, 44, 74, 68, 82, 76, 78, 62, 66, 67, 74, 72, 71, 70, 67, 69, 68, 68, 69, 74, 75, 71, 73, 71, 69, 65, 58, 63, 54, 63, 68, 74, 73, 76, 66, 65, 63, 66, 71, 71, 71, 68, 66, 60 37 | 1, 72, 71, 70, 72, 63, 69, 71, 73, 71, 71, 79, 75, 71, 71, 65, 74, 68, 74, 71, 71, 70, 78, 62, 67, 62, 60, 59, 59, 69, 66, 75, 75, 57, 57, 66, 69, 68, 67, 69, 64, 58, 62, 52, 54 38 | 1, 60, 58, 74, 68, 44, 48, 85, 60, 56, 48, 71, 70, 46, 43, 57, 43, 75, 60, 62, 44, 69, 52, 57, 42, 20, 23, 58, 60, 38, 41, 67, 70, 64, 68, 59, 47, 69, 55, 65, 55, 19, 47, 18, 17 39 | 1, 33, 21, 38, 54, 60, 52, 41, 50, 26, 29, 58, 58, 76, 71, 59, 68, 17, 13, 75, 73, 73, 78, 65, 67, 62, 47, 59, 57, 23, 26, 73, 74, 52, 58, 40, 38, 49, 45, 11, 13, 62, 64, 46, 40 40 | 1, 58, 70, 62, 73, 34, 41, 55, 54, 65, 77, 73, 78, 65, 65, 33, 48, 57, 64, 69, 67, 68, 64, 61, 58, 60, 59, 73, 70, 45, 40, 71, 74, 52, 56, 59, 62, 67, 75, 36, 39, 22, 19, 29, 24 41 | 1, 58, 40, 57, 43, 74, 57, 78, 53, 68, 58, 65, 54, 75, 50, 59, 73, 80, 77, 60, 59, 61, 61, 55, 56, 48, 63, 75, 77, 13, 7, 47, 52, 54, 58, 51, 31, 53, 18, 17, 6, 15, 69, 30, 40 42 | 1, 77, 77, 70, 71, 68, 66, 75, 75, 73, 72, 71, 77, 66, 65, 60, 58, 70, 70, 71, 74, 80, 79, 64, 64, 60, 55, 70, 68, 76, 74, 75, 75, 65, 65, 73, 73, 71, 70, 73, 73, 63, 62, 52, 52 43 | 1, 65, 67, 67, 61, 55, 57, 66, 74, 64, 69, 61, 62, 71, 71, 53, 53, 64, 71, 65, 66, 71, 73, 65, 70, 47, 39, 80, 75, 67, 64, 72, 66, 53, 55, 63, 64, 60, 61, 74, 63, 59, 58, 50, 49 44 | 1, 77, 59, 76, 78, 40, 34, 75, 63, 65, 26, 70, 28, 50, 46, 25, 66, 46, 52, 63, 63, 68, 56, 46, 47, 12, 6, 28, 23, 56, 48, 68, 55, 63, 54, 40, 20, 65, 68, 56, 57, 5, 10, 13, 10 45 | 1, 64, 59, 76, 72, 55, 52, 63, 66, 68, 63, 75, 72, 70, 64, 60, 57, 75, 68, 62, 59, 69, 73, 74, 67, 49, 42, 66, 51, 58, 48, 75, 73, 76, 75, 64, 62, 73, 70, 72, 51, 71, 42, 61, 39 46 | 1, 57, 63, 67, 82, 69, 67, 63, 70, 74, 64, 71, 71, 72, 73, 59, 54, 65, 63, 79, 62, 77, 69, 70, 63, 54, 50, 61, 53, 59, 60, 72, 74, 72, 59, 64, 54, 70, 65, 73, 70, 64, 58, 60, 57 47 | 1, 58, 57, 74, 71, 59, 60, 54, 59, 33, 39, 65, 74, 71, 75, 53, 57, 47, 60, 43, 44, 75, 78, 54, 57, 56, 56, 57, 61, 60, 62, 77, 76, 59, 57, 53, 60, 53, 57, 61, 74, 77, 82, 66, 68 48 | 1, 61, 66, 64, 74, 51, 55, 64, 63, 67, 67, 73, 76, 69, 67, 55, 53, 70, 67, 65, 61, 70, 66, 70, 62, 43, 35, 68, 65, 61, 56, 70, 73, 59, 62, 64, 62, 67, 68, 55, 61, 53, 42, 37, 28 49 | 1, 67, 80, 73, 76, 74, 69, 78, 81, 67, 68, 72, 79, 74, 77, 65, 65, 64, 66, 71, 74, 79, 81, 68, 69, 59, 63, 62, 63, 67, 66, 73, 73, 61, 65, 65, 66, 65, 72, 69, 63, 70, 67, 58, 56 50 | 1, 69, 55, 75, 73, 63, 64, 70, 66, 61, 75, 77, 75, 74, 76, 63, 61, 73, 75, 49, 67, 72, 69, 66, 74, 48, 48, 53, 66, 64, 68, 71, 71, 60, 64, 62, 68, 67, 74, 65, 70, 63, 64, 50, 52 51 | 1, 77, 63, 68, 70, 66, 70, 80, 79, 60, 57, 75, 68, 63, 66, 63, 69, 69, 70, 36, 34, 48, 47, 72, 77, 62, 66, 62, 62, 57, 69, 73, 75, 62, 63, 69, 71, 56, 53, 74, 76, 72, 73, 64, 63 52 | 1, 46, 47, 65, 68, 41, 48, 52, 45, 54, 47, 74, 72, 63, 63, 47, 45, 31, 36, 60, 65, 66, 79, 57, 60, 49, 52, 45, 45, 31, 36, 70, 71, 63, 72, 34, 34, 66, 78, 26, 35, 60, 43, 52, 51 53 | 1, 67, 74, 73, 74, 54, 63, 58, 72, 59, 71, 75, 82, 59, 77, 38, 38, 56, 70, 60, 70, 70, 84, 63, 67, 33, 38, 57, 69, 62, 65, 71, 72, 54, 60, 57, 61, 53, 73, 58, 67, 49, 56, 27, 36 54 | 1, 73, 70, 69, 75, 62, 62, 67, 70, 70, 76, 75, 74, 73, 77, 63, 58, 68, 71, 64, 66, 76, 74, 67, 69, 56, 44, 65, 65, 68, 69, 72, 71, 57, 61, 62, 65, 62, 66, 66, 62, 54, 56, 44, 35 55 | 1, 68, 77, 67, 70, 64, 62, 79, 80, 64, 64, 76, 74, 65, 64, 64, 60, 62, 67, 74, 75, 82, 77, 75, 74, 72, 73, 72, 71, 67, 69, 75, 73, 64, 62, 63, 65, 68, 70, 77, 69, 72, 71, 65, 57 56 | 1, 57, 70, 65, 71, 58, 69, 74, 81, 67, 72, 75, 78, 69, 71, 65, 63, 71, 75, 61, 68, 72, 78, 66, 72, 41, 38, 48, 48, 63, 68, 69, 77, 62, 67, 65, 69, 70, 74, 77, 81, 67, 69, 55, 60 57 | 1, 47, 47, 48, 69, 80, 52, 52, 52, 58, 46, 45, 48, 42, 59, 40, 38, 62, 54, 63, 69, 64, 63, 79, 70, 33, 19, 49, 46, 44, 43, 49, 57, 43, 75, 49, 27, 36, 39, 47, 57, 14, 20, 21, 4 58 | 1, 64, 75, 74, 73, 57, 61, 63, 70, 63, 72, 75, 81, 73, 77, 36, 38, 63, 73, 63, 65, 66, 63, 74, 77, 29, 28, 53, 52, 64, 68, 68, 73, 59, 61, 64, 66, 58, 69, 56, 73, 37, 38, 24, 18 59 | 1, 58, 66, 63, 61, 66, 68, 75, 79, 61, 63, 57, 62, 66, 66, 59, 59, 75, 74, 62, 65, 78, 76, 72, 72, 60, 60, 64, 65, 64, 70, 68, 68, 59, 67, 67, 66, 58, 57, 58, 73, 48, 59, 39, 51 60 | 1, 73, 71, 71, 68, 64, 60, 72, 76, 75, 70, 77, 76, 67, 67, 65, 59, 69, 69, 70, 69, 77, 73, 64, 58, 56, 51, 58, 57, 71, 68, 75, 77, 72, 68, 72, 70, 72, 69, 72, 64, 62, 61, 53, 53 61 | 1, 67, 66, 67, 65, 74, 65, 76, 70, 71, 68, 70, 68, 69, 65, 70, 70, 72, 72, 76, 71, 77, 72, 64, 49, 45, 35, 71, 67, 67, 64, 72, 66, 62, 57, 74, 72, 72, 69, 72, 66, 76, 71, 58, 45 62 | 1, 78, 75, 69, 66, 69, 71, 75, 75, 67, 67, 58, 50, 44, 47, 63, 73, 75, 77, 73, 76, 36, 42, 48, 43, 61, 61, 71, 73, 62, 64, 39, 37, 28, 30, 68, 71, 73, 69, 72, 74, 65, 68, 56, 55 63 | 1, 70, 69, 69, 67, 69, 68, 72, 73, 63, 71, 73, 73, 69, 69, 70, 65, 79, 76, 54, 61, 73, 70, 65, 72, 56, 55, 67, 71, 69, 70, 70, 69, 56, 62, 69, 67, 68, 69, 80, 77, 71, 69, 52, 50 64 | 1, 65, 65, 71, 77, 70, 68, 73, 72, 68, 65, 78, 75, 77, 65, 61, 58, 71, 61, 76, 77, 76, 75, 65, 72, 57, 43, 69, 68, 67, 67, 70, 66, 57, 59, 66, 59, 64, 61, 63, 58, 63, 54, 34, 27 65 | 1, 66, 73, 75, 74, 67, 67, 73, 71, 72, 63, 79, 78, 64, 74, 66, 74, 77, 73, 75, 62, 79, 67, 67, 72, 66, 59, 73, 69, 70, 73, 77, 74, 62, 66, 69, 66, 64, 62, 78, 75, 73, 63, 50, 46 66 | 1, 59, 55, 51, 65, 68, 45, 21, 25, 45, 41, 57, 74, 68, 77, 28, 25, 3, 11, 54, 67, 58, 75, 65, 77, 33, 31, 14, 17, 39, 43, 65, 73, 61, 71, 18, 24, 44, 59, 36, 47, 29, 28, 52, 13 67 | 1, 72, 69, 65, 65, 66, 67, 76, 78, 72, 70, 77, 79, 66, 67, 65, 60, 71, 72, 74, 67, 79, 79, 72, 67, 57, 51, 68, 56, 68, 63, 76, 77, 61, 64, 68, 65, 77, 76, 76, 64, 71, 57, 41, 39 68 | 1, 65, 50, 74, 72, 62, 59, 71, 66, 67, 55, 72, 73, 70, 72, 61, 62, 74, 73, 63, 59, 79, 80, 68, 67, 60, 68, 64, 68, 48, 40, 63, 74, 56, 58, 59, 59, 70, 59, 62, 47, 73, 68, 54, 45 69 | 1, 63, 54, 76, 69, 72, 66, 69, 66, 61, 53, 72, 65, 72, 74, 69, 65, 71, 67, 59, 59, 70, 70, 76, 71, 62, 65, 64, 59, 69, 62, 77, 77, 66, 65, 71, 69, 59, 54, 71, 62, 65, 69, 54, 56 70 | 1, 54, 52, 58, 55, 62, 54, 75, 74, 61, 58, 66, 66, 56, 50, 49, 40, 74, 82, 61, 47, 58, 71, 27, 40, 40, 19, 77, 77, 55, 56, 68, 68, 44, 41, 69, 68, 62, 56, 61, 62, 45, 20, 37, 11 71 | 1, 67, 58, 59, 54, 60, 65, 75, 75, 63, 61, 70, 67, 72, 61, 64, 57, 73, 66, 72, 79, 78, 81, 79, 76, 74, 50, 69, 66, 57, 47, 61, 51, 54, 56, 65, 66, 63, 71, 68, 59, 62, 47, 61, 48 72 | 1, 60, 59, 67, 58, 66, 60, 72, 79, 74, 75, 71, 70, 72, 66, 70, 65, 77, 74, 67, 76, 74, 81, 57, 56, 42, 42, 50, 59, 62, 66, 70, 73, 59, 62, 67, 66, 71, 76, 70, 69, 67, 59, 60, 55 73 | 1, 62, 80, 54, 68, 66, 70, 68, 69, 68, 70, 63, 70, 68, 58, 57, 50, 68, 65, 66, 70, 68, 65, 65, 74, 53, 61, 59, 67, 68, 72, 74, 72, 61, 61, 67, 69, 64, 72, 68, 70, 61, 60, 55, 63 74 | 1, 54, 42, 57, 60, 61, 44, 39, 54, 12, 22, 47, 52, 58, 63, 51, 35, 47, 31, 57, 50, 69, 60, 68, 60, 48, 38, 37, 36, 29, 22, 47, 54, 72, 62, 42, 18, 33, 30, 23, 28, 49, 40, 76, 45 75 | 1, 65, 70, 68, 71, 63, 59, 75, 75, 65, 63, 75, 78, 72, 74, 58, 59, 68, 71, 75, 68, 83, 81, 80, 82, 71, 57, 68, 67, 62, 69, 72, 75, 60, 61, 68, 69, 73, 73, 71, 77, 74, 64, 61, 50 76 | 1, 59, 75, 77, 80, 60, 64, 70, 67, 54, 68, 78, 77, 69, 64, 57, 56, 59, 57, 71, 70, 79, 77, 67, 65, 54, 54, 61, 58, 61, 64, 79, 74, 67, 66, 60, 58, 70, 72, 60, 65, 61, 60, 51, 52 77 | 1, 71, 74, 71, 74, 62, 53, 68, 64, 69, 68, 72, 74, 70, 68, 57, 50, 68, 69, 60, 60, 81, 71, 66, 53, 51, 38, 78, 72, 68, 68, 71, 71, 60, 54, 67, 67, 74, 62, 66, 59, 52, 38, 34, 17 78 | 1, 72, 71, 74, 73, 64, 60, 68, 71, 72, 69, 79, 74, 67, 56, 65, 60, 75, 74, 72, 70, 79, 79, 64, 58, 63, 57, 73, 70, 72, 59, 76, 60, 63, 50, 71, 65, 68, 69, 68, 63, 61, 54, 49, 47 79 | 1, 68, 64, 63, 61, 80, 72, 70, 69, 73, 69, 80, 78, 79, 76, 70, 69, 67, 65, 76, 73, 80, 79, 74, 80, 68, 63, 73, 62, 67, 63, 72, 75, 55, 61, 58, 60, 64, 61, 70, 64, 71, 63, 54, 50 80 | 1, 58, 65, 78, 76, 64, 58, 74, 70, 63, 57, 81, 72, 62, 59, 41, 41, 64, 57, 75, 58, 75, 70, 64, 66, 32, 29, 66, 56, 57, 63, 71, 72, 61, 58, 71, 62, 77, 62, 72, 62, 49, 35, 30, 20 81 | 1, 60, 64, 61, 74, 57, 63, 67, 70, 59, 65, 62, 74, 58, 68, 51, 41, 63, 67, 60, 70, 73, 85, 62, 46, 31, 35, 56, 79, 58, 64, 70, 75, 59, 58, 57, 66, 62, 71, 69, 61, 41, 31, 24, 18 82 | 1, 51, 43, 66, 63, 54, 56, 71, 75, 65, 63, 69, 68, 61, 65, 60, 55, 65, 69, 65, 66, 77, 74, 65, 69, 62, 55, 67, 59, 61, 48, 71, 66, 63, 64, 60, 55, 70, 71, 78, 67, 72, 65, 70, 65 83 | 1, 57, 55, 56, 53, 51, 44, 68, 56, 68, 66, 64, 58, 58, 68, 66, 68, 72, 70, 67, 61, 70, 63, 70, 62, 44, 41, 63, 45, 42, 61, 64, 51, 68, 55, 71, 69, 62, 54, 57, 52, 38, 27, 39, 32 84 | 1, 68, 70, 70, 69, 65, 63, 71, 74, 73, 70, 79, 78, 77, 74, 61, 60, 69, 73, 70, 69, 76, 73, 69, 71, 62, 56, 67, 63, 65, 65, 67, 75, 59, 60, 67, 69, 69, 66, 62, 64, 68, 60, 56, 51 85 | 1, 57, 29, 71, 51, 65, 41, 67, 45, 63, 39, 75, 63, 60, 67, 52, 52, 65, 64, 74, 63, 81, 82, 72, 66, 62, 65, 71, 61, 51, 25, 71, 72, 55, 60, 60, 51, 72, 60, 74, 40, 69, 69, 57, 58 86 | 1, 49, 46, 59, 44, 59, 26, 56, 32, 69, 57, 66, 75, 51, 31, 32, 19, 32, 62, 59, 56, 80, 40, 47, 35, 33, 20, 57, 38, 35, 25, 58, 51, 59, 65, 50, 14, 64, 53, 37, 12, 34, 18, 46, 29 87 | 1, 75, 75, 64, 63, 58, 58, 75, 77, 73, 74, 73, 76, 69, 65, 67, 68, 73, 76, 79, 78, 76, 74, 72, 66, 60, 61, 57, 58, 47, 40, 61, 63, 58, 47, 65, 66, 59, 63, 60, 57, 63, 47, 42, 40 88 | 1, 71, 66, 66, 71, 50, 41, 77, 60, 57, 58, 68, 69, 40, 61, 50, 34, 69, 51, 60, 60, 79, 63, 40, 61, 30, 14, 72, 41, 38, 36, 56, 65, 44, 47, 56, 40, 70, 63, 56, 58, 20, 25, 23, 16 89 | 1, 73, 60, 68, 54, 75, 63, 77, 72, 60, 54, 66, 69, 69, 66, 66, 59, 73, 59, 64, 62, 76, 76, 77, 68, 66, 57, 80, 62, 66, 60, 71, 66, 61, 59, 68, 61, 69, 63, 79, 67, 74, 73, 62, 58 90 | 1, 67, 70, 63, 48, 63, 60, 76, 75, 65, 52, 63, 48, 64, 52, 57, 62, 64, 76, 65, 65, 74, 62, 69, 64, 54, 62, 63, 78, 70, 59, 63, 49, 59, 53, 68, 65, 76, 62, 72, 61, 68, 61, 54, 53 91 | 1, 68, 73, 78, 83, 70, 71, 77, 74, 65, 61, 75, 74, 70, 69, 54, 56, 61, 60, 86, 79, 86, 86, 82, 79, 72, 58, 75, 57, 65, 53, 77, 75, 58, 61, 64, 56, 72, 68, 69, 65, 65, 62, 58, 58 92 | 1, 62, 54, 68, 70, 51, 28, 54, 23, 54, 54, 63, 65, 63, 70, 23, 11, 47, 31, 50, 59, 68, 67, 70, 75, 17, 16, 49, 44, 36, 19, 70, 72, 62, 68, 40, 29, 63, 58, 48, 44, 28, 10, 15, 28 93 | 1, 75, 74, 69, 73, 64, 61, 71, 71, 61, 58, 76, 78, 70, 68, 54, 52, 64, 66, 73, 75, 82, 82, 70, 80, 55, 55, 60, 70, 65, 67, 76, 77, 61, 62, 62, 65, 70, 67, 67, 68, 59, 56, 50, 46 94 | 1, 79, 77, 78, 70, 69, 65, 75, 75, 69, 66, 61, 60, 65, 59, 60, 59, 73, 70, 65, 69, 66, 69, 55, 53, 61, 56, 66, 69, 75, 66, 76, 71, 65, 51, 72, 75, 72, 73, 68, 63, 41, 36, 25, 27 95 | 1, 68, 62, 64, 65, 70, 69, 76, 75, 63, 59, 70, 59, 72, 66, 69, 68, 74, 74, 79, 70, 83, 83, 72, 69, 73, 78, 80, 83, 71, 70, 71, 63, 54, 51, 71, 70, 61, 56, 77, 76, 66, 67, 49, 54 96 | 1, 68, 74, 76, 84, 72, 72, 85, 75, 73, 70, 77, 78, 70, 66, 59, 58, 75, 70, 57, 64, 81, 76, 70, 64, 48, 47, 49, 54, 62, 64, 72, 76, 65, 62, 67, 68, 70, 70, 67, 58, 58, 58, 51, 52 97 | 1, 70, 69, 66, 66, 66, 67, 78, 80, 70, 65, 75, 71, 74, 72, 63, 66, 74, 75, 72, 71, 76, 74, 78, 76, 60, 52, 60, 63, 63, 61, 69, 71, 60, 59, 68, 67, 72, 69, 73, 68, 66, 67, 56, 56 98 | 1, 73, 80, 82, 84, 71, 71, 77, 75, 61, 58, 69, 72, 63, 62, 56, 54, 58, 52, 70, 69, 78, 76, 72, 76, 58, 63, 62, 62, 58, 57, 74, 77, 57, 62, 60, 53, 68, 69, 55, 49, 63, 63, 56, 48 99 | 1, 71, 67, 77, 74, 67, 61, 75, 71, 74, 69, 73, 73, 73, 66, 62, 64, 75, 71, 71, 65, 78, 68, 73, 70, 61, 59, 68, 67, 69, 66, 71, 70, 64, 64, 66, 68, 70, 68, 66, 51, 61, 43, 44, 37 100 | 1, 73, 70, 77, 79, 61, 59, 72, 66, 65, 66, 74, 79, 64, 59, 53, 54, 70, 69, 81, 80, 75, 74, 73, 62, 66, 63, 63, 70, 63, 60, 71, 65, 56, 49, 68, 62, 67, 70, 53, 62, 54, 43, 55, 37 101 | 1, 63, 63, 72, 75, 60, 61, 62, 63, 61, 63, 76, 75, 72, 63, 55, 56, 61, 69, 60, 63, 74, 78, 72, 73, 55, 54, 62, 68, 63, 64, 77, 77, 64, 62, 59, 65, 63, 67, 72, 78, 68, 68, 82, 66 102 | 1, 75, 67, 74, 75, 75, 69, 72, 72, 67, 66, 73, 70, 76, 73, 73, 69, 72, 76, 75, 67, 74, 75, 76, 71, 74, 68, 80, 78, 71, 67, 73, 68, 60, 58, 68, 68, 66, 61, 79, 71, 73, 65, 58, 53 103 | 1, 64, 60, 55, 51, 59, 59, 81, 79, 66, 59, 62, 61, 67, 61, 67, 61, 78, 73, 64, 61, 80, 67, 78, 73, 53, 44, 62, 53, 65, 61, 68, 64, 55, 60, 66, 68, 75, 70, 73, 77, 71, 67, 62, 62 104 | 1, 74, 77, 80, 77, 69, 64, 79, 76, 70, 68, 77, 78, 71, 69, 58, 55, 70, 65, 67, 65, 77, 77, 64, 61, 48, 45, 61, 54, 66, 65, 75, 78, 61, 69, 65, 58, 71, 71, 55, 60, 28, 39, 36, 35 105 | 1, 69, 66, 67, 67, 75, 78, 78, 69, 60, 62, 68, 73, 60, 66, 69, 75, 64, 67, 67, 60, 72, 67, 60, 63, 65, 64, 70, 64, 62, 63, 77, 72, 69, 58, 64, 64, 70, 54, 62, 47, 70, 46, 56, 46 106 | 1, 75, 79, 65, 74, 63, 64, 74, 73, 73, 71, 76, 79, 70, 69, 55, 64, 69, 71, 79, 76, 77, 78, 65, 70, 60, 60, 65, 61, 70, 65, 74, 71, 62, 62, 69, 67, 72, 72, 72, 66, 61, 64, 55, 54 107 | 1, 69, 65, 72, 68, 70, 71, 76, 78, 64, 62, 72, 68, 76, 78, 68, 73, 68, 72, 59, 53, 66, 66, 67, 75, 65, 67, 64, 55, 71, 72, 78, 75, 62, 61, 67, 66, 66, 64, 79, 75, 73, 75, 63, 62 108 | 1, 70, 69, 72, 70, 72, 76, 78, 72, 62, 57, 68, 73, 64, 65, 67, 60, 73, 67, 63, 55, 77, 74, 62, 60, 56, 57, 60, 60, 61, 61, 75, 76, 59, 63, 67, 63, 74, 66, 76, 77, 74, 73, 65, 67 109 | 1, 61, 66, 70, 74, 59, 64, 72, 73, 64, 65, 72, 72, 70, 72, 64, 62, 72, 74, 65, 69, 75, 75, 74, 76, 65, 64, 74, 73, 65, 70, 67, 72, 53, 56, 65, 68, 66, 68, 75, 80, 71, 75, 61, 64 110 | 1, 70, 60, 75, 78, 69, 69, 68, 71, 68, 59, 76, 69, 73, 71, 67, 65, 66, 63, 75, 65, 75, 72, 77, 79, 75, 75, 70, 64, 73, 75, 76, 74, 63, 61, 64, 63, 66, 64, 72, 75, 73, 72, 64, 61 111 | 1, 76, 75, 75, 77, 75, 72, 75, 75, 68, 75, 72, 71, 62, 65, 59, 64, 65, 67, 77, 81, 76, 77, 68, 72, 66, 63, 65, 68, 69, 65, 75, 76, 58, 63, 72, 75, 65, 70, 73, 71, 64, 63, 50, 50 112 | 1, 75, 67, 73, 75, 60, 58, 69, 71, 65, 61, 74, 78, 67, 64, 59, 57, 68, 68, 60, 61, 74, 72, 64, 66, 51, 51, 58, 53, 69, 63, 74, 76, 57, 60, 59, 64, 55, 60, 61, 59, 45, 56, 43, 50 113 | 1, 56, 68, 58, 67, 52, 61, 63, 76, 44, 61, 54, 68, 54, 70, 49, 70, 46, 69, 41, 59, 53, 70, 53, 67, 48, 57, 52, 68, 58, 68, 66, 75, 55, 60, 57, 68, 58, 71, 63, 71, 52, 64, 52, 54 114 | 1, 63, 70, 64, 72, 56, 64, 58, 69, 68, 70, 68, 78, 75, 64, 67, 67, 68, 72, 67, 67, 78, 75, 68, 66, 65, 62, 68, 67, 64, 68, 74, 75, 58, 58, 66, 69, 59, 58, 53, 64, 59, 54, 43, 49 115 | 1, 65, 60, 71, 72, 67, 72, 68, 72, 54, 55, 75, 70, 75, 75, 75, 70, 69, 68, 61, 62, 74, 71, 74, 79, 72, 76, 62, 61, 71, 68, 76, 75, 63, 60, 65, 70, 49, 48, 73, 68, 75, 74, 66, 67 116 | 1, 68, 66, 70, 70, 62, 67, 73, 74, 69, 70, 70, 75, 69, 70, 65, 68, 70, 67, 64, 64, 74, 75, 68, 68, 66, 66, 64, 56, 71, 68, 69, 75, 63, 64, 62, 62, 74, 68, 81, 75, 74, 70, 65, 58 117 | 1, 65, 62, 69, 62, 74, 72, 73, 69, 68, 59, 74, 67, 71, 69, 71, 70, 71, 67, 70, 66, 78, 77, 76, 79, 74, 77, 70, 74, 67, 72, 67, 67, 61, 58, 66, 64, 58, 47, 73, 67, 73, 66, 58, 52 118 | 1, 52, 49, 74, 72, 72, 76, 77, 77, 67, 66, 66, 64, 75, 70, 74, 77, 72, 73, 82, 80, 78, 78, 73, 70, 79, 75, 73, 79, 79, 78, 74, 71, 63, 63, 71, 73, 50, 58, 66, 68, 66, 58, 37, 38 119 | 1, 65, 77, 64, 65, 56, 62, 61, 69, 71, 74, 70, 74, 63, 64, 57, 64, 66, 68, 66, 75, 65, 74, 63, 65, 54, 59, 64, 68, 65, 74, 72, 78, 64, 67, 69, 71, 65, 70, 59, 68, 56, 63, 50, 51 120 | 1, 61, 58, 66, 74, 68, 68, 72, 71, 40, 42, 52, 54, 70, 75, 63, 67, 54, 59, 67, 65, 75, 78, 71, 79, 69, 75, 72, 69, 67, 69, 63, 69, 52, 58, 64, 65, 59, 59, 75, 76, 67, 69, 58, 63 121 | 1, 67, 59, 60, 65, 69, 69, 73, 70, 66, 63, 70, 70, 79, 76, 73, 70, 71, 73, 73, 68, 74, 75, 80, 74, 73, 71, 67, 64, 71, 70, 72, 70, 63, 64, 70, 71, 67, 61, 66, 69, 70, 74, 66, 66 122 | 1, 64, 55, 65, 57, 64, 63, 75, 76, 59, 55, 70, 59, 73, 69, 71, 70, 75, 72, 57, 52, 70, 56, 76, 67, 64, 60, 69, 60, 64, 63, 69, 66, 62, 62, 67, 70, 65, 60, 79, 77, 77, 75, 63, 60 123 | 1, 66, 65, 69, 68, 75, 63, 77, 77, 68, 68, 69, 68, 69, 67, 71, 65, 70, 69, 70, 63, 77, 71, 63, 63, 65, 56, 66, 65, 72, 70, 78, 74, 64, 63, 70, 71, 73, 69, 77, 70, 70, 62, 57, 52 124 | 1, 61, 57, 71, 71, 73, 70, 76, 74, 66, 63, 76, 79, 65, 66, 71, 71, 74, 70, 71, 67, 74, 80, 64, 68, 65, 62, 68, 67, 64, 67, 74, 75, 63, 64, 68, 68, 76, 72, 72, 70, 77, 78, 67, 65 125 | 1, 67, 65, 73, 78, 60, 57, 66, 62, 63, 63, 74, 74, 72, 66, 56, 54, 65, 62, 67, 69, 79, 81, 72, 72, 55, 55, 51, 57, 65, 66, 72, 74, 64, 64, 64, 60, 74, 73, 69, 73, 73, 66, 62, 58 126 | 1, 71, 71, 71, 72, 77, 72, 73, 65, 69, 65, 81, 79, 68, 72, 67, 71, 70, 70, 64, 61, 72, 67, 56, 73, 67, 75, 62, 58, 58, 58, 73, 69, 66, 61, 55, 56, 52, 53, 65, 58, 71, 76, 68, 70 127 | 1, 68, 49, 62, 59, 67, 64, 68, 67, 71, 62, 73, 63, 64, 62, 61, 56, 74, 75, 70, 69, 76, 75, 66, 64, 62, 64, 63, 67, 65, 66, 70, 67, 61, 57, 66, 68, 72, 64, 69, 57, 68, 66, 59, 59 128 | 1, 74, 76, 72, 74, 70, 71, 73, 77, 70, 73, 69, 73, 74, 75, 62, 68, 75, 73, 69, 71, 73, 74, 72, 73, 67, 62, 73, 69, 73, 75, 75, 76, 60, 62, 69, 72, 62, 67, 71, 75, 61, 62, 49, 51 129 | 1, 67, 68, 70, 72, 70, 72, 70, 76, 68, 71, 74, 70, 75, 76, 71, 75, 77, 78, 69, 72, 82, 74, 69, 75, 70, 71, 70, 69, 67, 66, 68, 63, 57, 61, 65, 64, 51, 52, 76, 76, 73, 74, 55, 56 130 | 1, 70, 76, 62, 67, 74, 72, 80, 76, 55, 59, 62, 64, 64, 58, 73, 70, 74, 71, 72, 68, 73, 69, 72, 63, 69, 63, 60, 57, 47, 52, 67, 64, 66, 62, 73, 69, 71, 70, 60, 62, 67, 67, 60, 56 131 | 1, 58, 74, 69, 74, 45, 44, 56, 49, 57, 62, 66, 69, 65, 59, 37, 41, 37, 43, 64, 66, 78, 75, 66, 59, 57, 57, 65, 67, 46, 42, 72, 68, 68, 69, 46, 43, 69, 73, 47, 52, 39, 47, 46, 50 132 | 1, 65, 77, 72, 73, 57, 60, 59, 68, 65, 70, 72, 73, 61, 71, 51, 57, 60, 63, 69, 68, 75, 80, 70, 70, 58, 61, 64, 69, 65, 72, 71, 74, 60, 67, 63, 63, 50, 59, 45, 66, 44, 52, 40, 44 133 | 1, 57, 47, 64, 71, 63, 69, 64, 71, 61, 60, 67, 65, 69, 69, 65, 68, 73, 68, 71, 65, 81, 69, 78, 73, 74, 73, 74, 62, 64, 70, 76, 77, 65, 62, 75, 74, 58, 57, 66, 68, 68, 72, 55, 56 134 | 1, 42, 51, 72, 56, 72, 67, 58, 54, 56, 56, 65, 68, 55, 58, 57, 62, 69, 75, 49, 56, 47, 61, 43, 44, 38, 47, 60, 68, 42, 45, 67, 62, 47, 48, 63, 64, 58, 72, 51, 54, 60, 55, 39, 45 135 | 1, 73, 62, 69, 70, 73, 67, 76, 77, 72, 66, 75, 73, 78, 69, 73, 61, 66, 58, 74, 64, 75, 73, 76, 66, 70, 59, 63, 58, 67, 66, 76, 71, 66, 65, 65, 66, 71, 64, 70, 61, 72, 67, 58, 59 136 | 1, 61, 66, 70, 75, 60, 60, 74, 75, 64, 67, 68, 75, 65, 64, 58, 57, 68, 70, 62, 68, 66, 75, 60, 65, 55, 51, 61, 67, 61, 64, 72, 78, 62, 69, 66, 70, 66, 73, 50, 59, 48, 55, 47, 45 137 | 1, 23, 60, 54, 35, 43, 64, 32, 46, 29, 28, 72, 72, 63, 64, 47, 44, 36, 33, 56, 52, 72, 74, 63, 60, 53, 56, 57, 59, 28, 25, 59, 67, 59, 64, 40, 28, 57, 56, 39, 39, 76, 60, 62, 53 138 | 1, 59, 57, 70, 72, 62, 44, 76, 72, 53, 56, 69, 68, 68, 66, 55, 51, 67, 69, 59, 55, 76, 69, 60, 58, 56, 54, 66, 53, 51, 38, 70, 67, 71, 65, 65, 60, 66, 71, 68, 46, 76, 51, 66, 61 139 | 1, 72, 73, 62, 66, 66, 64, 70, 75, 62, 67, 72, 74, 70, 70, 69, 62, 69, 69, 73, 70, 67, 64, 63, 53, 47, 35, 70, 71, 66, 67, 70, 73, 57, 57, 68, 68, 61, 60, 70, 61, 66, 53, 50, 46 140 | 1, 68, 60, 63, 60, 45, 36, 72, 55, 50, 56, 68, 56, 32, 51, 27, 8, 66, 50, 50, 77, 76, 48, 51, 61, 18, 32, 67, 26, 39, 44, 67, 64, 44, 55, 50, 28, 60, 60, 63, 59, 13, 9, 13, 11 141 | 1, 62, 63, 66, 62, 67, 66, 80, 79, 55, 55, 61, 58, 52, 62, 49, 48, 78, 83, 59, 68, 73, 66, 59, 58, 42, 49, 67, 86, 59, 52, 72, 74, 58, 63, 70, 70, 76, 66, 67, 58, 54, 65, 46, 42 142 | 1, 37, 23, 70, 67, 56, 49, 26, 20, 36, 32, 65, 62, 73, 72, 60, 52, 37, 21, 61, 58, 75, 72, 75, 71, 75, 76, 68, 59, 22, 15, 76, 72, 64, 61, 41, 31, 51, 45, 21, 22, 75, 78, 56, 49 143 | 1, 75, 67, 79, 72, 64, 58, 72, 68, 60, 62, 66, 69, 68, 74, 58, 54, 63, 58, 63, 61, 74, 70, 63, 70, 46, 43, 64, 51, 71, 65, 73, 77, 67, 68, 67, 59, 70, 65, 73, 66, 60, 67, 55, 58 144 | 1, 65, 62, 68, 74, 57, 56, 62, 60, 65, 63, 74, 71, 69, 67, 56, 59, 66, 63, 76, 75, 79, 77, 78, 77, 61, 53, 66, 69, 59, 62, 76, 76, 62, 64, 63, 61, 75, 74, 67, 69, 66, 68, 50, 44 145 | 1, 72, 64, 69, 75, 67, 59, 79, 68, 68, 56, 72, 76, 64, 61, 59, 59, 69, 69, 70, 61, 73, 74, 69, 73, 62, 46, 67, 65, 52, 36, 76, 73, 58, 55, 59, 57, 72, 63, 65, 48, 56, 42, 35, 31 146 | 1, 69, 65, 70, 74, 64, 71, 70, 74, 66, 67, 71, 75, 65, 69, 63, 66, 70, 75, 68, 70, 76, 82, 67, 69, 66, 64, 69, 71, 68, 69, 73, 72, 59, 67, 65, 66, 65, 68, 68, 76, 67, 75, 63, 61 147 | 1, 62, 54, 46, 44, 72, 66, 56, 67, 56, 56, 67, 62, 60, 59, 62, 63, 75, 69, 69, 69, 76, 77, 69, 68, 64, 64, 69, 68, 38, 40, 58, 64, 53, 63, 59, 57, 66, 77, 47, 48, 35, 44, 35, 43 148 | 1, 47, 50, 64, 71, 71, 71, 53, 79, 39, 39, 55, 62, 61, 66, 75, 64, 54, 50, 62, 59, 67, 64, 75, 73, 75, 74, 68, 64, 37, 40, 67, 75, 65, 69, 56, 53, 43, 36, 41, 43, 73, 74, 59, 70 149 | 1, 64, 69, 72, 82, 36, 43, 72, 73, 57, 63, 80, 82, 56, 63, 35, 33, 70, 75, 60, 67, 70, 78, 51, 61, 24, 17, 61, 61, 63, 67, 69, 74, 57, 61, 68, 71, 59, 73, 48, 74, 33, 38, 13, 9 150 | 1, 69, 69, 73, 72, 66, 63, 76, 72, 69, 66, 69, 79, 72, 74, 58, 62, 73, 70, 69, 71, 78, 76, 71, 76, 65, 63, 66, 70, 60, 63, 74, 75, 62, 64, 66, 68, 69, 72, 73, 69, 71, 71, 57, 62 151 | 1, 55, 62, 64, 62, 64, 74, 71, 67, 63, 66, 70, 70, 65, 64, 65, 65, 68, 72, 66, 70, 74, 77, 65, 68, 67, 75, 66, 73, 65, 67, 74, 72, 64, 68, 70, 70, 54, 61, 63, 66, 68, 78, 54, 61 152 | 1, 64, 51, 64, 54, 70, 71, 70, 72, 64, 52, 72, 59, 70, 67, 70, 68, 76, 70, 60, 49, 71, 64, 73, 64, 76, 71, 73, 64, 68, 63, 71, 62, 56, 56, 71, 70, 57, 53, 72, 70, 67, 66, 56, 52 153 | 1, 54, 52, 72, 69, 73, 56, 69, 67, 67, 61, 70, 71, 72, 62, 70, 60, 69, 70, 73, 71, 79, 72, 78, 66, 72, 67, 63, 58, 73, 70, 70, 72, 61, 60, 67, 72, 67, 63, 76, 66, 78, 63, 63, 59 154 | 1, 65, 57, 58, 51, 70, 63, 71, 76, 58, 58, 63, 58, 69, 62, 77, 68, 72, 74, 69, 61, 72, 63, 77, 63, 76, 67, 67, 66, 67, 63, 61, 54, 56, 50, 63, 65, 59, 55, 75, 71, 73, 70, 60, 58 155 | 1, 69, 75, 65, 67, 59, 60, 77, 76, 70, 68, 76, 71, 75, 68, 66, 60, 76, 70, 69, 70, 75, 78, 72, 68, 61, 63, 68, 70, 67, 65, 70, 69, 55, 61, 66, 64, 69, 66, 68, 65, 67, 50, 53, 41 156 | 1, 73, 73, 75, 79, 64, 66, 68, 61, 71, 68, 77, 75, 63, 73, 62, 55, 70, 64, 77, 75, 75, 79, 70, 75, 65, 59, 68, 56, 63, 67, 74, 73, 60, 60, 62, 60, 73, 77, 70, 72, 73, 67, 64, 61 157 | 1, 68, 58, 76, 71, 64, 70, 73, 75, 61, 58, 68, 64, 69, 71, 66, 73, 75, 69, 78, 74, 81, 78, 73, 74, 72, 80, 69, 69, 67, 67, 74, 74, 58, 59, 69, 70, 58, 53, 70, 67, 66, 78, 53, 64 158 | 1, 32, 41, 76, 34, 65, 53, 30, 54, 16, 51, 61, 43, 74, 70, 62, 21, 34, 42, 61, 37, 58, 66, 54, 49, 17, 19, 11, 42, 53, 30, 71, 9, 61, 16, 31, 43, 67, 61, 29, 31, 17, 8, 18, 11 159 | 1, 76, 65, 60, 40, 32, 34, 65, 50, 53, 37, 66, 53, 33, 31, 30, 30, 69, 75, 64, 45, 68, 65, 57, 43, 23, 23, 53, 77, 48, 32, 55, 32, 48, 23, 62, 51, 65, 59, 43, 39, 35, 30, 24, 21 160 | 1, 60, 51, 75, 60, 65, 45, 64, 55, 55, 61, 66, 74, 61, 50, 62, 41, 70, 63, 60, 62, 76, 69, 70, 54, 51, 47, 77, 80, 69, 48, 74, 59, 72, 57, 76, 68, 69, 63, 62, 53, 57, 31, 46, 30 161 | 1, 64, 60, 71, 69, 71, 65, 66, 64, 68, 59, 63, 67, 68, 64, 73, 59, 73, 60, 72, 56, 77, 68, 69, 69, 66, 59, 57, 40, 55, 53, 69, 63, 71, 63, 66, 55, 66, 58, 65, 65, 75, 64, 61, 56 162 | 1, 65, 69, 66, 76, 58, 67, 65, 72, 66, 64, 77, 75, 64, 62, 63, 59, 71, 61, 67, 45, 74, 45, 66, 46, 64, 48, 62, 27, 65, 67, 72, 72, 62, 66, 71, 64, 71, 70, 72, 69, 70, 65, 63, 61 163 | 1, 71, 76, 74, 79, 71, 69, 77, 75, 64, 64, 75, 78, 69, 70, 59, 52, 71, 62, 47, 50, 68, 65, 67, 62, 56, 48, 58, 50, 65, 63, 75, 75, 64, 62, 60, 56, 64, 63, 61, 65, 64, 58, 51, 38 164 | 1, 55, 66, 58, 75, 71, 77, 68, 73, 63, 69, 77, 78, 60, 69, 59, 60, 69, 69, 67, 70, 72, 80, 67, 72, 53, 60, 70, 58, 46, 67, 68, 84, 69, 79, 70, 74, 62, 71, 67, 66, 63, 61, 53, 60 165 | 1, 76, 77, 69, 70, 64, 69, 76, 80, 50, 56, 70, 74, 61, 55, 54, 59, 65, 65, 53, 72, 76, 73, 51, 47, 43, 46, 66, 80, 73, 73, 71, 65, 60, 53, 69, 70, 54, 62, 64, 66, 51, 42, 28, 22 166 | 1, 70, 72, 65, 64, 71, 69, 75, 76, 65, 68, 69, 79, 65, 74, 62, 67, 73, 73, 53, 51, 72, 69, 74, 68, 49, 44, 52, 48, 65, 68, 64, 72, 57, 58, 66, 69, 64, 69, 76, 73, 66, 69, 50, 53 167 | 1, 64, 72, 70, 74, 63, 70, 73, 74, 61, 69, 65, 75, 61, 71, 65, 67, 73, 69, 72, 71, 74, 81, 69, 69, 65, 65, 78, 75, 67, 71, 66, 74, 54, 60, 64, 68, 64, 68, 69, 71, 65, 65, 56, 58 168 | 1, 76, 59, 82, 76, 80, 56, 74, 67, 67, 58, 77, 71, 56, 68, 60, 64, 66, 66, 66, 66, 82, 79, 40, 45, 49, 48, 75, 70, 64, 35, 71, 60, 39, 28, 71, 66, 73, 61, 71, 49, 53, 45, 29, 15 169 | 1, 54, 53, 73, 68, 77, 65, 65, 72, 60, 50, 69, 64, 73, 75, 74, 76, 69, 72, 66, 60, 74, 67, 68, 69, 69, 78, 56, 67, 69, 61, 76, 71, 67, 64, 73, 70, 55, 49, 70, 61, 73, 70, 61, 61 170 | 1, 68, 59, 77, 69, 77, 64, 75, 71, 64, 53, 67, 63, 66, 74, 74, 62, 67, 65, 70, 61, 73, 66, 78, 75, 72, 67, 67, 53, 72, 64, 71, 77, 66, 60, 73, 73, 70, 58, 70, 59, 77, 71, 70, 63 171 | 1, 64, 63, 62, 59, 60, 61, 70, 74, 68, 63, 66, 68, 64, 66, 67, 66, 72, 68, 63, 59, 75, 72, 67, 62, 63, 55, 66, 56, 65, 64, 70, 71, 61, 63, 67, 63, 69, 69, 77, 65, 74, 62, 60, 54 172 | 1, 40, 73, 61, 74, 61, 67, 56, 75, 64, 71, 75, 76, 63, 61, 56, 67, 70, 73, 69, 60, 74, 63, 65, 73, 57, 63, 66, 69, 60, 66, 72, 71, 57, 64, 64, 69, 67, 68, 59, 66, 55, 62, 51, 60 173 | 0, 70, 72, 70, 70, 65, 69, 70, 65, 69, 72, 77, 78, 68, 71, 63, 70, 69, 71, 68, 74, 75, 74, 69, 65, 71, 68, 63, 64, 66, 68, 73, 75, 67, 67, 69, 65, 66, 71, 69, 65, 78, 75, 66, 63 174 | 0, 66, 64, 64, 66, 67, 72, 72, 77, 65, 66, 64, 64, 57, 61, 70, 66, 74, 78, 73, 72, 77, 75, 60, 58, 58, 61, 63, 60, 59, 60, 65, 65, 58, 58, 69, 73, 76, 75, 73, 75, 72, 72, 62, 62 175 | 0, 68, 70, 69, 74, 65, 70, 72, 73, 71, 68, 73, 70, 68, 74, 63, 65, 65, 63, 70, 67, 74, 70, 69, 72, 62, 63, 63, 61, 66, 66, 74, 80, 70, 72, 69, 67, 60, 57, 69, 62, 66, 75, 50, 50 176 | 0, 64, 58, 70, 78, 66, 66, 74, 72, 66, 63, 72, 74, 72, 65, 59, 58, 64, 67, 63, 61, 75, 74, 67, 58, 60, 53, 61, 58, 62, 61, 76, 72, 64, 65, 62, 64, 77, 71, 74, 72, 74, 73, 70, 59 177 | 0, 58, 63, 80, 71, 76, 70, 70, 71, 64, 63, 74, 78, 77, 75, 62, 61, 62, 56, 71, 52, 82, 71, 84, 85, 71, 71, 57, 47, 42, 39, 70, 70, 50, 70, 50, 46, 58, 60, 76, 73, 82, 77, 65, 66 178 | 0, 61, 68, 62, 70, 76, 79, 71, 71, 73, 77, 75, 77, 68, 73, 72, 72, 71, 68, 72, 75, 81, 80, 72, 73, 61, 67, 62, 61, 66, 68, 72, 71, 67, 67, 69, 69, 66, 71, 67, 66, 74, 71, 58, 58 179 | 0, 73, 80, 78, 78, 75, 73, 78, 75, 70, 66, 77, 77, 67, 71, 60, 63, 71, 74, 77, 75, 74, 76, 61, 67, 60, 60, 64, 63, 62, 58, 72, 77, 59, 58, 65, 70, 68, 69, 64, 64, 63, 63, 56, 51 180 | 0, 56, 56, 63, 66, 76, 76, 68, 73, 62, 54, 65, 62, 70, 65, 74, 72, 65, 64, 64, 53, 64, 56, 63, 61, 73, 64, 66, 60, 66, 74, 76, 75, 65, 61, 71, 73, 60, 53, 61, 73, 67, 68, 59, 56 181 | 0, 73, 74, 65, 66, 69, 69, 67, 81, 65, 62, 69, 65, 67, 68, 70, 67, 72, 68, 66, 66, 78, 61, 67, 70, 67, 63, 68, 66, 70, 70, 69, 70, 66, 66, 66, 69, 72, 70, 74, 76, 75, 72, 67, 63 182 | 0, 59, 58, 69, 74, 71, 73, 70, 68, 57, 55, 64, 68, 76, 75, 67, 66, 66, 63, 72, 67, 77, 75, 80, 75, 73, 69, 65, 61, 71, 75, 71, 77, 65, 66, 66, 66, 61, 56, 74, 71, 72, 69, 62, 60 183 | 0, 74, 69, 75, 70, 70, 74, 77, 77, 65, 67, 73, 72, 69, 73, 68, 66, 69, 68, 67, 63, 78, 74, 71, 63, 66, 61, 68, 63, 74, 69, 74, 75, 65, 61, 66, 67, 63, 61, 71, 68, 66, 65, 54, 57 184 | 0, 72, 61, 64, 66, 64, 59, 68, 66, 76, 66, 77, 75, 71, 72, 72, 62, 72, 68, 77, 78, 77, 81, 67, 67, 69, 68, 65, 68, 69, 64, 72, 73, 56, 56, 69, 64, 67, 71, 69, 68, 65, 73, 56, 52 185 | 0, 75, 73, 72, 77, 68, 67, 76, 73, 67, 65, 76, 78, 66, 74, 67, 62, 70, 69, 66, 64, 77, 74, 75, 73, 67, 69, 73, 69, 68, 68, 72, 74, 61, 61, 70, 67, 72, 71, 79, 75, 77, 75, 67, 71 186 | 0, 59, 62, 72, 74, 66, 66, 74, 76, 63, 67, 72, 76, 71, 74, 66, 64, 70, 69, 63, 66, 70, 72, 70, 76, 65, 69, 61, 66, 64, 65, 67, 72, 57, 63, 65, 71, 67, 69, 77, 78, 77, 76, 70, 70 187 | 0, 64, 66, 68, 71, 62, 64, 74, 73, 63, 67, 66, 74, 70, 74, 59, 64, 75, 73, 70, 66, 79, 81, 79, 78, 61, 62, 76, 72, 67, 67, 71, 75, 65, 62, 70, 69, 68, 65, 75, 72, 62, 64, 57, 54 -------------------------------------------------------------------------------- /data/SPECTFincorrect.test: -------------------------------------------------------------------------------- 1 | 1,59,52,70,67,73,66,72,61,58,52,72,71,70,77,66,65,67,55,61,57,68,66,72,74,63,64,56,54,67,54,76,74,65,67,66,56,62,56,72,62,74,74,64,67 2 | 1,67,68,73,78,65,63,67,60,63,62,71,68,76,73,59,61,62,56,74,73,78,76,79,79,70,70,68,67,65,67,76,75,63,61,61,56,76,75,74,77,76,74,59,68 3 | 1,75,74,71,71,62,58,70,64,71,68,76,68,71,71,58,58,70,69,70,72,75,73,74,72,66,60,63,66,70,64,75,70,64,62,66,62,68,69,69,66,64,58,57,52 4 | 1,83,64,66,67,67,74,74,72,64,68,75,73,78,73,72,57,71,67,73,65,78,73,76,69,63,57,63,53,67,60,77,74,69,64,67,64,69,63,68,54,65,64,43,42 5 | 1,72,66,65,65,64,61,71,78,73,69,68,65,62,65,66,66,72,74,67,61,77,71,68,65,64,60,73,69,70,69,74,72,61,63,69,68,68,63,71,72,65,63,58,60 6 | 1,62,60,69,61,63,63,70,68,70,65,77,56,71,65,69,68,74,78,77,70,80,73,79,75,76,67,74,69,66,71,70,61,54,54,66,66,58,56,72,73,71,64,49,42 7 | 1,68,63,67,67,65,72,74,72,70,71,79,71,72,67,68,69,75,79,67,65,78,69,72,67,64,59,67,65,73,70,80,69,63,61,70,70,70,67,77,71,77,72,68,59 8 | 1,80,76,77,76,67,68,71,76,69,66,76,78,61,71,58,61,61,68,78,72,72,75,61,66,58,62,69,66,55,40,70,71,67,58,57,58,62,65,59,45,53,58,54,55 9 | 1,68,63,62,58,60,57,69,78,59,53,61,58,48,50,52,50,72,70,59,59,71,77,50,49,53,44,76,74,64,66,68,63,52,52,66,67,74,70,77,74,66,60,59,56 10 | 1,77,61,71,69,70,66,57,55,67,67,79,72,79,71,64,54,62,63,39,47,75,76,67,71,63,44,22,25,21,18,72,79,57,58,48,40,41,39,19,16,68,72,56,65 11 | 1,69,68,73,74,62,67,74,73,67,65,70,75,64,68,58,57,66,70,57,63,68,71,68,69,40,38,55,59,67,67,76,78,65,67,61,65,76,79,74,73,64,56,53,45 12 | 1,65,69,70,71,56,63,63,70,44,51,78,74,48,49,49,52,58,60,49,51,80,65,51,48,58,43,64,62,71,70,78,73,71,57,71,73,68,64,62,59,59,64,53,55 13 | 1,65,63,73,75,67,61,76,65,62,62,79,75,74,70,57,52,62,62,62,63,78,72,57,50,39,36,51,51,41,43,64,70,56,54,50,46,66,67,49,43,43,43,41,43 14 | 1,71,73,65,80,62,67,65,77,66,68,72,80,71,74,58,62,67,73,73,73,83,78,66,77,60,59,61,61,53,46,73,75,67,65,62,65,62,66,62,60,61,68,43,56 15 | 1,64,75,52,46,59,54,79,78,61,68,61,71,36,28,59,58,67,74,51,55,57,78,31,32,40,43,66,78,49,49,47,39,31,27,59,75,51,73,60,56,41,21,33,22 16 | 1,62,54,65,65,24,31,79,66,53,54,76,72,47,50,30,25,73,74,62,55,76,78,56,47,27,34,56,78,68,68,66,68,60,60,66,68,55,51,68,71,31,29,27,18 17 | 1,57,43,62,50,43,57,61,44,44,24,53,36,60,69,58,61,30,32,61,63,75,72,62,71,42,44,67,74,29,19,76,77,65,66,41,41,57,46,27,12,41,52,42,49 18 | 1,67,65,61,61,60,62,75,74,68,68,72,75,70,75,63,68,72,75,64,70,76,75,70,70,67,63,66,67,69,66,77,77,64,66,68,69,70,69,75,66,71,70,57,63 19 | 1,62,54,73,68,72,71,76,76,62,52,66,58,73,65,70,70,73,73,59,52,65,59,70,55,72,65,68,70,69,66,69,66,61,51,69,72,60,54,74,68,73,67,56,52 20 | 1,67,59,54,48,63,67,77,78,71,61,57,57,59,50,72,72,77,77,76,73,85,67,58,50,39,33,54,50,57,50,45,41,38,43,76,77,80,69,61,48,63,61,37,36 21 | 1,65,56,67,58,76,79,70,71,59,50,76,61,72,64,69,73,71,68,67,50,75,65,71,62,63,70,66,55,59,52,74,60,59,58,68,63,54,38,57,52,71,74,59,65 22 | 1,71,56,75,74,61,69,73,73,65,63,71,69,70,74,61,64,70,66,70,69,76,81,62,60,39,39,72,72,58,64,71,71,56,55,62,61,70,75,57,63,41,61,34,40 23 | 1,73,59,76,61,67,52,66,46,70,59,76,72,71,75,63,33,68,49,68,49,73,66,70,58,30,14,54,41,54,41,76,66,77,57,62,26,74,57,58,47,40,9,28,19 24 | 1,77,69,77,79,60,59,65,68,57,54,76,76,60,66,39,36,63,65,54,60,75,71,59,63,43,38,64,49,53,42,67,73,62,60,55,52,59,58,55,43,41,37,39,26 25 | 1,66,65,72,74,59,61,67,65,59,58,70,72,71,67,58,52,64,63,73,71,78,59,75,72,54,45,66,64,61,60,73,74,58,57,60,59,74,71,75,74,70,66,63,61 26 | 1,69,80,67,67,62,61,65,67,62,71,77,75,72,77,56,54,65,60,57,63,80,69,71,72,51,39,57,50,64,63,75,70,59,56,60,55,65,68,66,67,67,68,54,54 27 | 1,74,67,69,75,59,57,70,68,70,62,79,76,74,70,64,56,71,73,72,64,81,72,75,66,60,57,68,62,59,38,74,66,71,60,67,59,66,58,70,50,45,31,36,35 28 | 1,66,70,78,75,69,64,70,66,66,69,75,76,66,65,54,52,61,57,68,65,79,69,67,63,51,50,54,43,41,49,71,74,67,67,54,52,76,72,65,69,69,64,58,56 29 | 1,79,58,73,78,67,65,74,71,64,54,76,68,72,69,70,64,69,64,63,53,74,64,73,67,60,57,58,51,65,68,76,75,66,63,66,62,66,58,71,67,71,68,62,60 30 | 1,61,66,64,65,62,66,74,67,60,62,65,64,69,70,70,67,75,73,69,69,76,78,77,80,76,76,69,73,65,73,69,63,53,58,68,65,62,60,73,73,67,63,58,61 31 | 1,63,69,70,72,66,70,66,72,71,67,74,77,70,71,67,69,69,68,75,73,73,77,67,66,62,59,62,58,61,65,74,75,63,67,65,67,71,71,68,70,74,72,56,60 32 | 1,73,67,74,73,79,75,76,77,61,60,70,73,76,77,71,71,65,65,69,64,75,76,78,80,72,69,61,59,71,68,76,79,68,67,71,67,63,59,68,66,74,71,59,57 33 | 1,66,68,67,72,65,71,71,71,60,67,69,78,75,72,68,66,69,68,77,77,81,80,68,69,70,65,66,65,62,66,74,76,59,62,64,63,67,75,70,75,74,76,62,65 34 | 1,55,54,71,74,21,25,60,27,69,64,74,79,64,70,58,38,72,64,63,62,77,75,61,58,42,37,64,54,20,15,66,73,66,67,43,36,77,59,24,35,18,27,29,22 35 | 1,70,68,68,70,56,54,66,67,68,70,75,73,59,59,60,62,75,71,50,45,55,55,61,61,46,49,55,52,66,72,66,65,62,65,68,70,69,69,67,70,56,57,56,52 36 | 1,71,71,77,82,64,63,73,71,66,64,72,79,66,59,57,57,70,63,71,68,78,79,67,65,63,63,70,67,68,70,75,77,60,62,70,67,77,74,71,75,72,67,62,60 37 | 1,57,44,74,68,82,76,78,62,66,67,74,72,71,70,67,69,68,68,69,74,75,71,73,71,69,65,58,63,54,63,68,74,73,76,66,65,63,66,71,71,71,68,66,60 38 | 1,72,71,70,72,63,69,71,73,71,71,79,75,71,71,65,74,68,74,71,71,70,78,62,67,62,60,59,59,69,66,75,75,57,57,66,69,68,67,69,64,58,62,52,54 39 | 1,60,58,74,68,44,48,85,60,56,48,71,70,46,43,57,43,75,60,62,44,69,52,57,42,20,23,58,60,38,41,67,70,64,68,59,47,69,55,65,55,19,47,18,17 40 | 1,33,21,38,54,60,52,41,50,26,29,58,58,76,71,59,68,17,13,75,73,73,78,65,67,62,47,59,57,23,26,73,74,52,58,40,38,49,45,11,13,62,64,46,40 41 | 1,58,70,62,73,34,41,55,54,65,77,73,78,65,65,33,48,57,64,69,67,68,64,61,58,60,59,73,70,45,40,71,74,52,56,59,62,67,75,36,39,22,19,29,24 42 | 1,58,40,57,43,74,57,78,53,68,58,65,54,75,50,59,73,80,77,60,59,61,61,55,56,48,63,75,77,13,7,47,52,54,58,51,31,53,18,17,6,15,69,30,40 43 | 1,77,77,70,71,68,66,75,75,73,72,71,77,66,65,60,58,70,70,71,74,80,79,64,64,60,55,70,68,76,74,75,75,65,65,73,73,71,70,73,73,63,62,52,52 44 | 1,65,67,67,61,55,57,66,74,64,69,61,62,71,71,53,53,64,71,65,66,71,73,65,70,47,39,80,75,67,64,72,66,53,55,63,64,60,61,74,63,59,58,50,49 45 | 1,77,59,76,78,40,34,75,63,65,26,70,28,50,46,25,66,46,52,63,63,68,56,46,47,12,6,28,23,56,48,68,55,63,54,40,20,65,68,56,57,5,10,13,10 46 | 1,64,59,76,72,55,52,63,66,68,63,75,72,70,64,60,57,75,68,62,59,69,73,74,67,49,42,66,51,58,48,75,73,76,75,64,62,73,70,72,51,71,42,61,39 47 | 1,57,63,67,82,69,67,63,70,74,64,71,71,72,73,59,54,65,63,79,62,77,69,70,63,54,50,61,53,59,60,72,74,72,59,64,54,70,65,73,70,64,58,60,57 48 | 1,58,57,74,71,59,60,54,59,33,39,65,74,71,75,53,57,47,60,43,44,75,78,54,57,56,56,57,61,60,62,77,76,59,57,53,60,53,57,61,74,77,82,66,68 49 | 1,61,66,64,74,51,55,64,63,67,67,73,76,69,67,55,53,70,67,65,61,70,66,70,62,43,35,68,65,61,56,70,73,59,62,64,62,67,68,55,61,53,42,37,28 50 | 1,67,80,73,76,74,69,78,81,67,68,72,79,74,77,65,65,64,66,71,74,79,81,68,69,59,63,62,63,67,66,73,73,61,65,65,66,65,72,69,63,70,67,58,56 51 | 1,69,55,75,73,63,64,70,66,61,75,77,75,74,76,63,61,73,75,49,67,72,69,66,74,48,48,53,66,64,68,71,71,60,64,62,68,67,74,65,70,63,64,50,52 52 | 1,77,63,68,70,66,70,80,79,60,57,75,68,63,66,63,69,69,70,36,34,48,47,72,77,62,66,62,62,57,69,73,75,62,63,69,71,56,53,74,76,72,73,64,63 53 | 1,46,47,65,68,41,48,52,45,54,47,74,72,63,63,47,45,31,36,60,65,66,79,57,60,49,52,45,45,31,36,70,71,63,72,34,34,66,78,26,35,60,43,52,51 54 | 1,67,74,73,74,54,63,58,72,59,71,75,82,59,77,38,38,56,70,60,70,70,84,63,67,33,38,57,69,62,65,71,72,54,60,57,61,53,73,58,67,49,56,27,36 55 | 1,73,70,69,75,62,62,67,70,70,76,75,74,73,77,63,58,68,71,64,66,76,74,67,69,56,44,65,65,68,69,72,71,57,61,62,65,62,66,66,62,54,56,44,35 56 | 1,68,77,67,70,64,62,79,80,64,64,76,74,65,64,64,60,62,67,74,75,82,77,75,74,72,73,72,71,67,69,75,73,64,62,63,65,68,70,77,69,72,71,65,57 57 | 1,57,70,65,71,58,69,74,81,67,72,75,78,69,71,65,63,71,75,61,68,72,78,66,72,41,38,48,48,63,68,69,77,62,67,65,69,70,74,77,81,67,69,55,60 58 | 1,47,47,48,69,80,52,52,52,58,46,45,48,42,59,40,38,62,54,63,69,64,63,79,70,33,19,49,46,44,43,49,57,43,75,49,27,36,39,47,57,14,20,21,4 59 | 1,64,75,74,73,57,61,63,70,63,72,75,81,73,77,36,38,63,73,63,65,66,63,74,77,29,28,53,52,64,68,68,73,59,61,64,66,58,69,56,73,37,38,24,18 60 | 1,58,66,63,61,66,68,75,79,61,63,57,62,66,66,59,59,75,74,62,65,78,76,72,72,60,60,64,65,64,70,68,68,59,67,67,66,58,57,58,73,48,59,39,51 61 | 1,73,71,71,68,64,60,72,76,75,70,77,76,67,67,65,59,69,69,70,69,77,73,64,58,56,51,58,57,71,68,75,77,72,68,72,70,72,69,72,64,62,61,53,53 62 | 1,67,66,67,65,74,65,76,70,71,68,70,68,69,65,70,70,72,72,76,71,77,72,64,49,45,35,71,67,67,64,72,66,62,57,74,72,72,69,72,66,76,71,58,45 63 | 1,78,75,69,66,69,71,75,75,67,67,58,50,44,47,63,73,75,77,73,76,36,42,48,43,61,61,71,73,62,64,39,37,28,30,68,71,73,69,72,74,65,68,56,55 64 | 1,70,69,69,67,69,68,72,73,63,71,73,73,69,69,70,65,79,76,54,61,73,70,65,72,56,55,67,71,69,70,70,69,56,62,69,67,68,69,80,77,71,69,52,50 65 | 1,65,65,71,77,70,68,73,72,68,65,78,75,77,65,61,58,71,61,76,77,76,75,65,72,57,43,69,68,67,67,70,66,57,59,66,59,64,61,63,58,63,54,34,27 66 | 1,66,73,75,74,67,67,73,71,72,63,79,78,64,74,66,74,77,73,75,62,79,67,67,72,66,59,73,69,70,73,77,74,62,66,69,66,64,62,78,75,73,63,50,46 67 | 1,59,55,51,65,68,45,21,25,45,41,57,74,68,77,28,25,3,11,54,67,58,75,65,77,33,31,14,17,39,43,65,73,61,71,18,24,44,59,36,47,29,28,52,13 68 | 1,72,69,65,65,66,67,76,78,72,70,77,79,66,67,65,60,71,72,74,67,79,79,72,67,57,51,68,56,68,63,76,77,61,64,68,65,77,76,76,64,71,57,41,39 69 | 1,65,50,74,72,62,59,71,66,67,55,72,73,70,72,61,62,74,73,63,59,79,80,68,67,60,68,64,68,48,40,63,74,56,58,59,59,70,59,62,47,73,68,54,45 70 | 1,63,54,76,69,72,66,69,66,61,53,72,65,72,74,69,65,71,67,59,59,70,70,76,71,62,65,64,59,69,62,77,77,66,65,71,69,59,54,71,62,65,69,54,56 71 | 1,54,52,58,55,62,54,75,74,61,58,66,66,56,50,49,40,74,82,61,47,58,71,27,40,40,19,77,77,55,56,68,68,44,41,69,68,62,56,61,62,45,20,37,11 72 | 1,67,58,59,54,60,65,75,75,63,61,70,67,72,61,64,57,73,66,72,79,78,81,79,76,74,50,69,66,57,47,61,51,54,56,65,66,63,71,68,59,62,47,61,48 73 | 1,60,59,67,58,66,60,72,79,74,75,71,70,72,66,70,65,77,74,67,76,74,81,57,56,42,42,50,59,62,66,70,73,59,62,67,66,71,76,70,69,67,59,60,55 74 | 1,62,80,54,68,66,70,68,69,68,70,63,70,68,58,57,50,68,65,66,70,68,65,65,74,53,61,59,67,68,72,74,72,61,61,67,69,64,72,68,70,61,60,55,63 75 | 1,54,42,57,60,61,44,39,54,12,22,47,52,58,63,51,35,47,31,57,50,69,60,68,60,48,38,37,36,29,22,47,54,72,62,42,18,33,30,23,28,49,40,76,45 76 | 1,65,70,68,71,63,59,75,75,65,63,75,78,72,74,58,59,68,71,75,68,83,81,80,82,71,57,68,67,62,69,72,75,60,61,68,69,73,73,71,77,74,64,61,50 77 | 1,59,75,77,80,60,64,70,67,54,68,78,77,69,64,57,56,59,57,71,70,79,77,67,65,54,54,61,58,61,64,79,74,67,66,60,58,70,72,60,65,61,60,51,52 78 | 1,71,74,71,74,62,53,68,64,69,68,72,74,70,68,57,50,68,69,60,60,81,71,66,53,51,38,78,72,68,68,71,71,60,54,67,67,74,62,66,59,52,38,34,17 79 | 1,72,71,74,73,64,60,68,71,72,69,79,74,67,56,65,60,75,74,72,70,79,79,64,58,63,57,73,70,72,59,76,60,63,50,71,65,68,69,68,63,61,54,49,47 80 | 1,68,64,63,61,80,72,70,69,73,69,80,78,79,76,70,69,67,65,76,73,80,79,74,80,68,63,73,62,67,63,72,75,55,61,58,60,64,61,70,64,71,63,54,50 81 | 1,58,65,78,76,64,58,74,70,63,57,81,72,62,59,41,41,64,57,75,58,75,70,64,66,32,29,66,56,57,63,71,72,61,58,71,62,77,62,72,62,49,35,30,20 82 | 1,60,64,61,74,57,63,67,70,59,65,62,74,58,68,51,41,63,67,60,70,73,85,62,46,31,35,56,79,58,64,70,75,59,58,57,66,62,71,69,61,41,31,24,18 83 | 1,51,43,66,63,54,56,71,75,65,63,69,68,61,65,60,55,65,69,65,66,77,74,65,69,62,55,67,59,61,48,71,66,63,64,60,55,70,71,78,67,72,65,70,65 84 | 1,57,55,56,53,51,44,68,56,68,66,64,58,58,68,66,68,72,70,67,61,70,63,70,62,44,41,63,45,42,61,64,51,68,55,71,69,62,54,57,52,38,27,39,32 85 | 1,68,70,70,69,65,63,71,74,73,70,79,78,77,74,61,60,69,73,70,69,76,73,69,71,62,56,67,63,65,65,67,75,59,60,67,69,69,66,62,64,68,60,56,51 86 | 1,57,29,71,51,65,41,67,45,63,39,75,63,60,67,52,52,65,64,74,63,81,82,72,66,62,65,71,61,51,25,71,72,55,60,60,51,72,60,74,40,69,69,57,58 87 | 1,49,46,59,44,59,26,56,32,69,57,66,75,51,31,32,19,32,62,59,56,80,40,47,35,33,20,57,38,35,25,58,51,59,65,50,14,64,53,37,12,34,18,46,29 88 | 1,75,75,64,63,58,58,75,77,73,74,73,76,69,65,67,68,73,76,79,78,76,74,72,66,60,61,57,58,47,40,61,63,58,47,65,66,59,63,60,57,63,47,42,40 89 | 1,71,66,66,71,50,41,77,60,57,58,68,69,40,61,50,34,69,51,60,60,79,63,40,61,30,14,72,41,38,36,56,65,44,47,56,40,70,63,56,58,20,25,23,16 90 | 1,73,60,68,54,75,63,77,72,60,54,66,69,69,66,66,59,73,59,64,62,76,76,77,68,66,57,80,62,66,60,71,66,61,59,68,61,69,63,79,67,74,73,62,58 91 | 1,67,70,63,48,63,60,76,75,65,52,63,48,64,52,57,62,64,76,65,65,74,62,69,64,54,62,63,78,70,59,63,49,59,53,68,65,76,62,72,61,68,61,54,53 92 | 1,68,73,78,83,70,71,77,74,65,61,75,74,70,69,54,56,61,60,86,79,86,86,82,79,72,58,75,57,65,53,77,75,58,61,64,56,72,68,69,65,65,62,58,58 93 | 1,62,54,68,70,51,28,54,23,54,54,63,65,63,70,23,11,47,31,50,59,68,67,70,75,17,16,49,44,36,19,70,72,62,68,40,29,63,58,48,44,28,10,15,28 94 | 1,75,74,69,73,64,61,71,71,61,58,76,78,70,68,54,52,64,66,73,75,82,82,70,80,55,55,60,70,65,67,76,77,61,62,62,65,70,67,67,68,59,56,50,46 95 | 1,79,77,78,70,69,65,75,75,69,66,61,60,65,59,60,59,73,70,65,69,66,69,55,53,61,56,66,69,75,66,76,71,65,51,72,75,72,73,68,63,41,36,25,27 96 | 1,68,62,64,65,70,69,76,75,63,59,70,59,72,66,69,68,74,74,79,70,83,83,72,69,73,78,80,83,71,70,71,63,54,51,71,70,61,56,77,76,66,67,49,54 97 | 1,68,74,76,84,72,72,85,75,73,70,77,78,70,66,59,58,75,70,57,64,81,76,70,64,48,47,49,54,62,64,72,76,65,62,67,68,70,70,67,58,58,58,51,52 98 | 1,70,69,66,66,66,67,78,80,70,65,75,71,74,72,63,66,74,75,72,71,76,74,78,76,60,52,60,63,63,61,69,71,60,59,68,67,72,69,73,68,66,67,56,56 99 | 1,73,80,82,84,71,71,77,75,61,58,69,72,63,62,56,54,58,52,70,69,78,76,72,76,58,63,62,62,58,57,74,77,57,62,60,53,68,69,55,49,63,63,56,48 100 | 1,71,67,77,74,67,61,75,71,74,69,73,73,73,66,62,64,75,71,71,65,78,68,73,70,61,59,68,67,69,66,71,70,64,64,66,68,70,68,66,51,61,43,44,37 101 | 1,73,70,77,79,61,59,72,66,65,66,74,79,64,59,53,54,70,69,81,80,75,74,73,62,66,63,63,70,63,60,71,65,56,49,68,62,67,70,53,62,54,43,55,37 102 | 1,63,63,72,75,60,61,62,63,61,63,76,75,72,63,55,56,61,69,60,63,74,78,72,73,55,54,62,68,63,64,77,77,64,62,59,65,63,67,72,78,68,68,82,66 103 | 1,75,67,74,75,75,69,72,72,67,66,73,70,76,73,73,69,72,76,75,67,74,75,76,71,74,68,80,78,71,67,73,68,60,58,68,68,66,61,79,71,73,65,58,53 104 | 1,64,60,55,51,59,59,81,79,66,59,62,61,67,61,67,61,78,73,64,61,80,67,78,73,53,44,62,53,65,61,68,64,55,60,66,68,75,70,73,77,71,67,62,62 105 | 1,74,77,80,77,69,64,79,76,70,68,77,78,71,69,58,55,70,65,67,65,77,77,64,61,48,45,61,54,66,65,75,78,61,69,65,58,71,71,55,60,28,39,36,35 106 | 1,69,66,67,67,75,78,78,69,60,62,68,73,60,66,69,75,64,67,67,60,72,67,60,63,65,64,70,64,62,63,77,72,69,58,64,64,70,54,62,47,70,46,56,46 107 | 1,75,79,65,74,63,64,74,73,73,71,76,79,70,69,55,64,69,71,79,76,77,78,65,70,60,60,65,61,70,65,74,71,62,62,69,67,72,72,72,66,61,64,55,54 108 | 1,69,65,72,68,70,71,76,78,64,62,72,68,76,78,68,73,68,72,59,53,66,66,67,75,65,67,64,55,71,72,78,75,62,61,67,66,66,64,79,75,73,75,63,62 109 | 1,70,69,72,70,72,76,78,72,62,57,68,73,64,65,67,60,73,67,63,55,77,74,62,60,56,57,60,60,61,61,75,76,59,63,67,63,74,66,76,77,74,73,65,67 110 | 1,61,66,70,74,59,64,72,73,64,65,72,72,70,72,64,62,72,74,65,69,75,75,74,76,65,64,74,73,65,70,67,72,53,56,65,68,66,68,75,80,71,75,61,64 111 | 1,70,60,75,78,69,69,68,71,68,59,76,69,73,71,67,65,66,63,75,65,75,72,77,79,75,75,70,64,73,75,76,74,63,61,64,63,66,64,72,75,73,72,64,61 112 | 1,76,75,75,77,75,72,75,75,68,75,72,71,62,65,59,64,65,67,77,81,76,77,68,72,66,63,65,68,69,65,75,76,58,63,72,75,65,70,73,71,64,63,50,50 113 | 1,75,67,73,75,60,58,69,71,65,61,74,78,67,64,59,57,68,68,60,61,74,72,64,66,51,51,58,53,69,63,74,76,57,60,59,64,55,60,61,59,45,56,43,50 114 | 1,56,68,58,67,52,61,63,76,44,61,54,68,54,70,49,70,46,69,41,59,53,70,53,67,48,57,52,68,58,68,66,75,55,60,57,68,58,71,63,71,52,64,52,54 115 | 1,63,70,64,72,56,64,58,69,68,70,68,78,75,64,67,67,68,72,67,67,78,75,68,66,65,62,68,67,64,68,74,75,58,58,66,69,59,58,53,64,59,54,43,49 116 | 1,65,60,71,72,67,72,68,72,54,55,75,70,75,75,75,70,69,68,61,62,74,71,74,79,72,76,62,61,71,68,76,75,63,60,65,70,49,48,73,68,75,74,66,67 117 | 1,68,66,70,70,62,67,73,74,69,70,70,75,69,70,65,68,70,67,64,64,74,75,68,68,66,66,64,56,71,68,69,75,63,64,62,62,74,68,81,75,74,70,65,58 118 | 1,65,62,69,62,74,72,73,69,68,59,74,67,71,69,71,70,71,67,70,66,78,77,76,79,74,77,70,74,67,72,67,67,61,58,66,64,58,47,73,67,73,66,58,52 119 | 1,52,49,74,72,72,76,77,77,67,66,66,64,75,70,74,77,72,73,82,80,78,78,73,70,79,75,73,79,79,78,74,71,63,63,71,73,50,58,66,68,66,58,37,38 120 | 1,65,77,64,65,56,62,61,69,71,74,70,74,63,64,57,64,66,68,66,75,65,74,63,65,54,59,64,68,65,74,72,78,64,67,69,71,65,70,59,68,56,63,50,51 121 | 1,61,58,66,74,68,68,72,71,40,42,52,54,70,75,63,67,54,59,67,65,75,78,71,79,69,75,72,69,67,69,63,69,52,58,64,65,59,59,75,76,67,69,58,63 122 | 1,67,59,60,65,69,69,73,70,66,63,70,70,79,76,73,70,71,73,73,68,74,75,80,74,73,71,67,64,71,70,72,70,63,64,70,71,67,61,66,69,70,74,66,66 123 | 1,64,55,65,57,64,63,75,76,59,55,70,59,73,69,71,70,75,72,57,52,70,56,76,67,64,60,69,60,64,63,69,66,62,62,67,70,65,60,79,77,77,75,63,60 124 | 1,66,65,69,68,75,63,77,77,68,68,69,68,69,67,71,65,70,69,70,63,77,71,63,63,65,56,66,65,72,70,78,74,64,63,70,71,73,69,77,70,70,62,57,52 125 | 1,61,57,71,71,73,70,76,74,66,63,76,79,65,66,71,71,74,70,71,67,74,80,64,68,65,62,68,67,64,67,74,75,63,64,68,68,76,72,72,70,77,78,67,65 126 | 1,67,65,73,78,60,57,66,62,63,63,74,74,72,66,56,54,65,62,67,69,79,81,72,72,55,55,51,57,65,66,72,74,64,64,64,60,74,73,69,73,73,66,62,58 127 | 1,71,71,71,72,77,72,73,65,69,65,81,79,68,72,67,71,70,70,64,61,72,67,56,73,67,75,62,58,58,58,73,69,66,61,55,56,52,53,65,58,71,76,68,70 128 | 1,68,49,62,59,67,64,68,67,71,62,73,63,64,62,61,56,74,75,70,69,76,75,66,64,62,64,63,67,65,66,70,67,61,57,66,68,72,64,69,57,68,66,59,59 129 | 1,74,76,72,74,70,71,73,77,70,73,69,73,74,75,62,68,75,73,69,71,73,74,72,73,67,62,73,69,73,75,75,76,60,62,69,72,62,67,71,75,61,62,49,51 130 | 1,67,68,70,72,70,72,70,76,68,71,74,70,75,76,71,75,77,78,69,72,82,74,69,75,70,71,70,69,67,66,68,63,57,61,65,64,51,52,76,76,73,74,55,56 131 | 1,70,76,62,67,74,72,80,76,55,59,62,64,64,58,73,70,74,71,72,68,73,69,72,63,69,63,60,57,47,52,67,64,66,62,73,69,71,70,60,62,67,67,60,56 132 | 1,58,74,69,74,45,44,56,49,57,62,66,69,65,59,37,41,37,43,64,66,78,75,66,59,57,57,65,67,46,42,72,68,68,69,46,43,69,73,47,52,39,47,46,50 133 | 1,65,77,72,73,57,60,59,68,65,70,72,73,61,71,51,57,60,63,69,68,75,80,70,70,58,61,64,69,65,72,71,74,60,67,63,63,50,59,45,66,44,52,40,44 134 | 1,57,47,64,71,63,69,64,71,61,60,67,65,69,69,65,68,73,68,71,65,81,69,78,73,74,73,74,62,64,70,76,77,65,62,75,74,58,57,66,68,68,72,55,56 135 | 1,42,51,72,56,72,67,58,54,56,56,65,68,55,58,57,62,69,75,49,56,47,61,43,44,38,47,60,68,42,45,67,62,47,48,63,64,58,72,51,54,60,55,39,45 136 | 1,73,62,69,70,73,67,76,77,72,66,75,73,78,69,73,61,66,58,74,64,75,73,76,66,70,59,63,58,67,66,76,71,66,65,65,66,71,64,70,61,72,67,58,59 137 | 1,61,66,70,75,60,60,74,75,64,67,68,75,65,64,58,57,68,70,62,68,66,75,60,65,55,51,61,67,61,64,72,78,62,69,66,70,66,73,50,59,48,55,47,45 138 | 1,23,60,54,35,43,64,32,46,29,28,72,72,63,64,47,44,36,33,56,52,72,74,63,60,53,56,57,59,28,25,59,67,59,64,40,28,57,56,39,39,76,60,62,53 139 | 1,59,57,70,72,62,44,76,72,53,56,69,68,68,66,55,51,67,69,59,55,76,69,60,58,56,54,66,53,51,38,70,67,71,65,65,60,66,71,68,46,76,51,66,61 140 | 1,72,73,62,66,66,64,70,75,62,67,72,74,70,70,69,62,69,69,73,70,67,64,63,53,47,35,70,71,66,67,70,73,57,57,68,68,61,60,70,61,66,53,50,46 141 | 1,68,60,63,60,45,36,72,55,50,56,68,56,32,51,27,8,66,50,50,77,76,48,51,61,18,32,67,26,39,44,67,64,44,55,50,28,60,60,63,59,13,9,13,11 142 | 1,62,63,66,62,67,66,80,79,55,55,61,58,52,62,49,48,78,83,59,68,73,66,59,58,42,49,67,86,59,52,72,74,58,63,70,70,76,66,67,58,54,65,46,42 143 | 1,37,23,70,67,56,49,26,20,36,32,65,62,73,72,60,52,37,21,61,58,75,72,75,71,75,76,68,59,22,15,76,72,64,61,41,31,51,45,21,22,75,78,56,49 144 | 1,75,67,79,72,64,58,72,68,60,62,66,69,68,74,58,54,63,58,63,61,74,70,63,70,46,43,64,51,71,65,73,77,67,68,67,59,70,65,73,66,60,67,55,58 145 | 1,65,62,68,74,57,56,62,60,65,63,74,71,69,67,56,59,66,63,76,75,79,77,78,77,61,53,66,69,59,62,76,76,62,64,63,61,75,74,67,69,66,68,50,44 146 | 1,72,64,69,75,67,59,79,68,68,56,72,76,64,61,59,59,69,69,70,61,73,74,69,73,62,46,67,65,52,36,76,73,58,55,59,57,72,63,65,48,56,42,35,31 147 | 1,69,65,70,74,64,71,70,74,66,67,71,75,65,69,63,66,70,75,68,70,76,82,67,69,66,64,69,71,68,69,73,72,59,67,65,66,65,68,68,76,67,75,63,61 148 | 1,62,54,46,44,72,66,56,67,56,56,67,62,60,59,62,63,75,69,69,69,76,77,69,68,64,64,69,68,38,40,58,64,53,63,59,57,66,77,47,48,35,44,35,43 149 | 1,47,50,64,71,71,71,53,79,39,39,55,62,61,66,75,64,54,50,62,59,67,64,75,73,75,74,68,64,37,40,67,75,65,69,56,53,43,36,41,43,73,74,59,70 150 | 1,64,69,72,82,36,43,72,73,57,63,80,82,56,63,35,33,70,75,60,67,70,78,51,61,24,17,61,61,63,67,69,74,57,61,68,71,59,73,48,74,33,38,13,9 151 | 1,69,69,73,72,66,63,76,72,69,66,69,79,72,74,58,62,73,70,69,71,78,76,71,76,65,63,66,70,60,63,74,75,62,64,66,68,69,72,73,69,71,71,57,62 152 | 1,55,62,64,62,64,74,71,67,63,66,70,70,65,64,65,65,68,72,66,70,74,77,65,68,67,75,66,73,65,67,74,72,64,68,70,70,54,61,63,66,68,78,54,61 153 | 1,64,51,64,54,70,71,70,72,64,52,72,59,70,67,70,68,76,70,60,49,71,64,73,64,76,71,73,64,68,63,71,62,56,56,71,70,57,53,72,70,67,66,56,52 154 | 1,54,52,72,69,73,56,69,67,67,61,70,71,72,62,70,60,69,70,73,71,79,72,78,66,72,67,63,58,73,70,70,72,61,60,67,72,67,63,76,66,78,63,63,59 155 | 1,65,57,58,51,70,63,71,76,58,58,63,58,69,62,77,68,72,74,69,61,72,63,77,63,76,67,67,66,67,63,61,54,56,50,63,65,59,55,75,71,73,70,60,58 156 | 1,69,75,65,67,59,60,77,76,70,68,76,71,75,68,66,60,76,70,69,70,75,78,72,68,61,63,68,70,67,65,70,69,55,61,66,64,69,66,68,65,67,50,53,41 157 | 1,73,73,75,79,64,66,68,61,71,68,77,75,63,73,62,55,70,64,77,75,75,79,70,75,65,59,68,56,63,67,74,73,60,60,62,60,73,77,70,72,73,67,64,61 158 | 1,68,58,76,71,64,70,73,75,61,58,68,64,69,71,66,73,75,69,78,74,81,78,73,74,72,80,69,69,67,67,74,74,58,59,69,70,58,53,70,67,66,78,53,64 159 | 1,32,41,76,34,65,53,30,54,16,51,61,43,74,70,62,21,34,42,61,37,58,66,54,49,17,19,11,42,53,30,71,9,61,16,31,43,67,61,29,31,17,8,18,11 160 | 1,76,65,60,40,32,34,65,50,53,37,66,53,33,31,30,30,69,75,64,45,68,65,57,43,23,23,53,77,48,32,55,32,48,23,62,51,65,59,43,39,35,30,24,21 161 | 1,60,51,75,60,65,45,64,55,55,61,66,74,61,50,62,41,70,63,60,62,76,69,70,54,51,47,77,80,69,48,74,59,72,57,76,68,69,63,62,53,57,31,46,30 162 | 1,64,60,71,69,71,65,66,64,68,59,63,67,68,64,73,59,73,60,72,56,77,68,69,69,66,59,57,40,55,53,69,63,71,63,66,55,66,58,65,65,75,64,61,56 163 | 1,65,69,66,76,58,67,65,72,66,64,77,75,64,62,63,59,71,61,67,45,74,45,66,46,64,48,62,27,65,67,72,72,62,66,71,64,71,70,72,69,70,65,63,61 164 | 1,71,76,74,79,71,69,77,75,64,64,75,78,69,70,59,52,71,62,47,50,68,65,67,62,56,48,58,50,65,63,75,75,64,62,60,56,64,63,61,65,64,58,51,38 165 | 1,55,66,58,75,71,77,68,73,63,69,77,78,60,69,59,60,69,69,67,70,72,80,67,72,53,60,70,58,46,67,68,84,69,79,70,74,62,71,67,66,63,61,53,60 166 | 1,76,77,69,70,64,69,76,80,50,56,70,74,61,55,54,59,65,65,53,72,76,73,51,47,43,46,66,80,73,73,71,65,60,53,69,70,54,62,64,66,51,42,28,22 167 | 1,70,72,65,64,71,69,75,76,65,68,69,79,65,74,62,67,73,73,53,51,72,69,74,68,49,44,52,48,65,68,64,72,57,58,66,69,64,69,76,73,66,69,50,53 168 | 1,64,72,70,74,63,70,73,74,61,69,65,75,61,71,65,67,73,69,72,71,74,81,69,69,65,65,78,75,67,71,66,74,54,60,64,68,64,68,69,71,65,65,56,58 169 | 1,76,59,82,76,80,56,74,67,67,58,77,71,56,68,60,64,66,66,66,66,82,79,40,45,49,48,75,70,64,35,71,60,39,28,71,66,73,61,71,49,53,45,29,15 170 | 1,54,53,73,68,77,65,65,72,60,50,69,64,73,75,74,76,69,72,66,60,74,67,68,69,69,78,56,67,69,61,76,71,67,64,73,70,55,49,70,61,73,70,61,61 171 | 1,68,59,77,69,77,64,75,71,64,53,67,63,66,74,74,62,67,65,70,61,73,66,78,75,72,67,67,53,72,64,71,77,66,60,73,73,70,58,70,59,77,71,70,63 172 | 1,64,63,62,59,60,61,70,74,68,63,66,68,64,66,67,66,72,68,63,59,75,72,67,62,63,55,66,56,65,64,70,71,61,63,67,63,69,69,77,65,74,62,60,54 173 | 1,40,73,61,74,61,67,56,75,64,71,75,76,63,61,56,67,70,73,69,60,74,63,65,73,57,63,66,69,60,66,72,71,57,64,64,69,67,68,59,66,55,62,51,60 174 | 1,58,57,74,71,59,60,54,59,33,39,65,74,71,75,53,57,47,60,43,44,75,78,54,57,56,56,57,61,60,62,77,76,59,57,53,60,53,57,61,74,77,82,66,68 175 | 0,70,72,70,70,65,69,70,65,69,72,77,78,68,71,63,70,69,71,68,74,75,74,69,65,71,68,63,64,66,68,73,75,67,67,69,65,66,71,69,65,78,75,66,63 176 | 0,66,64,64,66,67,72,72,77,65,66,64,64,57,61,70,66,74,78,73,72,77,75,60,58,58,61,63,60,59,60,65,65,58,58,69,73,76,75,73,75,72,72,62,62 177 | 0,68,70,69,74,65,70,72,73,71,68,73,70,68,74,63,65,65,63,70,67,74,70,69,72,62,63,63,61,66,66,74,80,70,72,69,67,60,57,69,62,66,75,50,50 178 | 0,64,58,70,78,66,66,74,72,66,63,72,74,72,65,59,58,64,67,63,61,75,74,67,58,60,53,61,58,62,61,76,72,64,65,62,64,77,71,74,72,74,73,70,59 179 | 0,58,63,80,71,76,70,70,71,64,63,74,78,77,75,62,61,62,56,71,52,82,71,84,85,71,71,57,47,42,39,70,70,50,70,50,46,58,60,76,73,82,77,65,66 180 | 0,61,68,62,70,76,79,71,71,73,77,75,77,68,73,72,72,71,68,72,75,81,80,72,73,61,67,62,61,66,68,72,71,67,67,69,69,66,71,67,66,74,71,58,58 181 | 0,73,80,78,78,75,73,78,75,70,66,77,77,67,71,60,63,71,74,77,75,74,76,61,67,60,60,64,63,62,58,72,77,59,58,65,70,68,69,64,64,63,63,56,51 182 | 0,56,56,63,66,76,76,68,73,62,54,65,62,70,65,74,72,65,64,64,53,64,56,63,61,73,64,66,60,66,74,76,75,65,61,71,73,60,53,61,73,67,68,59,56 183 | 0,73,74,65,66,69,69,67,81,65,62,69,65,67,68,70,67,72,68,66,66,78,61,67,70,67,63,68,66,70,70,69,70,66,66,66,69,72,70,74,76,75,72,67,63 184 | 0,59,58,69,74,71,73,70,68,57,55,64,68,76,75,67,66,66,63,72,67,77,75,80,75,73,69,65,61,71,75,71,77,65,66,66,66,61,56,74,71,72,69,62,60 185 | 0,74,69,75,70,70,74,77,77,65,67,73,72,69,73,68,66,69,68,67,63,78,74,71,63,66,61,68,63,74,69,74,75,65,61,66,67,63,61,71,68,66,65,54,57 186 | 0,72,61,64,66,64,59,68,66,76,66,77,75,71,72,72,62,72,68,77,78,77,81,67,67,69,68,65,68,69,64,72,73,56,56,69,64,67,71,69,68,65,73,56,52 187 | 0,75,73,72,77,68,67,76,73,67,65,76,78,66,74,67,62,70,69,66,64,77,74,75,73,67,69,73,69,68,68,72,74,61,61,70,67,72,71,79,75,77,75,67,71 188 | 0,59,62,72,74,66,66,74,76,63,67,72,76,71,74,66,64,70,69,63,66,70,72,70,76,65,69,61,66,64,65,67,72,57,63,65,71,67,69,77,78,77,76,70,70 189 | 0,64,66,68,71,62,64,74,73,63,67,66,74,70,74,59,64,75,73,70,66,79,81,79,78,61,62,76,72,67,67,71,75,65,62,70,69,68,65,75,72,62,64,57,54 190 | 1,59,52,70,67,73,66,72,61,58,52,72,71,70,77,66,65,67,55,61,57,68,66,72,74,63,64,56,54,67,54,76,74,65,67,66,56,62,56,72,62,74,74,64,67 191 | 1,72,62,69,67,78,82,74,65,69,63,70,70,72,74,70,71,72,75,66,65,73,78,74,79,74,69,69,70,71,69,72,70,62,65,65,71,63,60,69,73,67,71,56,58 192 | 1,71,62,70,64,67,64,79,65,70,69,72,71,68,65,61,61,73,71,75,74,80,74,54,47,53,37,77,68,72,59,72,68,60,60,73,70,66,65,64,55,61,41,51,46 193 | 1,69,71,70,78,61,63,67,65,59,59,66,69,71,75,65,58,60,55,62,59,67,66,74,74,64,60,57,54,70,73,69,76,62,64,61,61,66,65,72,73,68,68,59,63 194 | 1,70,66,61,66,61,58,69,69,72,68,62,71,71,71,63,59,74,75,70,69,83,77,73,70,41,37,39,40,58,46,75,73,65,66,67,69,70,66,70,64,60,55,49,41 195 | 1,57,69,68,75,69,74,73,71,57,61,72,74,73,69,61,58,60,55,71,62,79,70,77,71,65,63,69,55,61,68,75,74,63,64,63,58,69,67,79,77,72,70,61,65 196 | 1,69,66,62,75,67,71,72,76,69,70,66,69,71,80,66,64,71,77,65,61,72,67,71,69,65,57,69,65,68,65,76,73,63,64,69,70,72,72,69,68,70,73,63,59 197 | 1,61,60,60,62,64,72,68,67,74,68,76,70,74,71,76,74,74,70,75,66,69,62,65,60,66,65,68,59,64,59,72,65,55,56,66,66,66,60,60,58,60,67,49,52 198 | 1,65,62,67,68,65,67,71,71,64,56,73,72,68,69,56,57,67,62,74,66,80,76,80,78,53,47,48,36,68,65,74,73,60,60,67,63,74,63,77,79,68,70,59,56 199 | 1,74,73,72,79,66,61,76,66,65,64,78,74,62,57,48,36,62,50,67,63,79,70,61,57,52,36,69,49,55,65,74,73,58,60,64,62,73,69,62,67,60,56,53,46 200 | 1,70,69,60,62,58,60,71,77,69,69,73,68,68,70,69,65,76,75,63,64,67,74,56,60,54,44,68,69,68,68,74,73,61,59,68,67,64,68,64,76,64,61,54,49 201 | 1,67,66,65,77,66,70,72,72,72,67,76,72,73,76,74,71,74,73,69,61,78,70,76,73,70,70,62,51,70,68,79,77,75,68,72,71,69,63,65,61,73,73,64,67 202 | 1,76,69,78,73,68,67,75,70,77,70,79,73,79,75,74,71,76,68,81,79,77,78,75,76,66,76,65,67,67,57,68,75,50,62,62,59,47,49,75,65,74,70,51,48 203 | 1,70,69,67,66,68,60,76,77,70,67,71,71,79,79,70,64,77,76,63,54,68,65,72,67,59,52,56,50,67,61,74,72,67,59,68,66,73,68,74,68,77,69,65,62 204 | 1,78,73,68,74,68,69,63,74,68,67,73,73,66,71,64,67,66,68,61,66,75,71,60,62,64,66,65,67,66,62,74,75,61,61,63,66,68,65,71,62,69,67,61,59 205 | 1,67,51,73,65,69,56,72,63,64,56,68,67,70,62,70,58,68,62,65,59,77,69,68,59,64,55,65,60,70,60,72,65,58,51,66,59,71,62,74,60,76,65,62,56 206 | 1,70,54,66,66,76,46,74,58,68,52,81,58,67,58,68,32,73,59,76,51,82,57,76,54,58,30,69,41,59,59,67,73,62,55,60,55,65,56,65,44,73,36,51,28 207 | 1,63,63,69,72,67,62,65,57,68,53,68,71,73,78,64,58,61,54,70,61,72,67,72,68,57,55,61,53,66,60,76,77,73,66,66,58,75,70,77,67,78,68,64,58 208 | 1,62,56,66,57,74,75,68,59,65,59,74,66,71,65,67,69,66,66,71,72,80,74,71,63,62,72,62,66,66,61,73,68,59,59,63,62,73,73,76,67,77,71,62,58 209 | 1,80,74,82,77,74,74,73,77,64,61,73,73,73,72,62,66,66,68,63,61,69,75,70,75,59,64,63,69,66,66,70,77,62,62,60,65,67,66,74,71,66,71,59,62 210 | 1,63,58,66,55,56,58,69,74,44,48,63,60,76,67,73,73,58,66,68,63,72,74,70,72,77,75,70,71,71,67,75,73,60,59,71,70,65,62,70,69,71,70,58,61 211 | 1,70,65,65,62,68,67,77,74,62,61,66,61,69,74,64,62,71,71,74,70,77,78,69,70,67,65,67,70,49,48,73,71,65,73,73,73,75,71,73,72,73,70,65,64 212 | 1,61,63,58,62,56,60,67,75,61,57,64,71,56,59,66,62,73,76,71,75,83,84,69,71,69,69,69,71,49,43,59,64,56,61,64,72,70,73,69,70,65,68,65,62 213 | 1,70,64,52,58,75,89,70,72,26,30,46,55,54,59,40,40,39,37,35,17,59,52,66,72,23,46,8,31,17,20,49,72,61,70,31,13,40,23,31,30,57,67,41,57 214 | 1,75,71,54,51,53,50,68,69,46,55,11,12,43,48,61,60,73,77,46,45,68,59,65,73,54,60,55,66,54,41,53,52,58,63,72,65,33,23,64,54,36,46,45,52 215 | 1,77,61,62,68,62,58,72,68,77,71,76,77,72,75,62,57,77,74,61,58,72,76,69,68,56,53,57,54,69,70,73,79,65,70,66,68,67,66,71,67,60,60,53,57 216 | 1,75,72,75,79,72,68,79,77,69,66,73,77,67,73,57,58,69,69,67,65,77,68,69,65,58,54,68,60,67,66,75,78,63,66,68,64,72,69,73,61,52,44,34,37 217 | 1,78,76,71,72,65,71,75,74,70,64,65,76,65,73,59,57,65,65,73,73,81,80,68,66,59,44,62,63,62,59,71,74,59,60,64,61,77,76,62,67,44,42,44,30 218 | 1,69,68,75,74,78,72,75,72,61,57,72,71,75,72,70,68,68,62,62,66,67,67,74,78,64,68,62,62,64,63,75,77,66,67,69,65,62,63,64,59,74,75,63,67 219 | 1,72,66,75,67,61,59,64,63,61,67,75,76,66,48,61,56,69,68,68,68,68,75,69,67,68,71,70,68,48,47,74,79,63,75,62,62,64,67,56,52,69,83,59,73 220 | 1,64,64,70,75,70,71,74,71,59,60,62,68,70,66,69,72,69,69,61,63,56,60,62,66,69,71,62,63,67,65,62,58,52,51,67,66,61,56,64,65,71,73,57,63 221 | 1,72,63,68,62,72,63,79,61,57,49,76,75,55,57,43,37,54,52,57,56,78,78,57,55,35,37,57,57,41,35,67,70,75,72,53,46,63,62,53,43,38,35,32,26 222 | 1,79,78,66,63,69,62,78,70,72,71,73,78,75,65,68,62,76,71,68,68,72,71,52,48,23,26,66,59,66,66,72,74,56,58,67,63,66,69,70,74,34,33,11,12 223 | 1,66,81,75,72,69,67,74,81,67,73,76,75,69,64,58,57,74,74,56,62,74,78,55,50,37,38,65,73,61,61,73,73,61,63,67,66,60,71,46,58,35,37,24,20 224 | 1,65,66,71,72,67,75,76,83,70,74,70,76,70,68,63,71,69,76,72,73,76,80,69,68,57,59,59,56,62,68,75,73,65,61,69,73,66,70,63,65,65,67,53,42 225 | 1,71,75,76,74,71,68,67,68,69,75,75,74,59,58,71,69,70,74,74,72,71,78,69,72,69,72,63,61,59,70,72,75,61,66,70,71,59,64,64,60,72,61,55,63 226 | 1,70,66,66,68,71,69,64,61,68,67,50,53,73,71,73,63,71,73,80,81,82,82,67,71,52,47,67,64,66,67,66,75,58,62,65,65,71,67,70,71,67,64,52,53 227 | 1,73,76,68,74,56,59,73,76,54,48,75,78,47,53,25,19,60,56,56,54,80,79,47,53,19,14,58,50,67,71,63,54,49,48,66,65,62,58,57,72,31,30,15,11 228 | 1,68,76,79,78,63,73,68,78,64,71,73,77,67,71,58,57,61,63,52,64,64,74,53,72,36,44,52,54,49,56,73,81,65,80,53,60,63,70,58,64,52,57,49,50 229 | 1,68,64,65,68,63,64,77,73,75,72,80,77,70,71,61,61,73,68,63,62,76,73,69,69,48,59,62,44,66,59,75,74,64,64,63,61,70,69,74,67,51,48,45,45 230 | 0,62,67,64,70,59,58,67,74,60,66,68,68,73,71,60,63,64,74,64,65,74,77,69,73,59,58,58,67,65,69,78,76,61,62,64,67,72,74,71,71,71,69,66,61 231 | 0,62,67,68,70,65,70,73,77,69,70,69,73,71,74,71,71,76,75,66,67,73,73,70,74,63,67,58,68,66,69,78,79,69,70,71,73,72,71,73,77,72,76,64,66 232 | 0,59,68,69,67,69,59,78,73,66,65,77,73,74,66,66,55,71,66,69,68,75,73,80,79,69,65,69,66,68,65,75,71,59,61,65,64,73,71,81,75,74,65,69,66 233 | 0,75,75,70,77,67,75,75,75,67,66,74,73,68,72,64,70,76,70,67,63,74,75,72,68,69,68,75,69,71,74,75,76,63,70,71,69,66,63,70,73,66,68,58,59 234 | 0,77,79,79,77,74,76,76,81,65,68,66,66,74,73,72,68,67,73,63,62,72,67,76,69,68,64,64,61,69,68,73,75,70,66,64,70,70,70,73,76,79,73,65,63 235 | 0,68,64,74,80,76,72,78,75,67,64,75,80,78,77,66,64,67,67,70,60,78,82,70,68,63,60,64,60,54,56,70,73,59,65,55,58,50,51,73,70,69,65,42,41 236 | 0,76,73,74,76,60,69,76,76,68,69,78,79,57,62,69,69,67,66,73,69,80,81,58,68,75,69,73,70,58,65,79,76,74,71,66,64,65,62,78,68,75,68,62,60 237 | 0,61,76,71,68,77,69,77,69,64,75,71,81,75,72,71,69,70,73,61,71,69,79,64,65,62,66,61,65,71,68,67,71,59,64,66,65,60,68,74,71,69,68,63,59 238 | 0,67,65,77,74,67,66,67,70,65,64,75,78,66,74,62,60,65,65,73,72,75,76,74,81,66,65,65,63,63,67,76,80,63,64,63,64,73,72,76,75,72,74,65,64 239 | 0,71,61,74,74,76,74,69,56,68,78,71,78,58,64,70,72,71,68,72,71,79,78,67,68,63,60,67,67,76,74,67,79,67,71,71,64,70,74,83,76,74,73,54,54 240 | 0,64,70,71,69,72,70,75,78,61,66,69,68,68,70,71,70,75,76,73,72,80,78,79,81,74,70,72,79,73,75,77,73,65,64,72,72,59,62,71,74,68,67,58,57 241 | 0,76,75,68,78,71,72,72,75,61,65,67,70,67,75,60,58,63,67,59,63,67,72,74,73,56,56,52,52,67,68,73,78,65,68,61,67,69,74,77,75,74,70,63,61 242 | 0,74,73,72,75,63,62,67,67,73,74,75,79,70,71,64,67,65,69,79,78,81,80,71,73,60,62,69,67,69,69,75,75,66,67,67,66,71,73,66,69,62,65,55,56 243 | 0,65,67,69,76,62,68,65,66,65,64,74,73,60,75,66,63,64,62,73,65,77,74,69,69,66,59,68,59,69,69,76,79,65,63,60,60,69,64,69,74,69,70,62,57 244 | 0,59,75,70,76,62,70,65,74,65,67,75,76,70,73,63,61,74,67,78,69,75,73,70,68,67,64,79,68,70,75,76,77,59,63,72,69,64,64,65,72,61,61,51,55 245 | 0,76,72,73,69,67,73,74,72,60,65,73,66,66,73,68,67,69,70,60,58,66,76,69,75,65,64,63,60,74,71,77,79,61,68,71,70,62,63,73,76,62,69,52,59 246 | 0,71,75,78,78,68,67,75,72,67,68,72,75,74,74,67,66,66,67,66,66,78,80,73,75,67,72,67,67,67,65,77,78,61,64,63,66,51,57,77,67,78,76,60,59 247 | 0,80,76,75,75,69,68,74,75,77,77,76,78,74,70,66,65,67,75,74,73,74,77,68,67,61,58,60,67,61,63,75,75,66,62,59,61,77,74,69,67,65,66,61,58 248 | 0,68,70,66,72,63,71,77,82,61,63,61,62,61,65,65,62,72,77,69,73,72,78,74,77,69,69,77,74,64,63,66,70,58,60,65,69,75,77,77,77,69,77,65,64 249 | 0,67,57,73,78,63,68,72,73,61,59,59,76,71,72,69,66,70,68,65,77,79,68,71,75,62,66,70,78,68,69,70,76,65,65,66,67,62,72,69,72,70,68,60,59 250 | 0,72,74,67,69,69,70,74,81,66,70,73,78,69,80,65,65,70,77,69,70,73,79,64,68,56,58,67,64,68,68,69,74,62,67,66,70,73,77,74,77,71,72,63,65 251 | 0,62,71,78,84,64,68,72,74,53,57,71,70,71,72,54,53,63,67,54,57,71,71,70,74,54,57,54,57,62,64,75,72,62,65,60,64,64,67,72,77,62,62,61,65 252 | 0,69,78,74,76,70,67,69,73,68,75,75,76,71,77,58,61,66,70,67,72,76,72,56,62,56,61,57,62,67,73,76,74,58,63,64,68,66,76,70,72,64,68,60,56 253 | 0,59,65,53,60,72,74,67,69,64,67,64,65,71,70,68,71,72,70,70,70,75,78,72,71,71,71,67,64,67,71,71,74,62,66,72,73,57,57,64,71,70,69,53,49 254 | 0,66,67,63,70,69,70,73,72,61,62,68,68,70,71,71,67,71,69,65,65,76,78,71,70,65,64,68,71,70,71,73,74,58,63,68,71,70,72,77,79,79,79,66,66 255 | 0,62,66,66,68,73,76,68,71,62,62,63,68,74,75,63,68,71,68,58,58,65,66,65,76,64,70,63,60,70,72,71,77,67,69,72,71,63,63,70,72,75,79,62,59 256 | 0,71,71,69,71,65,65,76,73,67,66,69,79,76,76,63,62,74,71,58,66,76,78,78,74,68,66,69,68,68,68,71,74,59,57,65,66,73,71,78,74,68,70,57,55 257 | 0,63,61,75,72,68,71,69,70,64,56,70,75,76,73,70,72,76,73,68,68,79,76,68,76,66,73,58,68,72,75,72,75,65,61,66,67,58,57,72,72,68,71,57,58 258 | 0,74,81,80,78,70,69,74,77,69,71,73,76,68,68,62,61,68,68,67,70,74,80,68,74,57,62,57,65,61,65,71,76,63,65,67,67,70,74,63,72,68,70,61,64 259 | 0,69,64,73,72,49,70,66,71,57,56,64,62,76,74,65,62,63,58,63,63,75,76,78,80,75,77,51,62,74,68,77,77,70,68,68,64,59,58,69,66,74,75,62,59 260 | 0,70,64,68,67,76,68,76,69,67,64,69,65,62,65,70,67,74,68,65,65,74,75,64,69,63,63,64,64,56,61,62,68,66,66,62,58,57,48,75,64,79,74,59,58 261 | 0,65,68,70,78,65,72,72,74,64,69,71,73,72,68,62,62,65,62,72,75,79,78,72,76,66,67,62,61,68,76,72,78,65,64,67,63,64,67,67,77,66,66,59,57 262 | 0,64,53,74,70,65,63,70,70,57,57,64,64,73,74,65,59,65,63,63,62,72,73,79,76,75,68,60,58,69,66,72,76,64,65,63,65,63,65,75,80,74,67,71,67 263 | 0,70,71,71,74,68,66,72,70,66,69,74,72,70,69,64,66,73,72,75,73,81,81,76,75,71,70,74,82,69,72,76,74,60,56,66,66,64,64,73,72,66,63,54,58 264 | 0,72,70,75,80,73,70,76,73,66,56,72,70,73,75,67,65,69,69,73,72,81,77,80,79,67,64,64,66,69,68,70,75,63,59,66,63,74,77,81,78,79,75,65,66 265 | 0,70,75,72,72,67,71,71,78,63,67,73,76,71,74,59,61,67,64,74,71,77,77,70,72,61,61,62,58,63,69,76,75,64,65,66,67,68,70,70,71,64,67,56,54 266 | 0,59,57,67,71,66,68,68,70,56,62,77,61,67,71,75,71,67,64,62,54,64,75,71,72,76,79,75,70,71,77,71,69,56,54,62,64,56,53,71,68,64,63,56,56 267 | 0,67,64,73,75,77,77,74,70,65,62,74,75,65,67,68,70,66,69,67,60,74,75,62,64,66,71,62,61,64,69,73,76,64,66,61,64,65,60,68,75,74,80,67,68 268 | 0,68,65,72,72,47,74,76,74,67,66,71,69,69,67,63,64,68,68,70,74,77,77,73,60,49,48,42,69,70,69,76,79,63,66,64,69,71,73,73,75,68,56,58,44 269 | 0,66,54,69,66,69,69,75,72,63,62,68,66,68,70,71,68,70,69,66,68,73,72,65,73,67,63,60,57,70,68,75,75,65,67,69,65,65,64,67,69,71,68,59,59 --------------------------------------------------------------------------------