├── src ├── puLearning │ ├── __init__.py │ └── puAdapter.py ├── examples │ └── puAdapterExample.py ├── tests │ └── breastCancer.py └── datasets │ └── breast-cancer-wisconsin.data ├── README.md └── LICENSE.md /src/puLearning/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Positive and Unlabled Learning (pu-learning) 2 | =========== 3 | 4 | A set of machine learning tools and algorithms for learning from positive and unlabled datasets. 5 | 6 | Tools 7 | ------- 8 | 9 | PUAdapter: A tool that adapts any estimator that can output a probability to positive-unlabled learning. 10 | It is based on: Elkan, Charles, and Keith Noto. "Learning classifiers from only positive and unlabeled data." 11 | Proceeding of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining. 12 | ACM, 2008. 13 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright © 2013 Alexandre Drouin All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without modification, 4 | are permitted provided that the following conditions are met: 5 | * Redistributions of source code must retain the above copyright notice, this 6 | list of conditions and the following disclaimer. 7 | * Redistributions in binary form must reproduce the above copyright notice, this 8 | list of conditions and the following disclaimer in the documentation and/or 9 | other materials provided with the distribution. 10 | * Neither the name of Alexandre Drouin nor the names of its contributors may be used to 11 | endorse or promote products derived from this software without specific prior 12 | written permission. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND 15 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 21 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /src/examples/puAdapterExample.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | """ 4 | Created on Dec 21, 2012 5 | 6 | @author: Alexandre 7 | """ 8 | from puLearning.puAdapter import PUAdapter 9 | from sklearn.svm import SVC 10 | from sklearn.datasets import make_classification 11 | import numpy as np 12 | 13 | if __name__ == '__main__': 14 | X,y = make_classification(n_samples=3000, 15 | n_features=20, 16 | n_informative=2, 17 | n_redundant=2, 18 | n_repeated=0, 19 | n_classes=2, 20 | n_clusters_per_class=2, 21 | weights=None, 22 | flip_y=0.01, 23 | class_sep=1.0, 24 | hypercube=True, 25 | shift=0.0, 26 | scale=1.0, 27 | shuffle=True, 28 | random_state=None) 29 | 30 | y[np.where(y == 0)[0]] = -1. 31 | 32 | estimator = SVC(C=10, 33 | kernel='rbf', 34 | gamma=0.4, 35 | probability=True) 36 | pu_estimator = PUAdapter(estimator, hold_out_ratio=0.2) 37 | 38 | pu_estimator.fit(X, y) 39 | 40 | print pu_estimator 41 | print 42 | print "Comparison of estimator and PUAdapter(estimator):" 43 | print "Number of disagreements: ", len(np.where((pu_estimator.predict(X) == estimator.predict(X)) == False)[0]) 44 | print "Number of agreements: ", len(np.where((pu_estimator.predict(X) == estimator.predict(X)) == True)[0]) 45 | -------------------------------------------------------------------------------- /src/tests/breastCancer.py: -------------------------------------------------------------------------------- 1 | """ 2 | Created on Dec 22, 2012 3 | 4 | @author: Alexandre 5 | 6 | The goal of this test is to verifiy that the PUAdapter really allows a regular estimator to 7 | achieve better accuracy in the case where the \"negative\" examples are contaminated with a 8 | number of positive examples. 9 | 10 | Here we use the breast cancer dataset from UCI. We purposely take a few malignant examples and 11 | assign them the bening label and consider the bening examples as being \"unlabled\". We then compare 12 | the performance of the estimator while using the PUAdapter and without using the PUAdapter. To 13 | asses the performance, we use the F1 score, precision and recall. 14 | 15 | Results show that PUAdapter greatly increases the performance of an estimator in the case where 16 | the negative examples are contaminated with positive examples. We call this situation positive and 17 | unlabled learning. 18 | """ 19 | import numpy as np 20 | import matplotlib.pyplot as plt 21 | from puLearning.puAdapter import PUAdapter 22 | from sklearn.ensemble import RandomForestClassifier 23 | from sklearn.metrics import precision_recall_fscore_support 24 | 25 | 26 | def load_breast_cancer(path): 27 | f = open(path) 28 | lines = f.readlines() 29 | f.close() 30 | 31 | examples = [] 32 | labels = [] 33 | 34 | for l in lines: 35 | spt = l.split(',') 36 | label = float(spt[-1]) 37 | feat = spt[:-1] 38 | if '?' not in spt: 39 | examples.append(feat) 40 | labels.append(label) 41 | 42 | return np.array(examples), np.array(labels) 43 | 44 | 45 | if __name__ == '__main__': 46 | np.random.seed(42) 47 | 48 | print "Loading dataset" 49 | print 50 | X,y = load_breast_cancer('../datasets/breast-cancer-wisconsin.data') 51 | 52 | #Shuffle dataset 53 | print "Shuffling dataset" 54 | print 55 | permut = np.random.permutation(len(y)) 56 | X = X[permut] 57 | y = y[permut] 58 | 59 | #make the labels -1.,+1. I don't like 2 and 4 (: 60 | y[np.where(y == 2)[0]] = -1. 61 | y[np.where(y == 4)[0]] = +1. 62 | 63 | print "Loaded ", len(y), " examples" 64 | print len(np.where(y == -1.)[0])," are bening" 65 | print len(np.where(y == +1.)[0])," are malignant" 66 | print 67 | 68 | #Split test/train 69 | print "Splitting dataset in test/train sets" 70 | print 71 | split = 2*len(y)/3 72 | X_train = X[:split] 73 | y_train = y[:split] 74 | X_test = X[split:] 75 | y_test = y[split:] 76 | 77 | print "Training set contains ", len(y_train), " examples" 78 | print len(np.where(y_train == -1.)[0])," are bening" 79 | print len(np.where(y_train == +1.)[0])," are malignant" 80 | print 81 | 82 | pu_f1_scores = [] 83 | reg_f1_scores = [] 84 | n_sacrifice_iter = range(0, len(np.where(y_train == +1.)[0])-21, 5) 85 | for n_sacrifice in n_sacrifice_iter: 86 | #send some positives to the negative class! :) 87 | print "PU transformation in progress." 88 | print "Making ", n_sacrifice, " malignant examples bening." 89 | print 90 | y_train_pu = np.copy(y_train) 91 | pos = np.where(y_train == +1.)[0] 92 | np.random.shuffle(pos) 93 | sacrifice = pos[:n_sacrifice] 94 | y_train_pu[sacrifice] = -1. 95 | 96 | print "PU transformation applied. We now have:" 97 | print len(np.where(y_train_pu == -1.)[0])," are bening" 98 | print len(np.where(y_train_pu == +1.)[0])," are malignant" 99 | print 100 | 101 | #Get f1 score with pu_learning 102 | print "PU learning in progress..." 103 | estimator = RandomForestClassifier(n_estimators=100, 104 | criterion='gini', 105 | bootstrap=True, 106 | n_jobs=1) 107 | pu_estimator = PUAdapter(estimator) 108 | pu_estimator.fit(X_train,y_train_pu) 109 | y_pred = pu_estimator.predict(X_test) 110 | precision, recall, f1_score, _ = precision_recall_fscore_support(y_test, y_pred) 111 | pu_f1_scores.append(f1_score[1]) 112 | print "F1 score: ", f1_score[1] 113 | print "Precision: ", precision[1] 114 | print "Recall: ", recall[1] 115 | print 116 | 117 | #Get f1 score without pu_learning 118 | print "Regular learning in progress..." 119 | estimator = RandomForestClassifier(n_estimators=100, 120 | bootstrap=True, 121 | n_jobs=1) 122 | estimator.fit(X_train,y_train_pu) 123 | y_pred = estimator.predict(X_test) 124 | precision, recall, f1_score, _ = precision_recall_fscore_support(y_test, y_pred) 125 | reg_f1_scores.append(f1_score[1]) 126 | print "F1 score: ", f1_score[1] 127 | print "Precision: ", precision[1] 128 | print "Recall: ", recall[1] 129 | print 130 | print 131 | plt.title("Random forest with/without PU learning") 132 | plt.plot(n_sacrifice_iter, pu_f1_scores, label='PU Adapted Random Forest') 133 | plt.plot(n_sacrifice_iter, reg_f1_scores, label='Random Forest') 134 | plt.xlabel('Number of positive examples hidden in the unlabled set') 135 | plt.ylabel('F1 Score') 136 | plt.legend() 137 | plt.show() 138 | -------------------------------------------------------------------------------- /src/puLearning/puAdapter.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #-*- coding:utf-8 -*- 3 | """ 4 | Created on Dec 21, 2012 5 | 6 | @author: Alexandre 7 | """ 8 | import numpy as np 9 | 10 | class PUAdapter(object): 11 | """ 12 | Adapts any probabilistic binary classifier to positive-unlabled learning using the PosOnly method proposed by 13 | Elkan and Noto: 14 | 15 | Elkan, Charles, and Keith Noto. \"Learning classifiers from only positive and unlabeled data.\" 16 | Proceeding of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2008. 17 | """ 18 | 19 | 20 | def __init__(self, estimator, hold_out_ratio=0.1, precomputed_kernel=False): 21 | """ 22 | estimator -- An estimator of p(s=1|x) that must implement: 23 | * predict_proba(X): Takes X, which can be a list of feature vectors or a precomputed 24 | kernel matrix and outputs p(s=1|x) for each example in X 25 | * fit(X,y): Takes X, which can be a list of feature vectors or a precomputed 26 | kernel matrix and takes y, which are the labels associated to the 27 | examples in X 28 | hold_out_ratio -- The ratio of training examples that must be held out of the training set of examples 29 | to estimate p(s=1|y=1) after training the estimator 30 | precomputed_kernel -- Specifies if the X matrix for predict_proba and fit is a precomputed kernel matrix 31 | """ 32 | self.estimator = estimator 33 | self.c = 1.0 34 | self.hold_out_ratio = hold_out_ratio 35 | 36 | if precomputed_kernel: 37 | self.fit = self.__fit_precomputed_kernel 38 | else: 39 | self.fit = self.__fit_no_precomputed_kernel 40 | 41 | self.estimator_fitted = False 42 | 43 | def __str__(self): 44 | return 'Estimator:' + str(self.estimator) + '\n' + 'p(s=1|y=1,x) ~= ' + str(self.c) + '\n' + \ 45 | 'Fitted: ' + str(self.estimator_fitted) 46 | 47 | 48 | def __fit_precomputed_kernel(self, X, y): 49 | """ 50 | Fits an estimator of p(s=1|x) and estimates the value of p(s=1|y=1) using a subset of the training examples 51 | 52 | X -- Precomputed kernel matrix 53 | y -- Labels associated to each example in X (Positive label: 1.0, Negative label: -1.0) 54 | """ 55 | positives = np.where(y == 1.)[0] 56 | hold_out_size = np.ceil(len(positives) * self.hold_out_ratio) 57 | 58 | if len(positives) <= hold_out_size: 59 | raise('Not enough positive examples to estimate p(s=1|y=1,x). Need at least ' + str(hold_out_size + 1) + '.') 60 | 61 | np.random.shuffle(positives) 62 | hold_out = positives[:hold_out_size] 63 | 64 | #Hold out test kernel matrix 65 | X_test_hold_out = X[hold_out] 66 | keep = list(set(np.arange(len(y))) - set(hold_out)) 67 | X_test_hold_out = X_test_hold_out[:,keep] 68 | 69 | #New training kernel matrix 70 | X = X[:, keep] 71 | X = X[keep] 72 | 73 | y = np.delete(y, hold_out) 74 | 75 | self.estimator.fit(X, y) 76 | 77 | hold_out_predictions = self.estimator.predict_proba(X_test_hold_out) 78 | 79 | try: 80 | hold_out_predictions = hold_out_predictions[:,1] 81 | except: 82 | pass 83 | 84 | c = np.mean(hold_out_predictions) 85 | self.c = c 86 | 87 | self.estimator_fitted = True 88 | 89 | 90 | def __fit_no_precomputed_kernel(self, X, y): 91 | """ 92 | Fits an estimator of p(s=1|x) and estimates the value of p(s=1|y=1,x) 93 | 94 | X -- List of feature vectors 95 | y -- Labels associated to each feature vector in X (Positive label: 1.0, Negative label: -1.0) 96 | """ 97 | positives = np.where(y == 1.)[0] 98 | hold_out_size = np.ceil(len(positives) * self.hold_out_ratio) 99 | 100 | if len(positives) <= hold_out_size: 101 | raise('Not enough positive examples to estimate p(s=1|y=1,x). Need at least ' + str(hold_out_size + 1) + '.') 102 | 103 | np.random.shuffle(positives) 104 | hold_out = positives[:hold_out_size] 105 | X_hold_out = X[hold_out] 106 | X = np.delete(X, hold_out,0) 107 | y = np.delete(y, hold_out) 108 | 109 | self.estimator.fit(X, y) 110 | 111 | hold_out_predictions = self.estimator.predict_proba(X_hold_out) 112 | 113 | try: 114 | hold_out_predictions = hold_out_predictions[:,1] 115 | except: 116 | pass 117 | 118 | c = np.mean(hold_out_predictions) 119 | self.c = c 120 | 121 | self.estimator_fitted = True 122 | 123 | 124 | def predict_proba(self, X): 125 | """ 126 | Predicts p(y=1|x) using the estimator and the value of p(s=1|y=1) estimated in fit(...) 127 | 128 | X -- List of feature vectors or a precomputed kernel matrix 129 | """ 130 | if not self.estimator_fitted: 131 | raise Exception('The estimator must be fitted before calling predict_proba(...).') 132 | 133 | probabilistic_predictions = self.estimator.predict_proba(X) 134 | 135 | try: 136 | probabilistic_predictions = probabilistic_predictions[:,1] 137 | except: 138 | pass 139 | 140 | return probabilistic_predictions / self.c 141 | 142 | 143 | def predict(self, X, treshold=0.5): 144 | """ 145 | Assign labels to feature vectors based on the estimator's predictions 146 | 147 | X -- List of feature vectors or a precomputed kernel matrix 148 | treshold -- The decision treshold between the positive and the negative class 149 | """ 150 | if not self.estimator_fitted: 151 | raise Exception('The estimator must be fitted before calling predict(...).') 152 | 153 | return np.array([1. if p > treshold else -1. for p in self.predict_proba(X)]) 154 | 155 | 156 | 157 | -------------------------------------------------------------------------------- /src/datasets/breast-cancer-wisconsin.data: -------------------------------------------------------------------------------- 1 | 1000025,5,1,1,1,2,1,3,1,1,2 2 | 1002945,5,4,4,5,7,10,3,2,1,2 3 | 1015425,3,1,1,1,2,2,3,1,1,2 4 | 1016277,6,8,8,1,3,4,3,7,1,2 5 | 1017023,4,1,1,3,2,1,3,1,1,2 6 | 1017122,8,10,10,8,7,10,9,7,1,4 7 | 1018099,1,1,1,1,2,10,3,1,1,2 8 | 1018561,2,1,2,1,2,1,3,1,1,2 9 | 1033078,2,1,1,1,2,1,1,1,5,2 10 | 1033078,4,2,1,1,2,1,2,1,1,2 11 | 1035283,1,1,1,1,1,1,3,1,1,2 12 | 1036172,2,1,1,1,2,1,2,1,1,2 13 | 1041801,5,3,3,3,2,3,4,4,1,4 14 | 1043999,1,1,1,1,2,3,3,1,1,2 15 | 1044572,8,7,5,10,7,9,5,5,4,4 16 | 1047630,7,4,6,4,6,1,4,3,1,4 17 | 1048672,4,1,1,1,2,1,2,1,1,2 18 | 1049815,4,1,1,1,2,1,3,1,1,2 19 | 1050670,10,7,7,6,4,10,4,1,2,4 20 | 1050718,6,1,1,1,2,1,3,1,1,2 21 | 1054590,7,3,2,10,5,10,5,4,4,4 22 | 1054593,10,5,5,3,6,7,7,10,1,4 23 | 1056784,3,1,1,1,2,1,2,1,1,2 24 | 1057013,8,4,5,1,2,?,7,3,1,4 25 | 1059552,1,1,1,1,2,1,3,1,1,2 26 | 1065726,5,2,3,4,2,7,3,6,1,4 27 | 1066373,3,2,1,1,1,1,2,1,1,2 28 | 1066979,5,1,1,1,2,1,2,1,1,2 29 | 1067444,2,1,1,1,2,1,2,1,1,2 30 | 1070935,1,1,3,1,2,1,1,1,1,2 31 | 1070935,3,1,1,1,1,1,2,1,1,2 32 | 1071760,2,1,1,1,2,1,3,1,1,2 33 | 1072179,10,7,7,3,8,5,7,4,3,4 34 | 1074610,2,1,1,2,2,1,3,1,1,2 35 | 1075123,3,1,2,1,2,1,2,1,1,2 36 | 1079304,2,1,1,1,2,1,2,1,1,2 37 | 1080185,10,10,10,8,6,1,8,9,1,4 38 | 1081791,6,2,1,1,1,1,7,1,1,2 39 | 1084584,5,4,4,9,2,10,5,6,1,4 40 | 1091262,2,5,3,3,6,7,7,5,1,4 41 | 1096800,6,6,6,9,6,?,7,8,1,2 42 | 1099510,10,4,3,1,3,3,6,5,2,4 43 | 1100524,6,10,10,2,8,10,7,3,3,4 44 | 1102573,5,6,5,6,10,1,3,1,1,4 45 | 1103608,10,10,10,4,8,1,8,10,1,4 46 | 1103722,1,1,1,1,2,1,2,1,2,2 47 | 1105257,3,7,7,4,4,9,4,8,1,4 48 | 1105524,1,1,1,1,2,1,2,1,1,2 49 | 1106095,4,1,1,3,2,1,3,1,1,2 50 | 1106829,7,8,7,2,4,8,3,8,2,4 51 | 1108370,9,5,8,1,2,3,2,1,5,4 52 | 1108449,5,3,3,4,2,4,3,4,1,4 53 | 1110102,10,3,6,2,3,5,4,10,2,4 54 | 1110503,5,5,5,8,10,8,7,3,7,4 55 | 1110524,10,5,5,6,8,8,7,1,1,4 56 | 1111249,10,6,6,3,4,5,3,6,1,4 57 | 1112209,8,10,10,1,3,6,3,9,1,4 58 | 1113038,8,2,4,1,5,1,5,4,4,4 59 | 1113483,5,2,3,1,6,10,5,1,1,4 60 | 1113906,9,5,5,2,2,2,5,1,1,4 61 | 1115282,5,3,5,5,3,3,4,10,1,4 62 | 1115293,1,1,1,1,2,2,2,1,1,2 63 | 1116116,9,10,10,1,10,8,3,3,1,4 64 | 1116132,6,3,4,1,5,2,3,9,1,4 65 | 1116192,1,1,1,1,2,1,2,1,1,2 66 | 1116998,10,4,2,1,3,2,4,3,10,4 67 | 1117152,4,1,1,1,2,1,3,1,1,2 68 | 1118039,5,3,4,1,8,10,4,9,1,4 69 | 1120559,8,3,8,3,4,9,8,9,8,4 70 | 1121732,1,1,1,1,2,1,3,2,1,2 71 | 1121919,5,1,3,1,2,1,2,1,1,2 72 | 1123061,6,10,2,8,10,2,7,8,10,4 73 | 1124651,1,3,3,2,2,1,7,2,1,2 74 | 1125035,9,4,5,10,6,10,4,8,1,4 75 | 1126417,10,6,4,1,3,4,3,2,3,4 76 | 1131294,1,1,2,1,2,2,4,2,1,2 77 | 1132347,1,1,4,1,2,1,2,1,1,2 78 | 1133041,5,3,1,2,2,1,2,1,1,2 79 | 1133136,3,1,1,1,2,3,3,1,1,2 80 | 1136142,2,1,1,1,3,1,2,1,1,2 81 | 1137156,2,2,2,1,1,1,7,1,1,2 82 | 1143978,4,1,1,2,2,1,2,1,1,2 83 | 1143978,5,2,1,1,2,1,3,1,1,2 84 | 1147044,3,1,1,1,2,2,7,1,1,2 85 | 1147699,3,5,7,8,8,9,7,10,7,4 86 | 1147748,5,10,6,1,10,4,4,10,10,4 87 | 1148278,3,3,6,4,5,8,4,4,1,4 88 | 1148873,3,6,6,6,5,10,6,8,3,4 89 | 1152331,4,1,1,1,2,1,3,1,1,2 90 | 1155546,2,1,1,2,3,1,2,1,1,2 91 | 1156272,1,1,1,1,2,1,3,1,1,2 92 | 1156948,3,1,1,2,2,1,1,1,1,2 93 | 1157734,4,1,1,1,2,1,3,1,1,2 94 | 1158247,1,1,1,1,2,1,2,1,1,2 95 | 1160476,2,1,1,1,2,1,3,1,1,2 96 | 1164066,1,1,1,1,2,1,3,1,1,2 97 | 1165297,2,1,1,2,2,1,1,1,1,2 98 | 1165790,5,1,1,1,2,1,3,1,1,2 99 | 1165926,9,6,9,2,10,6,2,9,10,4 100 | 1166630,7,5,6,10,5,10,7,9,4,4 101 | 1166654,10,3,5,1,10,5,3,10,2,4 102 | 1167439,2,3,4,4,2,5,2,5,1,4 103 | 1167471,4,1,2,1,2,1,3,1,1,2 104 | 1168359,8,2,3,1,6,3,7,1,1,4 105 | 1168736,10,10,10,10,10,1,8,8,8,4 106 | 1169049,7,3,4,4,3,3,3,2,7,4 107 | 1170419,10,10,10,8,2,10,4,1,1,4 108 | 1170420,1,6,8,10,8,10,5,7,1,4 109 | 1171710,1,1,1,1,2,1,2,3,1,2 110 | 1171710,6,5,4,4,3,9,7,8,3,4 111 | 1171795,1,3,1,2,2,2,5,3,2,2 112 | 1171845,8,6,4,3,5,9,3,1,1,4 113 | 1172152,10,3,3,10,2,10,7,3,3,4 114 | 1173216,10,10,10,3,10,8,8,1,1,4 115 | 1173235,3,3,2,1,2,3,3,1,1,2 116 | 1173347,1,1,1,1,2,5,1,1,1,2 117 | 1173347,8,3,3,1,2,2,3,2,1,2 118 | 1173509,4,5,5,10,4,10,7,5,8,4 119 | 1173514,1,1,1,1,4,3,1,1,1,2 120 | 1173681,3,2,1,1,2,2,3,1,1,2 121 | 1174057,1,1,2,2,2,1,3,1,1,2 122 | 1174057,4,2,1,1,2,2,3,1,1,2 123 | 1174131,10,10,10,2,10,10,5,3,3,4 124 | 1174428,5,3,5,1,8,10,5,3,1,4 125 | 1175937,5,4,6,7,9,7,8,10,1,4 126 | 1176406,1,1,1,1,2,1,2,1,1,2 127 | 1176881,7,5,3,7,4,10,7,5,5,4 128 | 1177027,3,1,1,1,2,1,3,1,1,2 129 | 1177399,8,3,5,4,5,10,1,6,2,4 130 | 1177512,1,1,1,1,10,1,1,1,1,2 131 | 1178580,5,1,3,1,2,1,2,1,1,2 132 | 1179818,2,1,1,1,2,1,3,1,1,2 133 | 1180194,5,10,8,10,8,10,3,6,3,4 134 | 1180523,3,1,1,1,2,1,2,2,1,2 135 | 1180831,3,1,1,1,3,1,2,1,1,2 136 | 1181356,5,1,1,1,2,2,3,3,1,2 137 | 1182404,4,1,1,1,2,1,2,1,1,2 138 | 1182410,3,1,1,1,2,1,1,1,1,2 139 | 1183240,4,1,2,1,2,1,2,1,1,2 140 | 1183246,1,1,1,1,1,?,2,1,1,2 141 | 1183516,3,1,1,1,2,1,1,1,1,2 142 | 1183911,2,1,1,1,2,1,1,1,1,2 143 | 1183983,9,5,5,4,4,5,4,3,3,4 144 | 1184184,1,1,1,1,2,5,1,1,1,2 145 | 1184241,2,1,1,1,2,1,2,1,1,2 146 | 1184840,1,1,3,1,2,?,2,1,1,2 147 | 1185609,3,4,5,2,6,8,4,1,1,4 148 | 1185610,1,1,1,1,3,2,2,1,1,2 149 | 1187457,3,1,1,3,8,1,5,8,1,2 150 | 1187805,8,8,7,4,10,10,7,8,7,4 151 | 1188472,1,1,1,1,1,1,3,1,1,2 152 | 1189266,7,2,4,1,6,10,5,4,3,4 153 | 1189286,10,10,8,6,4,5,8,10,1,4 154 | 1190394,4,1,1,1,2,3,1,1,1,2 155 | 1190485,1,1,1,1,2,1,1,1,1,2 156 | 1192325,5,5,5,6,3,10,3,1,1,4 157 | 1193091,1,2,2,1,2,1,2,1,1,2 158 | 1193210,2,1,1,1,2,1,3,1,1,2 159 | 1193683,1,1,2,1,3,?,1,1,1,2 160 | 1196295,9,9,10,3,6,10,7,10,6,4 161 | 1196915,10,7,7,4,5,10,5,7,2,4 162 | 1197080,4,1,1,1,2,1,3,2,1,2 163 | 1197270,3,1,1,1,2,1,3,1,1,2 164 | 1197440,1,1,1,2,1,3,1,1,7,2 165 | 1197510,5,1,1,1,2,?,3,1,1,2 166 | 1197979,4,1,1,1,2,2,3,2,1,2 167 | 1197993,5,6,7,8,8,10,3,10,3,4 168 | 1198128,10,8,10,10,6,1,3,1,10,4 169 | 1198641,3,1,1,1,2,1,3,1,1,2 170 | 1199219,1,1,1,2,1,1,1,1,1,2 171 | 1199731,3,1,1,1,2,1,1,1,1,2 172 | 1199983,1,1,1,1,2,1,3,1,1,2 173 | 1200772,1,1,1,1,2,1,2,1,1,2 174 | 1200847,6,10,10,10,8,10,10,10,7,4 175 | 1200892,8,6,5,4,3,10,6,1,1,4 176 | 1200952,5,8,7,7,10,10,5,7,1,4 177 | 1201834,2,1,1,1,2,1,3,1,1,2 178 | 1201936,5,10,10,3,8,1,5,10,3,4 179 | 1202125,4,1,1,1,2,1,3,1,1,2 180 | 1202812,5,3,3,3,6,10,3,1,1,4 181 | 1203096,1,1,1,1,1,1,3,1,1,2 182 | 1204242,1,1,1,1,2,1,1,1,1,2 183 | 1204898,6,1,1,1,2,1,3,1,1,2 184 | 1205138,5,8,8,8,5,10,7,8,1,4 185 | 1205579,8,7,6,4,4,10,5,1,1,4 186 | 1206089,2,1,1,1,1,1,3,1,1,2 187 | 1206695,1,5,8,6,5,8,7,10,1,4 188 | 1206841,10,5,6,10,6,10,7,7,10,4 189 | 1207986,5,8,4,10,5,8,9,10,1,4 190 | 1208301,1,2,3,1,2,1,3,1,1,2 191 | 1210963,10,10,10,8,6,8,7,10,1,4 192 | 1211202,7,5,10,10,10,10,4,10,3,4 193 | 1212232,5,1,1,1,2,1,2,1,1,2 194 | 1212251,1,1,1,1,2,1,3,1,1,2 195 | 1212422,3,1,1,1,2,1,3,1,1,2 196 | 1212422,4,1,1,1,2,1,3,1,1,2 197 | 1213375,8,4,4,5,4,7,7,8,2,2 198 | 1213383,5,1,1,4,2,1,3,1,1,2 199 | 1214092,1,1,1,1,2,1,1,1,1,2 200 | 1214556,3,1,1,1,2,1,2,1,1,2 201 | 1214966,9,7,7,5,5,10,7,8,3,4 202 | 1216694,10,8,8,4,10,10,8,1,1,4 203 | 1216947,1,1,1,1,2,1,3,1,1,2 204 | 1217051,5,1,1,1,2,1,3,1,1,2 205 | 1217264,1,1,1,1,2,1,3,1,1,2 206 | 1218105,5,10,10,9,6,10,7,10,5,4 207 | 1218741,10,10,9,3,7,5,3,5,1,4 208 | 1218860,1,1,1,1,1,1,3,1,1,2 209 | 1218860,1,1,1,1,1,1,3,1,1,2 210 | 1219406,5,1,1,1,1,1,3,1,1,2 211 | 1219525,8,10,10,10,5,10,8,10,6,4 212 | 1219859,8,10,8,8,4,8,7,7,1,4 213 | 1220330,1,1,1,1,2,1,3,1,1,2 214 | 1221863,10,10,10,10,7,10,7,10,4,4 215 | 1222047,10,10,10,10,3,10,10,6,1,4 216 | 1222936,8,7,8,7,5,5,5,10,2,4 217 | 1223282,1,1,1,1,2,1,2,1,1,2 218 | 1223426,1,1,1,1,2,1,3,1,1,2 219 | 1223793,6,10,7,7,6,4,8,10,2,4 220 | 1223967,6,1,3,1,2,1,3,1,1,2 221 | 1224329,1,1,1,2,2,1,3,1,1,2 222 | 1225799,10,6,4,3,10,10,9,10,1,4 223 | 1226012,4,1,1,3,1,5,2,1,1,4 224 | 1226612,7,5,6,3,3,8,7,4,1,4 225 | 1227210,10,5,5,6,3,10,7,9,2,4 226 | 1227244,1,1,1,1,2,1,2,1,1,2 227 | 1227481,10,5,7,4,4,10,8,9,1,4 228 | 1228152,8,9,9,5,3,5,7,7,1,4 229 | 1228311,1,1,1,1,1,1,3,1,1,2 230 | 1230175,10,10,10,3,10,10,9,10,1,4 231 | 1230688,7,4,7,4,3,7,7,6,1,4 232 | 1231387,6,8,7,5,6,8,8,9,2,4 233 | 1231706,8,4,6,3,3,1,4,3,1,2 234 | 1232225,10,4,5,5,5,10,4,1,1,4 235 | 1236043,3,3,2,1,3,1,3,6,1,2 236 | 1241232,3,1,4,1,2,?,3,1,1,2 237 | 1241559,10,8,8,2,8,10,4,8,10,4 238 | 1241679,9,8,8,5,6,2,4,10,4,4 239 | 1242364,8,10,10,8,6,9,3,10,10,4 240 | 1243256,10,4,3,2,3,10,5,3,2,4 241 | 1270479,5,1,3,3,2,2,2,3,1,2 242 | 1276091,3,1,1,3,1,1,3,1,1,2 243 | 1277018,2,1,1,1,2,1,3,1,1,2 244 | 128059,1,1,1,1,2,5,5,1,1,2 245 | 1285531,1,1,1,1,2,1,3,1,1,2 246 | 1287775,5,1,1,2,2,2,3,1,1,2 247 | 144888,8,10,10,8,5,10,7,8,1,4 248 | 145447,8,4,4,1,2,9,3,3,1,4 249 | 167528,4,1,1,1,2,1,3,6,1,2 250 | 169356,3,1,1,1,2,?,3,1,1,2 251 | 183913,1,2,2,1,2,1,1,1,1,2 252 | 191250,10,4,4,10,2,10,5,3,3,4 253 | 1017023,6,3,3,5,3,10,3,5,3,2 254 | 1100524,6,10,10,2,8,10,7,3,3,4 255 | 1116116,9,10,10,1,10,8,3,3,1,4 256 | 1168736,5,6,6,2,4,10,3,6,1,4 257 | 1182404,3,1,1,1,2,1,1,1,1,2 258 | 1182404,3,1,1,1,2,1,2,1,1,2 259 | 1198641,3,1,1,1,2,1,3,1,1,2 260 | 242970,5,7,7,1,5,8,3,4,1,2 261 | 255644,10,5,8,10,3,10,5,1,3,4 262 | 263538,5,10,10,6,10,10,10,6,5,4 263 | 274137,8,8,9,4,5,10,7,8,1,4 264 | 303213,10,4,4,10,6,10,5,5,1,4 265 | 314428,7,9,4,10,10,3,5,3,3,4 266 | 1182404,5,1,4,1,2,1,3,2,1,2 267 | 1198641,10,10,6,3,3,10,4,3,2,4 268 | 320675,3,3,5,2,3,10,7,1,1,4 269 | 324427,10,8,8,2,3,4,8,7,8,4 270 | 385103,1,1,1,1,2,1,3,1,1,2 271 | 390840,8,4,7,1,3,10,3,9,2,4 272 | 411453,5,1,1,1,2,1,3,1,1,2 273 | 320675,3,3,5,2,3,10,7,1,1,4 274 | 428903,7,2,4,1,3,4,3,3,1,4 275 | 431495,3,1,1,1,2,1,3,2,1,2 276 | 432809,3,1,3,1,2,?,2,1,1,2 277 | 434518,3,1,1,1,2,1,2,1,1,2 278 | 452264,1,1,1,1,2,1,2,1,1,2 279 | 456282,1,1,1,1,2,1,3,1,1,2 280 | 476903,10,5,7,3,3,7,3,3,8,4 281 | 486283,3,1,1,1,2,1,3,1,1,2 282 | 486662,2,1,1,2,2,1,3,1,1,2 283 | 488173,1,4,3,10,4,10,5,6,1,4 284 | 492268,10,4,6,1,2,10,5,3,1,4 285 | 508234,7,4,5,10,2,10,3,8,2,4 286 | 527363,8,10,10,10,8,10,10,7,3,4 287 | 529329,10,10,10,10,10,10,4,10,10,4 288 | 535331,3,1,1,1,3,1,2,1,1,2 289 | 543558,6,1,3,1,4,5,5,10,1,4 290 | 555977,5,6,6,8,6,10,4,10,4,4 291 | 560680,1,1,1,1,2,1,1,1,1,2 292 | 561477,1,1,1,1,2,1,3,1,1,2 293 | 563649,8,8,8,1,2,?,6,10,1,4 294 | 601265,10,4,4,6,2,10,2,3,1,4 295 | 606140,1,1,1,1,2,?,2,1,1,2 296 | 606722,5,5,7,8,6,10,7,4,1,4 297 | 616240,5,3,4,3,4,5,4,7,1,2 298 | 61634,5,4,3,1,2,?,2,3,1,2 299 | 625201,8,2,1,1,5,1,1,1,1,2 300 | 63375,9,1,2,6,4,10,7,7,2,4 301 | 635844,8,4,10,5,4,4,7,10,1,4 302 | 636130,1,1,1,1,2,1,3,1,1,2 303 | 640744,10,10,10,7,9,10,7,10,10,4 304 | 646904,1,1,1,1,2,1,3,1,1,2 305 | 653777,8,3,4,9,3,10,3,3,1,4 306 | 659642,10,8,4,4,4,10,3,10,4,4 307 | 666090,1,1,1,1,2,1,3,1,1,2 308 | 666942,1,1,1,1,2,1,3,1,1,2 309 | 667204,7,8,7,6,4,3,8,8,4,4 310 | 673637,3,1,1,1,2,5,5,1,1,2 311 | 684955,2,1,1,1,3,1,2,1,1,2 312 | 688033,1,1,1,1,2,1,1,1,1,2 313 | 691628,8,6,4,10,10,1,3,5,1,4 314 | 693702,1,1,1,1,2,1,1,1,1,2 315 | 704097,1,1,1,1,1,1,2,1,1,2 316 | 704168,4,6,5,6,7,?,4,9,1,2 317 | 706426,5,5,5,2,5,10,4,3,1,4 318 | 709287,6,8,7,8,6,8,8,9,1,4 319 | 718641,1,1,1,1,5,1,3,1,1,2 320 | 721482,4,4,4,4,6,5,7,3,1,2 321 | 730881,7,6,3,2,5,10,7,4,6,4 322 | 733639,3,1,1,1,2,?,3,1,1,2 323 | 733639,3,1,1,1,2,1,3,1,1,2 324 | 733823,5,4,6,10,2,10,4,1,1,4 325 | 740492,1,1,1,1,2,1,3,1,1,2 326 | 743348,3,2,2,1,2,1,2,3,1,2 327 | 752904,10,1,1,1,2,10,5,4,1,4 328 | 756136,1,1,1,1,2,1,2,1,1,2 329 | 760001,8,10,3,2,6,4,3,10,1,4 330 | 760239,10,4,6,4,5,10,7,1,1,4 331 | 76389,10,4,7,2,2,8,6,1,1,4 332 | 764974,5,1,1,1,2,1,3,1,2,2 333 | 770066,5,2,2,2,2,1,2,2,1,2 334 | 785208,5,4,6,6,4,10,4,3,1,4 335 | 785615,8,6,7,3,3,10,3,4,2,4 336 | 792744,1,1,1,1,2,1,1,1,1,2 337 | 797327,6,5,5,8,4,10,3,4,1,4 338 | 798429,1,1,1,1,2,1,3,1,1,2 339 | 704097,1,1,1,1,1,1,2,1,1,2 340 | 806423,8,5,5,5,2,10,4,3,1,4 341 | 809912,10,3,3,1,2,10,7,6,1,4 342 | 810104,1,1,1,1,2,1,3,1,1,2 343 | 814265,2,1,1,1,2,1,1,1,1,2 344 | 814911,1,1,1,1,2,1,1,1,1,2 345 | 822829,7,6,4,8,10,10,9,5,3,4 346 | 826923,1,1,1,1,2,1,1,1,1,2 347 | 830690,5,2,2,2,3,1,1,3,1,2 348 | 831268,1,1,1,1,1,1,1,3,1,2 349 | 832226,3,4,4,10,5,1,3,3,1,4 350 | 832567,4,2,3,5,3,8,7,6,1,4 351 | 836433,5,1,1,3,2,1,1,1,1,2 352 | 837082,2,1,1,1,2,1,3,1,1,2 353 | 846832,3,4,5,3,7,3,4,6,1,2 354 | 850831,2,7,10,10,7,10,4,9,4,4 355 | 855524,1,1,1,1,2,1,2,1,1,2 356 | 857774,4,1,1,1,3,1,2,2,1,2 357 | 859164,5,3,3,1,3,3,3,3,3,4 358 | 859350,8,10,10,7,10,10,7,3,8,4 359 | 866325,8,10,5,3,8,4,4,10,3,4 360 | 873549,10,3,5,4,3,7,3,5,3,4 361 | 877291,6,10,10,10,10,10,8,10,10,4 362 | 877943,3,10,3,10,6,10,5,1,4,4 363 | 888169,3,2,2,1,4,3,2,1,1,2 364 | 888523,4,4,4,2,2,3,2,1,1,2 365 | 896404,2,1,1,1,2,1,3,1,1,2 366 | 897172,2,1,1,1,2,1,2,1,1,2 367 | 95719,6,10,10,10,8,10,7,10,7,4 368 | 160296,5,8,8,10,5,10,8,10,3,4 369 | 342245,1,1,3,1,2,1,1,1,1,2 370 | 428598,1,1,3,1,1,1,2,1,1,2 371 | 492561,4,3,2,1,3,1,2,1,1,2 372 | 493452,1,1,3,1,2,1,1,1,1,2 373 | 493452,4,1,2,1,2,1,2,1,1,2 374 | 521441,5,1,1,2,2,1,2,1,1,2 375 | 560680,3,1,2,1,2,1,2,1,1,2 376 | 636437,1,1,1,1,2,1,1,1,1,2 377 | 640712,1,1,1,1,2,1,2,1,1,2 378 | 654244,1,1,1,1,1,1,2,1,1,2 379 | 657753,3,1,1,4,3,1,2,2,1,2 380 | 685977,5,3,4,1,4,1,3,1,1,2 381 | 805448,1,1,1,1,2,1,1,1,1,2 382 | 846423,10,6,3,6,4,10,7,8,4,4 383 | 1002504,3,2,2,2,2,1,3,2,1,2 384 | 1022257,2,1,1,1,2,1,1,1,1,2 385 | 1026122,2,1,1,1,2,1,1,1,1,2 386 | 1071084,3,3,2,2,3,1,1,2,3,2 387 | 1080233,7,6,6,3,2,10,7,1,1,4 388 | 1114570,5,3,3,2,3,1,3,1,1,2 389 | 1114570,2,1,1,1,2,1,2,2,1,2 390 | 1116715,5,1,1,1,3,2,2,2,1,2 391 | 1131411,1,1,1,2,2,1,2,1,1,2 392 | 1151734,10,8,7,4,3,10,7,9,1,4 393 | 1156017,3,1,1,1,2,1,2,1,1,2 394 | 1158247,1,1,1,1,1,1,1,1,1,2 395 | 1158405,1,2,3,1,2,1,2,1,1,2 396 | 1168278,3,1,1,1,2,1,2,1,1,2 397 | 1176187,3,1,1,1,2,1,3,1,1,2 398 | 1196263,4,1,1,1,2,1,1,1,1,2 399 | 1196475,3,2,1,1,2,1,2,2,1,2 400 | 1206314,1,2,3,1,2,1,1,1,1,2 401 | 1211265,3,10,8,7,6,9,9,3,8,4 402 | 1213784,3,1,1,1,2,1,1,1,1,2 403 | 1223003,5,3,3,1,2,1,2,1,1,2 404 | 1223306,3,1,1,1,2,4,1,1,1,2 405 | 1223543,1,2,1,3,2,1,1,2,1,2 406 | 1229929,1,1,1,1,2,1,2,1,1,2 407 | 1231853,4,2,2,1,2,1,2,1,1,2 408 | 1234554,1,1,1,1,2,1,2,1,1,2 409 | 1236837,2,3,2,2,2,2,3,1,1,2 410 | 1237674,3,1,2,1,2,1,2,1,1,2 411 | 1238021,1,1,1,1,2,1,2,1,1,2 412 | 1238464,1,1,1,1,1,?,2,1,1,2 413 | 1238633,10,10,10,6,8,4,8,5,1,4 414 | 1238915,5,1,2,1,2,1,3,1,1,2 415 | 1238948,8,5,6,2,3,10,6,6,1,4 416 | 1239232,3,3,2,6,3,3,3,5,1,2 417 | 1239347,8,7,8,5,10,10,7,2,1,4 418 | 1239967,1,1,1,1,2,1,2,1,1,2 419 | 1240337,5,2,2,2,2,2,3,2,2,2 420 | 1253505,2,3,1,1,5,1,1,1,1,2 421 | 1255384,3,2,2,3,2,3,3,1,1,2 422 | 1257200,10,10,10,7,10,10,8,2,1,4 423 | 1257648,4,3,3,1,2,1,3,3,1,2 424 | 1257815,5,1,3,1,2,1,2,1,1,2 425 | 1257938,3,1,1,1,2,1,1,1,1,2 426 | 1258549,9,10,10,10,10,10,10,10,1,4 427 | 1258556,5,3,6,1,2,1,1,1,1,2 428 | 1266154,8,7,8,2,4,2,5,10,1,4 429 | 1272039,1,1,1,1,2,1,2,1,1,2 430 | 1276091,2,1,1,1,2,1,2,1,1,2 431 | 1276091,1,3,1,1,2,1,2,2,1,2 432 | 1276091,5,1,1,3,4,1,3,2,1,2 433 | 1277629,5,1,1,1,2,1,2,2,1,2 434 | 1293439,3,2,2,3,2,1,1,1,1,2 435 | 1293439,6,9,7,5,5,8,4,2,1,2 436 | 1294562,10,8,10,1,3,10,5,1,1,4 437 | 1295186,10,10,10,1,6,1,2,8,1,4 438 | 527337,4,1,1,1,2,1,1,1,1,2 439 | 558538,4,1,3,3,2,1,1,1,1,2 440 | 566509,5,1,1,1,2,1,1,1,1,2 441 | 608157,10,4,3,10,4,10,10,1,1,4 442 | 677910,5,2,2,4,2,4,1,1,1,2 443 | 734111,1,1,1,3,2,3,1,1,1,2 444 | 734111,1,1,1,1,2,2,1,1,1,2 445 | 780555,5,1,1,6,3,1,2,1,1,2 446 | 827627,2,1,1,1,2,1,1,1,1,2 447 | 1049837,1,1,1,1,2,1,1,1,1,2 448 | 1058849,5,1,1,1,2,1,1,1,1,2 449 | 1182404,1,1,1,1,1,1,1,1,1,2 450 | 1193544,5,7,9,8,6,10,8,10,1,4 451 | 1201870,4,1,1,3,1,1,2,1,1,2 452 | 1202253,5,1,1,1,2,1,1,1,1,2 453 | 1227081,3,1,1,3,2,1,1,1,1,2 454 | 1230994,4,5,5,8,6,10,10,7,1,4 455 | 1238410,2,3,1,1,3,1,1,1,1,2 456 | 1246562,10,2,2,1,2,6,1,1,2,4 457 | 1257470,10,6,5,8,5,10,8,6,1,4 458 | 1259008,8,8,9,6,6,3,10,10,1,4 459 | 1266124,5,1,2,1,2,1,1,1,1,2 460 | 1267898,5,1,3,1,2,1,1,1,1,2 461 | 1268313,5,1,1,3,2,1,1,1,1,2 462 | 1268804,3,1,1,1,2,5,1,1,1,2 463 | 1276091,6,1,1,3,2,1,1,1,1,2 464 | 1280258,4,1,1,1,2,1,1,2,1,2 465 | 1293966,4,1,1,1,2,1,1,1,1,2 466 | 1296572,10,9,8,7,6,4,7,10,3,4 467 | 1298416,10,6,6,2,4,10,9,7,1,4 468 | 1299596,6,6,6,5,4,10,7,6,2,4 469 | 1105524,4,1,1,1,2,1,1,1,1,2 470 | 1181685,1,1,2,1,2,1,2,1,1,2 471 | 1211594,3,1,1,1,1,1,2,1,1,2 472 | 1238777,6,1,1,3,2,1,1,1,1,2 473 | 1257608,6,1,1,1,1,1,1,1,1,2 474 | 1269574,4,1,1,1,2,1,1,1,1,2 475 | 1277145,5,1,1,1,2,1,1,1,1,2 476 | 1287282,3,1,1,1,2,1,1,1,1,2 477 | 1296025,4,1,2,1,2,1,1,1,1,2 478 | 1296263,4,1,1,1,2,1,1,1,1,2 479 | 1296593,5,2,1,1,2,1,1,1,1,2 480 | 1299161,4,8,7,10,4,10,7,5,1,4 481 | 1301945,5,1,1,1,1,1,1,1,1,2 482 | 1302428,5,3,2,4,2,1,1,1,1,2 483 | 1318169,9,10,10,10,10,5,10,10,10,4 484 | 474162,8,7,8,5,5,10,9,10,1,4 485 | 787451,5,1,2,1,2,1,1,1,1,2 486 | 1002025,1,1,1,3,1,3,1,1,1,2 487 | 1070522,3,1,1,1,1,1,2,1,1,2 488 | 1073960,10,10,10,10,6,10,8,1,5,4 489 | 1076352,3,6,4,10,3,3,3,4,1,4 490 | 1084139,6,3,2,1,3,4,4,1,1,4 491 | 1115293,1,1,1,1,2,1,1,1,1,2 492 | 1119189,5,8,9,4,3,10,7,1,1,4 493 | 1133991,4,1,1,1,1,1,2,1,1,2 494 | 1142706,5,10,10,10,6,10,6,5,2,4 495 | 1155967,5,1,2,10,4,5,2,1,1,2 496 | 1170945,3,1,1,1,1,1,2,1,1,2 497 | 1181567,1,1,1,1,1,1,1,1,1,2 498 | 1182404,4,2,1,1,2,1,1,1,1,2 499 | 1204558,4,1,1,1,2,1,2,1,1,2 500 | 1217952,4,1,1,1,2,1,2,1,1,2 501 | 1224565,6,1,1,1,2,1,3,1,1,2 502 | 1238186,4,1,1,1,2,1,2,1,1,2 503 | 1253917,4,1,1,2,2,1,2,1,1,2 504 | 1265899,4,1,1,1,2,1,3,1,1,2 505 | 1268766,1,1,1,1,2,1,1,1,1,2 506 | 1277268,3,3,1,1,2,1,1,1,1,2 507 | 1286943,8,10,10,10,7,5,4,8,7,4 508 | 1295508,1,1,1,1,2,4,1,1,1,2 509 | 1297327,5,1,1,1,2,1,1,1,1,2 510 | 1297522,2,1,1,1,2,1,1,1,1,2 511 | 1298360,1,1,1,1,2,1,1,1,1,2 512 | 1299924,5,1,1,1,2,1,2,1,1,2 513 | 1299994,5,1,1,1,2,1,1,1,1,2 514 | 1304595,3,1,1,1,1,1,2,1,1,2 515 | 1306282,6,6,7,10,3,10,8,10,2,4 516 | 1313325,4,10,4,7,3,10,9,10,1,4 517 | 1320077,1,1,1,1,1,1,1,1,1,2 518 | 1320077,1,1,1,1,1,1,2,1,1,2 519 | 1320304,3,1,2,2,2,1,1,1,1,2 520 | 1330439,4,7,8,3,4,10,9,1,1,4 521 | 333093,1,1,1,1,3,1,1,1,1,2 522 | 369565,4,1,1,1,3,1,1,1,1,2 523 | 412300,10,4,5,4,3,5,7,3,1,4 524 | 672113,7,5,6,10,4,10,5,3,1,4 525 | 749653,3,1,1,1,2,1,2,1,1,2 526 | 769612,3,1,1,2,2,1,1,1,1,2 527 | 769612,4,1,1,1,2,1,1,1,1,2 528 | 798429,4,1,1,1,2,1,3,1,1,2 529 | 807657,6,1,3,2,2,1,1,1,1,2 530 | 8233704,4,1,1,1,1,1,2,1,1,2 531 | 837480,7,4,4,3,4,10,6,9,1,4 532 | 867392,4,2,2,1,2,1,2,1,1,2 533 | 869828,1,1,1,1,1,1,3,1,1,2 534 | 1043068,3,1,1,1,2,1,2,1,1,2 535 | 1056171,2,1,1,1,2,1,2,1,1,2 536 | 1061990,1,1,3,2,2,1,3,1,1,2 537 | 1113061,5,1,1,1,2,1,3,1,1,2 538 | 1116192,5,1,2,1,2,1,3,1,1,2 539 | 1135090,4,1,1,1,2,1,2,1,1,2 540 | 1145420,6,1,1,1,2,1,2,1,1,2 541 | 1158157,5,1,1,1,2,2,2,1,1,2 542 | 1171578,3,1,1,1,2,1,1,1,1,2 543 | 1174841,5,3,1,1,2,1,1,1,1,2 544 | 1184586,4,1,1,1,2,1,2,1,1,2 545 | 1186936,2,1,3,2,2,1,2,1,1,2 546 | 1197527,5,1,1,1,2,1,2,1,1,2 547 | 1222464,6,10,10,10,4,10,7,10,1,4 548 | 1240603,2,1,1,1,1,1,1,1,1,2 549 | 1240603,3,1,1,1,1,1,1,1,1,2 550 | 1241035,7,8,3,7,4,5,7,8,2,4 551 | 1287971,3,1,1,1,2,1,2,1,1,2 552 | 1289391,1,1,1,1,2,1,3,1,1,2 553 | 1299924,3,2,2,2,2,1,4,2,1,2 554 | 1306339,4,4,2,1,2,5,2,1,2,2 555 | 1313658,3,1,1,1,2,1,1,1,1,2 556 | 1313982,4,3,1,1,2,1,4,8,1,2 557 | 1321264,5,2,2,2,1,1,2,1,1,2 558 | 1321321,5,1,1,3,2,1,1,1,1,2 559 | 1321348,2,1,1,1,2,1,2,1,1,2 560 | 1321931,5,1,1,1,2,1,2,1,1,2 561 | 1321942,5,1,1,1,2,1,3,1,1,2 562 | 1321942,5,1,1,1,2,1,3,1,1,2 563 | 1328331,1,1,1,1,2,1,3,1,1,2 564 | 1328755,3,1,1,1,2,1,2,1,1,2 565 | 1331405,4,1,1,1,2,1,3,2,1,2 566 | 1331412,5,7,10,10,5,10,10,10,1,4 567 | 1333104,3,1,2,1,2,1,3,1,1,2 568 | 1334071,4,1,1,1,2,3,2,1,1,2 569 | 1343068,8,4,4,1,6,10,2,5,2,4 570 | 1343374,10,10,8,10,6,5,10,3,1,4 571 | 1344121,8,10,4,4,8,10,8,2,1,4 572 | 142932,7,6,10,5,3,10,9,10,2,4 573 | 183936,3,1,1,1,2,1,2,1,1,2 574 | 324382,1,1,1,1,2,1,2,1,1,2 575 | 378275,10,9,7,3,4,2,7,7,1,4 576 | 385103,5,1,2,1,2,1,3,1,1,2 577 | 690557,5,1,1,1,2,1,2,1,1,2 578 | 695091,1,1,1,1,2,1,2,1,1,2 579 | 695219,1,1,1,1,2,1,2,1,1,2 580 | 824249,1,1,1,1,2,1,3,1,1,2 581 | 871549,5,1,2,1,2,1,2,1,1,2 582 | 878358,5,7,10,6,5,10,7,5,1,4 583 | 1107684,6,10,5,5,4,10,6,10,1,4 584 | 1115762,3,1,1,1,2,1,1,1,1,2 585 | 1217717,5,1,1,6,3,1,1,1,1,2 586 | 1239420,1,1,1,1,2,1,1,1,1,2 587 | 1254538,8,10,10,10,6,10,10,10,1,4 588 | 1261751,5,1,1,1,2,1,2,2,1,2 589 | 1268275,9,8,8,9,6,3,4,1,1,4 590 | 1272166,5,1,1,1,2,1,1,1,1,2 591 | 1294261,4,10,8,5,4,1,10,1,1,4 592 | 1295529,2,5,7,6,4,10,7,6,1,4 593 | 1298484,10,3,4,5,3,10,4,1,1,4 594 | 1311875,5,1,2,1,2,1,1,1,1,2 595 | 1315506,4,8,6,3,4,10,7,1,1,4 596 | 1320141,5,1,1,1,2,1,2,1,1,2 597 | 1325309,4,1,2,1,2,1,2,1,1,2 598 | 1333063,5,1,3,1,2,1,3,1,1,2 599 | 1333495,3,1,1,1,2,1,2,1,1,2 600 | 1334659,5,2,4,1,1,1,1,1,1,2 601 | 1336798,3,1,1,1,2,1,2,1,1,2 602 | 1344449,1,1,1,1,1,1,2,1,1,2 603 | 1350568,4,1,1,1,2,1,2,1,1,2 604 | 1352663,5,4,6,8,4,1,8,10,1,4 605 | 188336,5,3,2,8,5,10,8,1,2,4 606 | 352431,10,5,10,3,5,8,7,8,3,4 607 | 353098,4,1,1,2,2,1,1,1,1,2 608 | 411453,1,1,1,1,2,1,1,1,1,2 609 | 557583,5,10,10,10,10,10,10,1,1,4 610 | 636375,5,1,1,1,2,1,1,1,1,2 611 | 736150,10,4,3,10,3,10,7,1,2,4 612 | 803531,5,10,10,10,5,2,8,5,1,4 613 | 822829,8,10,10,10,6,10,10,10,10,4 614 | 1016634,2,3,1,1,2,1,2,1,1,2 615 | 1031608,2,1,1,1,1,1,2,1,1,2 616 | 1041043,4,1,3,1,2,1,2,1,1,2 617 | 1042252,3,1,1,1,2,1,2,1,1,2 618 | 1057067,1,1,1,1,1,?,1,1,1,2 619 | 1061990,4,1,1,1,2,1,2,1,1,2 620 | 1073836,5,1,1,1,2,1,2,1,1,2 621 | 1083817,3,1,1,1,2,1,2,1,1,2 622 | 1096352,6,3,3,3,3,2,6,1,1,2 623 | 1140597,7,1,2,3,2,1,2,1,1,2 624 | 1149548,1,1,1,1,2,1,1,1,1,2 625 | 1174009,5,1,1,2,1,1,2,1,1,2 626 | 1183596,3,1,3,1,3,4,1,1,1,2 627 | 1190386,4,6,6,5,7,6,7,7,3,4 628 | 1190546,2,1,1,1,2,5,1,1,1,2 629 | 1213273,2,1,1,1,2,1,1,1,1,2 630 | 1218982,4,1,1,1,2,1,1,1,1,2 631 | 1225382,6,2,3,1,2,1,1,1,1,2 632 | 1235807,5,1,1,1,2,1,2,1,1,2 633 | 1238777,1,1,1,1,2,1,1,1,1,2 634 | 1253955,8,7,4,4,5,3,5,10,1,4 635 | 1257366,3,1,1,1,2,1,1,1,1,2 636 | 1260659,3,1,4,1,2,1,1,1,1,2 637 | 1268952,10,10,7,8,7,1,10,10,3,4 638 | 1275807,4,2,4,3,2,2,2,1,1,2 639 | 1277792,4,1,1,1,2,1,1,1,1,2 640 | 1277792,5,1,1,3,2,1,1,1,1,2 641 | 1285722,4,1,1,3,2,1,1,1,1,2 642 | 1288608,3,1,1,1,2,1,2,1,1,2 643 | 1290203,3,1,1,1,2,1,2,1,1,2 644 | 1294413,1,1,1,1,2,1,1,1,1,2 645 | 1299596,2,1,1,1,2,1,1,1,1,2 646 | 1303489,3,1,1,1,2,1,2,1,1,2 647 | 1311033,1,2,2,1,2,1,1,1,1,2 648 | 1311108,1,1,1,3,2,1,1,1,1,2 649 | 1315807,5,10,10,10,10,2,10,10,10,4 650 | 1318671,3,1,1,1,2,1,2,1,1,2 651 | 1319609,3,1,1,2,3,4,1,1,1,2 652 | 1323477,1,2,1,3,2,1,2,1,1,2 653 | 1324572,5,1,1,1,2,1,2,2,1,2 654 | 1324681,4,1,1,1,2,1,2,1,1,2 655 | 1325159,3,1,1,1,2,1,3,1,1,2 656 | 1326892,3,1,1,1,2,1,2,1,1,2 657 | 1330361,5,1,1,1,2,1,2,1,1,2 658 | 1333877,5,4,5,1,8,1,3,6,1,2 659 | 1334015,7,8,8,7,3,10,7,2,3,4 660 | 1334667,1,1,1,1,2,1,1,1,1,2 661 | 1339781,1,1,1,1,2,1,2,1,1,2 662 | 1339781,4,1,1,1,2,1,3,1,1,2 663 | 13454352,1,1,3,1,2,1,2,1,1,2 664 | 1345452,1,1,3,1,2,1,2,1,1,2 665 | 1345593,3,1,1,3,2,1,2,1,1,2 666 | 1347749,1,1,1,1,2,1,1,1,1,2 667 | 1347943,5,2,2,2,2,1,1,1,2,2 668 | 1348851,3,1,1,1,2,1,3,1,1,2 669 | 1350319,5,7,4,1,6,1,7,10,3,4 670 | 1350423,5,10,10,8,5,5,7,10,1,4 671 | 1352848,3,10,7,8,5,8,7,4,1,4 672 | 1353092,3,2,1,2,2,1,3,1,1,2 673 | 1354840,2,1,1,1,2,1,3,1,1,2 674 | 1354840,5,3,2,1,3,1,1,1,1,2 675 | 1355260,1,1,1,1,2,1,2,1,1,2 676 | 1365075,4,1,4,1,2,1,1,1,1,2 677 | 1365328,1,1,2,1,2,1,2,1,1,2 678 | 1368267,5,1,1,1,2,1,1,1,1,2 679 | 1368273,1,1,1,1,2,1,1,1,1,2 680 | 1368882,2,1,1,1,2,1,1,1,1,2 681 | 1369821,10,10,10,10,5,10,10,10,7,4 682 | 1371026,5,10,10,10,4,10,5,6,3,4 683 | 1371920,5,1,1,1,2,1,3,2,1,2 684 | 466906,1,1,1,1,2,1,1,1,1,2 685 | 466906,1,1,1,1,2,1,1,1,1,2 686 | 534555,1,1,1,1,2,1,1,1,1,2 687 | 536708,1,1,1,1,2,1,1,1,1,2 688 | 566346,3,1,1,1,2,1,2,3,1,2 689 | 603148,4,1,1,1,2,1,1,1,1,2 690 | 654546,1,1,1,1,2,1,1,1,8,2 691 | 654546,1,1,1,3,2,1,1,1,1,2 692 | 695091,5,10,10,5,4,5,4,4,1,4 693 | 714039,3,1,1,1,2,1,1,1,1,2 694 | 763235,3,1,1,1,2,1,2,1,2,2 695 | 776715,3,1,1,1,3,2,1,1,1,2 696 | 841769,2,1,1,1,2,1,1,1,1,2 697 | 888820,5,10,10,3,7,3,8,10,2,4 698 | 897471,4,8,6,4,3,4,10,6,1,4 699 | 897471,4,8,8,5,4,5,10,4,1,4 700 | --------------------------------------------------------------------------------