SVD를 사용한 추천 알고리즘 파이썬 코드 공유


본 포스팅에선 SVD를 이용한 추천 시스템 실습 시 사용했던 파이썬 코드를 공유합니다.

import os
import pandas as pd
from surprise import SVD
from surprise import Dataset
from surprise import dump

data = Dataset.load_builtin('ml-100k')
Dataset ml-100k could not be found. Do you want to download it? [Y/n] Y
Trying to download dataset from http://files.grouplens.org/datasets/movielens/ml-100k.zip...
Done! Dataset ml-100k has been saved to /Users/apple/.surprise_data/ml-100k

In [9]:

pip install scikit-surprise
The following command must be run outside of the IPython shell:

    $ pip install scikit-surprise

The Python package manager (pip) can only be used from outside of IPython.
Please reissue the `pip` command in a separate terminal or command prompt.

See the Python documentation for more informations on how to install packages:

    https://docs.python.org/3/installing/

In [13]:

df = pd.DataFrame(data.raw_ratings, columns=["user","item","rate","id"])

In [14]:

df.head()
# 943 명의 사용자가 1682개의 영화에 대해 평점을 매긴 100,000개의 데이터
# user : 사용자 id
# item : 영화 id
# rate : 사용자가 영화를 평가한 점수
# id : 타임스탬프

Out[14]:

useritemrateid
01962423.0881250949
11863023.0891717742
2223771.0878887116
3244512.0880606923
41663461.0886397596

In [15]:

#트레이닝 * 모델 저장
import os

from surprise import SVD
from surprise import Dataset
from surprise import dump

data = Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()

algo = SVD()
algo.train(trainset)

# 'original' 알고리즘이 컴퓨팅 예상을 한다.
predictions = algo.test(trainset.build_testset())

#Dump algorithm and reload it.
file_name = os.path.expanduser('dump_file')
dump.dump(file_name, algo=algo)
_, loaded_algo = dump.load(file_name)

#we now ensure the algo is still the same by checking the predictions.
predictions_loaded_algo = loaded_algo.test(trainset.build_testset())
assert predictions == predictions_loaded_algo
print('Predictions are the same')
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py:51: UserWarning: train() is deprecated. Use fit() instead
  warnings.warn('train() is deprecated. Use fit() instead', UserWarning)
Predictions are the same

In [16]:

from surprise import Dataset
from surprise import SVD
from surprise import accuracy

data = Dataset.load_builtin('ml-100k')

algo = SVD()

trainset = data.build_full_trainset()
algo.train(trainset)

testset = trainset.build_testset()
predictions = algo.test(testset)

accuracy.rmse(predictions)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py:51: UserWarning: train() is deprecated. Use fit() instead
  warnings.warn('train() is deprecated. Use fit() instead', UserWarning)
RMSE: 0.6747

Out[16]:

0.6746845355925309

In [18]:

#모델 최적화
import random

from surprise import SVD
from surprise import Dataset
from surprise import accuracy
from surprise import GridSearch

#full dataset 로드
data = Dataset.load_builtin('ml-100k')
data.split(n_folds=3)

#최적의 알고리즘을 찾는과정
print('Grid Search. . .')
param_grid = {'n_epochs': [5,10], 'lr_all':[0.002, 0.005]}
grid_search = GridSearch(SVD, param_grid, measures=['RMSE'],verbose=1)
print(grid_search.best_params)
grid_search.evaluate(data)
Grid Search. . .
defaultdict(<class 'list'>, {})
Running grid search for the following parameter combinations:
{'n_epochs': 5, 'lr_all': 0.002}
{'n_epochs': 5, 'lr_all': 0.005}
{'n_epochs': 10, 'lr_all': 0.002}
{'n_epochs': 10, 'lr_all': 0.005}
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:232: UserWarning: The GridSearch() class is deprecated. Please use model_selection.GridSearchCV instead.
  'model_selection.GridSearchCV instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:66: UserWarning: The evaluate() method is deprecated. Please use model_selection.cross_validate() instead.
  'model_selection.cross_validate() instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/dataset.py:193: UserWarning: Using data.split() or using load_from_folds() without using a CV iterator is now deprecated. 
  UserWarning)
Resulsts:
{'n_epochs': 5, 'lr_all': 0.002}
{'RMSE': 0.9897614364808488}
----------
{'n_epochs': 5, 'lr_all': 0.005}
{'RMSE': 0.9645422178546349}
----------
{'n_epochs': 10, 'lr_all': 0.002}
{'RMSE': 0.9698703469740928}
----------
{'n_epochs': 10, 'lr_all': 0.005}
{'RMSE': 0.9539501234622237}
----------

In [24]:

from collections import defaultdict

from surprise import SVD
from surprise import Dataset

def get_top_n(predictions, n=10):
    ''' Return the top-N recommendations for each user from a set of predictions.
    
    Args:
        predictions(list of Prediction objects): The list of predictions,
        as
                returned by the test method of an algorithm.
            n(int): The number of recommendation to output for each user.
            Default is 10.
            
    Returns:
    Adict where keys are users (raw) ids and values are lists of tuples:
        [(raw item id, rating estimation), . . .] of size n.
        
    '''
    
    #first map the predictions to each other user.
    top_n = defaultdict(list)
    for uid, iid, true_r, est, _ in predictions:
        top_n[uid].append((iid,est))
    
    for uid, user_ratings in top_n.items():
        user_ratings.sort(key=lambda x: x[1], reverse=True)
        top_n[uid] = user_ratings[:n]
    
    return top_n

#first train an SVD algorithm on the movielens dataset.
data= Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()
algo=SVD()
algo.train(trainset)

#Than predict ratings for all pairs (u,i) that are NOT in the training set.
testset = trainset.build_anti_testset()
predictions = algo.test(testset)

top_n = get_top_n(predictions, n =10)

#print the recommended items for each user
for uid, user_ratings in top_n.items():
    print(uid, [iid for (iid, _) in user_ratings])
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/prediction_algorithms/algo_base.py:51: UserWarning: train() is deprecated. Use fit() instead
  warnings.warn('train() is deprecated. Use fit() instead', UserWarning)
196 ['483', '408', '169', '1449', '480', '427', '191', '174', '484', '657']
186 ['316', '50', '318', '15', '483', '172', '315', '515', '513', '132']
22 ['22', '520', '64', '483', '114', '318', '12', '169', '98', '496']
244 ['178', '285', '408', '98', '14', '1142', '187', '190', '59', '127']
166 ['169', '174', '114', '173', '50', '357', '64', '181', '408', '223']
298 ['64', '12', '173', '313', '191', '169', '480', '96', '657', '408']
115 ['179', '134', '180', '483', '168', '199', '175', '709', '114', '652']
253 ['169', '302', '174', '178', '251', '498', '272', '313', '603', '480']
305 ['603', '515', '114', '657', '132', '513', '525', '137', '1142', '493']
6 ['654', '114', '179', '172', '603', '428', '657', '1142', '709', '659']
62 ['408', '169', '223', '187', '496', '79', '902', '1142', '427', '647']
286 ['178', '474', '12', '302', '64', '603', '657', '427', '513', '606']
200 ['178', '64', '12', '480', '427', '181', '272', '603', '114', '963']
210 ['64', '408', '169', '479', '427', '963', '603', '515', '285', '191']
224 ['64', '79', '174', '169', '202', '95', '143', '651', '272', '114']
303 ['180', '528', '190', '48', '169', '521', '887', '114', '481', '656']
122 ['302', '89', '408', '479', '199', '114', '134', '173', '483', '654']
194 ['603', '963', '480', '169', '484', '114', '430', '429', '14', '316']
291 ['515', '127', '313', '318', '190', '357', '205', '203', '483', '520']
234 ['302', '514', '251', '408', '169', '652', '315', '272', '529', '19']
119 ['169', '483', '408', '923', '191', '652', '318', '57', '936', '114']
167 ['408', '483', '515', '251', '194', '474', '705', '127', '611', '178']
299 ['923', '178', '661', '657', '357', '963', '427', '654', '64', '272']
308 ['173', '114', '963', '474', '272', '251', '923', '190', '1143', '529']
95 ['313', '318', '408', '258', '169', '12', '435', '427', '251', '272']
38 ['143', '269', '251', '64', '1449', '656', '612', '663', '427', '971']
102 ['169', '114', '483', '318', '408', '488', '496', '603', '963', '1194']
63 ['127', '12', '357', '56', '427', '474', '64', '318', '192', '195']
160 ['12', '64', '134', '318', '654', '98', '709', '657', '963', '177']
50 ['302', '474', '483', '408', '98', '318', '205', '127', '482', '603']
301 ['169', '313', '302', '189', '603', '135', '316', '513', '165', '272']
225 ['100', '483', '408', '56', '484', '191', '169', '513', '474', '661']
290 ['173', '313', '169', '96', '79', '963', '178', '480', '479', '657']
97 ['483', '315', '313', '1449', '272', '694', '1007', '963', '1039', '198']
157 ['483', '408', '169', '480', '654', '114', '187', '657', '357', '488']
181 ['313', '316', '79', '64', '735', '82', '204', '272', '169', '310']
278 ['12', '169', '408', '50', '64', '134', '483', '199', '285', '45']
276 ['134', '191', '177', '190', '178', '114', '520', '480', '651', '205']
7 ['169', '518', '189', '276', '320', '735', '408', '705', '923', '114']
10 ['318', '408', '114', '169', '515', '136', '520', '272', '83', '316']
284 ['50', '318', '172', '64', '173', '12', '357', '483', '83', '603']
201 ['484', '135', '246', '136', '205', '474', '14', '169', '177', '661']
287 ['603', '483', '408', '134', '515', '96', '114', '318', '48', '657']
246 ['7', '474', '530', '179', '302', '603', '479', '52', '127', '64']
242 ['98', '603', '515', '427', '272', '79', '48', '483', '408', '178']
249 ['474', '127', '134', '654', '285', '515', '488', '178', '482', '498']
99 ['357', '169', '127', '408', '603', '114', '427', '195', '178', '318']
178 ['169', '496', '272', '251', '408', '114', '963', '732', '515', '923']
251 ['483', '408', '174', '357', '114', '318', '205', '127', '659', '134']
81 ['313', '50', '173', '187', '174', '408', '64', '182', '114', '496']
260 ['174', '172', '483', '318', '89', '169', '50', '114', '511', '478']
25 ['64', '318', '272', '22', '313', '178', '515', '651', '963', '57']
59 ['408', '246', '475', '248', '144', '154', '223', '1142', '693', '320']
72 ['185', '178', '169', '216', '482', '14', '513', '483', '285', '659']
87 ['173', '313', '114', '483', '143', '28', '1', '95', '478', '479']
42 ['313', '22', '483', '480', '651', '114', '133', '520', '169', '511']
292 ['134', '191', '318', '114', '89', '480', '513', '178', '170', '185']
20 ['169', '59', '483', '923', '408', '178', '1449', '315', '657', '316']
13 ['633', '923', '487', '1449', '641', '479', '169', '644', '496', '1142']
138 ['408', '169', '657', '134', '923', '114', '64', '57', '528', '59']
60 ['408', '169', '315', '923', '318', '114', '657', '1194', '189', '512']
57 ['169', '657', '272', '172', '408', '483', '479', '489', '313', '174']
223 ['174', '484', '64', '215', '50', '199', '316', '181', '114', '1007']
189 ['427', '12', '515', '408', '1142', '169', '114', '488', '357', '633']
243 ['408', '963', '134', '513', '169', '657', '56', '603', '921', '132']
92 ['483', '357', '285', '603', '114', '127', '427', '480', '170', '520']
241 ['318', '178', '483', '64', '169', '408', '98', '657', '357', '963']
254 ['169', '318', '272', '114', '408', '651', '215', '173', '963', '705']
293 ['276', '318', '408', '269', '191', '511', '428', '178', '656', '1142']
127 ['302', '98', '408', '357', '169', '213', '114', '223', '12', '963']
222 ['496', '203', '429', '963', '190', '272', '23', '114', '169', '1143']
267 ['134', '513', '178', '357', '272', '285', '173', '603', '318', '511']
11 ['483', '272', '408', '174', '50', '485', '172', '114', '482', '251']
8 ['357', '192', '408', '114', '474', '318', '483', '191', '234', '100']
162 ['408', '178', '12', '169', '513', '64', '318', '83', '480', '114']
279 ['745', '513', '589', '475', '86', '896', '134', '45', '516', '921']
145 ['127', '165', '357', '114', '210', '484', '520', '136', '531', '272']
28 ['318', '64', '169', '275', '83', '496', '515', '357', '408', '190']
135 ['169', '318', '408', '114', '313', '657', '285', '641', '199', '134']
32 ['318', '64', '178', '98', '174', '496', '127', '603', '493', '143']
90 ['114', '408', '169', '484', '513', '615', '487', '963', '165', '434']
216 ['127', '178', '180', '89', '114', '603', '963', '483', '521', '484']
250 ['285', '513', '408', '318', '493', '178', '156', '83', '61', '479']
271 ['483', '1142', '408', '655', '966', '484', '251', '488', '114', '1007']
265 ['169', '114', '657', '64', '318', '251', '272', '216', '603', '709']
198 ['12', '408', '134', '114', '199', '169', '641', '479', '513', '483']
168 ['64', '50', '318', '427', '174', '22', '483', '515', '172', '169']
110 ['98', '318', '515', '483', '275', '478', '316', '480', '114', '136']
58 ['23', '187', '86', '479', '707', '513', '285', '1039', '179', '170']
237 ['515', '114', '272', '318', '60', '12', '641', '56', '316', '427']
94 ['285', '276', '408', '661', '513', '48', '641', '251', '856', '169']
128 ['127', '515', '513', '318', '357', '59', '474', '511', '169', '251']
44 ['12', '408', '187', '199', '178', '519', '127', '169', '192', '302']
264 ['178', '318', '64', '357', '199', '169', '50', '251', '223', '313']
41 ['513', '408', '134', '114', '483', '12', '641', '251', '302', '479']
82 ['313', '427', '114', '408', '48', '187', '173', '1194', '12', '923']
262 ['694', '408', '474', '498', '134', '483', '513', '197', '430', '641']
174 ['318', '64', '129', '48', '603', '258', '170', '180', '89', '275']
43 ['515', '96', '87', '357', '22', '657', '603', '170', '136', '1019']
84 ['483', '133', '657', '513', '169', '285', '493', '50', '474', '127']
269 ['408', '709', '1021', '1142', '641', '199', '45', '324', '92', '14']
259 ['127', '408', '182', '427', '480', '23', '513', '197', '114', '318']
85 ['408', '302', '169', '114', '251', '178', '603', '12', '19', '285']
213 ['169', '114', '427', '178', '272', '408', '137', '191', '315', '657']
121 ['251', '178', '1142', '603', '483', '173', '187', '199', '64', '408']
49 ['285', '474', '156', '169', '134', '603', '654', '408', '137', '276']
155 ['483', '98', '318', '187', '178', '64', '169', '408', '173', '603']
68 ['12', '483', '484', '408', '135', '603', '318', '168', '480', '474']
172 ['169', '318', '98', '272', '114', '408', '357', '302', '12', '285']
19 ['408', '169', '357', '603', '89', '657', '64', '528', '285', '963']
268 ['23', '177', '187', '318', '430', '513', '45', '603', '48', '611']
5 ['134', '175', '251', '199', '114', '177', '127', '7', '484', '654']
80 ['318', '56', '963', '169', '127', '923', '12', '408', '173', '528']
66 ['12', '64', '408', '963', '172', '174', '173', '657', '134', '513']
18 ['657', '652', '641', '315', '124', '656', '316', '511', '606', '481']
26 ['64', '318', '511', '272', '169', '22', '483', '357', '963', '251']
130 ['483', '408', '318', '507', '15', '189', '114', '169', '657', '178']
256 ['515', '483', '69', '318', '300', '496', '28', '530', '479', '313']
1 ['519', '483', '408', '302', '511', '661', '427', '475', '313', '646']
56 ['318', '496', '12', '187', '302', '251', '272', '357', '603', '313']
15 ['318', '98', '427', '64', '511', '515', '196', '169', '191', '478']
207 ['114', '496', '408', '136', '50', '651', '480', '603', '272', '169']
232 ['923', '480', '124', '285', '12', '89', '134', '190', '513', '654']
52 ['515', '483', '408', '178', '64', '357', '169', '50', '137', '320']
161 ['603', '357', '169', '189', '114', '657', '963', '408', '285', '12']
148 ['483', '480', '654', '963', '318', '657', '179', '835', '12', '513']
125 ['265', '121', '228', '378', '736', '316', '96', '313', '515', '684']
83 ['143', '318', '402', '12', '313', '87', '1019', '513', '257', '272']
272 ['603', '64', '272', '169', '251', '408', '302', '479', '657', '223']
151 ['285', '648', '527', '515', '1142', '493', '923', '656', '262', '116']
54 ['408', '64', '169', '528', '191', '173', '198', '651', '134', '209']
16 ['272', '82', '169', '173', '50', '651', '313', '187', '515', '210']
91 ['12', '169', '272', '144', '190', '302', '114', '166', '316', '89']
294 ['408', '12', '64', '318', '205', '98', '474', '357', '480', '192']
229 ['483', '408', '127', '511', '192', '474', '134', '513', '963', '480']
36 ['427', '480', '408', '169', '50', '172', '114', '483', '83', '474']
70 ['318', '178', '64', '114', '427', '603', '98', '127', '480', '513']
14 ['169', '512', '513', '134', '652', '641', '483', '1449', '199', '963']
295 ['603', '272', '408', '178', '64', '199', '169', '57', '488', '607']
233 ['170', '408', '479', '178', '651', '427', '657', '59', '1449', '190']
214 ['923', '474', '657', '613', '480', '515', '1194', '709', '525', '963']
192 ['12', '603', '318', '64', '173', '480', '483', '136', '357', '168']
100 ['483', '474', '59', '169', '511', '484', '127', '641', '482', '408']
307 ['318', '513', '134', '199', '357', '480', '493', '12', '45', '165']
297 ['318', '408', '511', '483', '134', '513', '493', '169', '285', '661']
193 ['64', '483', '498', '133', '408', '318', '191', '169', '132', '480']
113 ['272', '114', '169', '64', '313', '318', '172', '408', '12', '174']
275 ['603', '64', '483', '272', '316', '318', '178', '12', '114', '480']
219 ['134', '408', '169', '514', '483', '89', '318', '474', '199', '19']
218 ['169', '185', '285', '192', '408', '189', '318', '493', '302', '114']
123 ['178', '603', '199', '357', '318', '641', '136', '59', '408', '170']
158 ['318', '64', '357', '479', '641', '603', '178', '496', '1142', '480']
302 ['64', '12', '357', '318', '169', '657', '127', '603', '178', '479']
23 ['513', '169', '923', '168', '12', '114', '474', '285', '199', '657']
296 ['169', '173', '408', '479', '318', '8', '512', '156', '496', '174']
33 ['169', '173', '114', '172', '408', '64', '519', '963', '174', '272']
154 ['127', '169', '318', '408', '134', '64', '603', '114', '513', '209']
77 ['12', '169', '285', '178', '530', '408', '516', '603', '652', '657']
270 ['1137', '515', '480', '496', '479', '272', '14', '483', '408', '178']
187 ['408', '98', '480', '603', '483', '657', '169', '511', '519', '178']
170 ['483', '408', '318', '169', '316', '498', '515', '603', '190', '114']
101 ['64', '169', '318', '98', '603', '357', '313', '187', '427', '114']
184 ['603', '242', '408', '136', '251', '316', '178', '513', '12', '320']
112 ['483', '320', '318', '98', '169', '408', '493', '50', '1449', '198']
133 ['408', '178', '12', '64', '318', '172', '474', '603', '173', '190']
215 ['12', '114', '408', '178', '169', '603', '479', '427', '318', '493']
69 ['64', '318', '178', '483', '251', '136', '127', '513', '316', '23']
104 ['318', '64', '174', '169', '483', '172', '251', '178', '603', '515']
240 ['169', '657', '318', '64', '12', '479', '515', '357', '408', '483']
144 ['483', '427', '515', '408', '520', '498', '114', '736', '132', '496']
191 ['169', '114', '963', '98', '483', '12', '50', '408', '64', '513']
61 ['98', '64', '357', '408', '114', '923', '169', '654', '318', '12']
142 ['64', '12', '318', '302', '127', '479', '603', '178', '480', '357']
177 ['134', '474', '114', '285', '408', '603', '427', '923', '480', '185']
203 ['483', '114', '318', '408', '98', '313', '169', '511', '174', '272']
21 ['134', '318', '357', '180', '23', '191', '474', '238', '251', '192']
197 ['173', '28', '64', '12', '204', '169', '318', '520', '191', '114']
134 ['318', '169', '178', '134', '603', '98', '114', '168', '136', '496']
180 ['647', '661', '408', '89', '23', '484', '114', '178', '1512', '507']
236 ['408', '48', '357', '923', '197', '511', '513', '169', '603', '480']
263 ['178', '493', '169', '251', '302', '513', '313', '12', '923', '114']
109 ['300', '313', '114', '272', '1063', '746', '651', '515', '316', '611']
64 ['408', '483', '169', '178', '192', '479', '134', '474', '657', '223']
114 ['114', '408', '169', '302', '657', '603', '170', '963', '134', '513']
239 ['285', '525', '60', '487', '813', '408', '709', '59', '169', '1194']
117 ['127', '318', '89', '114', '408', '190', '513', '169', '59', '515']
65 ['408', '169', '480', '272', '496', '189', '114', '483', '57', '657']
137 ['98', '603', '196', '480', '483', '408', '318', '189', '357', '484']
257 ['134', '318', '474', '114', '483', '302', '408', '513', '48', '197']
111 ['318', '357', '64', '12', '483', '408', '474', '603', '480', '169']
285 ['408', '50', '272', '483', '474', '114', '187', '511', '173', '318']
96 ['313', '272', '302', '114', '651', '169', '22', '513', '199', '515']
116 ['64', '114', '483', '192', '923', '169', '182', '208', '178', '134']
73 ['169', '134', '408', '185', '513', '654', '45', '182', '963', '641']
221 ['603', '114', '134', '89', '169', '654', '657', '357', '408', '963']
235 ['169', '408', '641', '187', '134', '114', '180', '479', '178', '199']
164 ['302', '98', '427', '272', '178', '318', '64', '484', '169', '12']
281 ['169', '64', '318', '98', '408', '191', '963', '483', '272', '1']
182 ['408', '483', '173', '478', '12', '480', '64', '513', '187', '192']
129 ['408', '515', '483', '285', '357', '14', '427', '480', '603', '275']
45 ['169', '318', '64', '272', '251', '408', '173', '12', '134', '313']
131 ['169', '318', '12', '408', '134', '603', '178', '192', '191', '223']
230 ['318', '520', '705', '272', '169', '735', '88', '178', '966', '194']
126 ['318', '357', '408', '603', '285', '480', '178', '64', '483', '114']
231 ['318', '169', '64', '515', '357', '603', '963', '98', '272', '480']
280 ['169', '285', '603', '488', '657', '178', '134', '475', '45', '607']
288 ['483', '496', '709', '603', '963', '285', '315', '705', '657', '655']
152 ['302', '603', '427', '208', '174', '479', '172', '408', '178', '127']
217 ['318', '705', '237', '484', '98', '178', '8', '611', '603', '515']
79 ['318', '408', '178', '98', '657', '498', '963', '735', '479', '603']
75 ['318', '603', '320', '178', '185', '195', '98', '480', '60', '23']
245 ['169', '318', '657', '496', '64', '114', '173', '603', '98', '498']
282 ['318', '169', '488', '79', '178', '483', '657', '272', '174', '923']
78 ['318', '169', '603', '12', '408', '178', '98', '484', '64', '515']
118 ['242', '302', '144', '194', '196', '515', '165', '480', '195', '479']
283 ['98', '272', '357', '114', '603', '169', '64', '483', '12', '318']
171 ['50', '169', '12', '114', '172', '408', '178', '483', '318', '480']
107 ['127', '408', '483', '427', '318', '705', '654', '173', '12', '603']
226 ['313', '603', '318', '64', '272', '496', '529', '173', '483', '515']
306 ['483', '64', '302', '515', '12', '134', '127', '169', '272', '114']
173 ['474', '603', '515', '275', '479', '272', '483', '408', '178', '318']
185 ['483', '496', '408', '98', '603', '12', '64', '170', '136', '169']
150 ['172', '483', '318', '169', '408', '515', '168', '174', '694', '357']
274 ['603', '515', '408', '127', '64', '357', '169', '511', '513', '963']
188 ['496', '258', '169', '12', '963', '520', '603', '479', '408', '114']
48 ['64', '12', '114', '169', '318', '272', '127', '173', '408', '23']
311 ['169', '114', '408', '313', '190', '316', '963', '246', '531', '57']
165 ['483', '408', '114', '59', '480', '657', '189', '357', '313', '56']
208 ['50', '173', '64', '318', '169', '174', '178', '483', '496', '22']
2 ['318', '357', '169', '114', '483', '408', '165', '64', '657', '515']
205 ['127', '98', '64', '169', '318', '511', '56', '12', '357', '408']
248 ['408', '56', '134', '357', '603', '12', '192', '654', '318', '528']
93 ['483', '318', '408', '178', '606', '513', '169', '313', '603', '709']
159 ['169', '313', '513', '189', '98', '135', '181', '114', '519', '315']
146 ['169', '98', '408', '519', '357', '511', '603', '478', '611', '64']
29 ['408', '134', '64', '515', '169', '603', '483', '172', '318', '48']
156 ['483', '114', '513', '427', '408', '511', '199', '603', '498', '316']
37 ['408', '318', '114', '427', '64', '479', '199', '98', '178', '12']
141 ['316', '241', '478', '513', '57', '98', '136', '660', '493', '59']
195 ['318', '174', '64', '178', '114', '50', '172', '357', '302', '511']
108 ['318', '408', '483', '178', '657', '169', '480', '488', '603', '64']
47 ['427', '483', '318', '408', '606', '143', '114', '170', '136', '272']
255 ['156', '127', '134', '318', '192', '205', '475', '114', '64', '408']
89 ['318', '186', '520', '205', '178', '484', '659', '204', '134', '199']
140 ['318', '483', '603', '657', '479', '408', '285', '178', '174', '169']
190 ['169', '98', '318', '408', '12', '189', '174', '64', '190', '1449']
24 ['408', '169', '50', '187', '114', '657', '483', '251', '189', '474']
17 ['318', '169', '190', '474', '178', '189', '12', '23', '136', '408']
313 ['302', '408', '513', '12', '169', '963', '709', '530', '656', '179']
53 ['318', '408', '357', '483', '496', '427', '603', '12', '479', '657']
124 ['169', '134', '513', '408', '923', '114', '603', '1449', '178', '511']
149 ['408', '169', '483', '50', '189', '511', '205', '187', '318', '64']
176 ['408', '427', '169', '480', '657', '474', '488', '603', '318', '9']
106 ['408', '603', '357', '169', '173', '515', '272', '114', '483', '170']
312 ['318', '12', '127', '302', '1194', '251', '192', '129', '64', '963']
175 ['427', '408', '318', '174', '173', '480', '963', '169', '479', '482']
153 ['318', '603', '275', '285', '408', '98', '185', '513', '923', '657']
220 ['318', '408', '169', '963', '657', '483', '484', '12', '114', '8']
143 ['496', '178', '169', '603', '50', '480', '12', '98', '479', '173']
199 ['127', '50', '483', '357', '12', '603', '187', '318', '1142', '173']
202 ['169', '12', '513', '50', '511', '181', '272', '178', '98', '519']
277 ['114', '56', '483', '408', '357', '169', '64', '318', '98', '657']
206 ['191', '318', '187', '192', '50', '408', '652', '480', '651', '487']
76 ['483', '45', '134', '187', '114', '127', '132', '515', '408', '251']
314 ['265', '272', '79', '174', '315', '222', '515', '181', '82', '313']
136 ['408', '483', '178', '923', '480', '513', '12', '657', '114', '285']
179 ['114', '742', '357', '12', '64', '183', '515', '169', '318', '659']
4 ['474', '98', '603', '100', '515', '498', '23', '479', '272', '48']
304 ['98', '318', '316', '56', '603', '483', '114', '496', '484', '100']
3 ['483', '178', '285', '427', '408', '50', '1449', '603', '169', '315']
227 ['483', '114', '134', '169', '135', '64', '408', '170', '603', '519']
252 ['302', '272', '172', '483', '408', '127', '318', '134', '169', '50']
212 ['408', '169', '251', '64', '12', '513', '923', '57', '114', '189']
310 ['127', '318', '408', '114', '137', '480', '603', '190', '316', '357']
35 ['174', '318', '22', '169', '408', '176', '8', '114', '515', '480']
147 ['408', '318', '64', '480', '513', '169', '357', '657', '132', '12']
105 ['64', '22', '172', '483', '408', '479', '127', '50', '515', '174']
34 ['302', '474', '603', '427', '479', '408', '178', '318', '89', '64']
71 ['408', '318', '169', '114', '603', '515', '963', '427', '272', '661']
51 ['114', '313', '169', '272', '174', '408', '12', '651', '22', '318']
204 ['483', '127', '100', '603', '427', '511', '963', '98', '474', '479']
315 ['408', '169', '313', '59', '474', '134', '320', '199', '483', '251']
31 ['408', '483', '474', '169', '12', '50', '178', '132', '316', '133']
316 ['408', '56', '285', '315', '136', '603', '320', '606', '124', '705']
103 ['318', '513', '192', '408', '511', '178', '114', '124', '12', '641']
318 ['515', '496', '178', '316', '603', '251', '59', '258', '272', '483']
30 ['64', '318', '100', '515', '483', '496', '169', '603', '127', '196']
120 ['178', '657', '64', '169', '285', '12', '408', '114', '318', '480']
46 ['408', '169', '12', '251', '483', '923', '64', '114', '513', '318']
289 ['169', '641', '408', '528', '114', '357', '189', '64', '200', '190']
209 ['187', '12', '64', '169', '483', '511', '172', '174', '513', '357']
261 ['194', '603', '181', '427', '480', '498', '23', '496', '132', '174']
88 ['480', '513', '483', '197', '168', '114', '59', '318', '408', '498']
9 ['408', '923', '657', '98', '132', '1194', '493', '59', '194', '357']
247 ['483', '408', '169', '89', '480', '318', '114', '172', '12', '528']
321 ['114', '408', '169', '963', '98', '183', '189', '520', '313', '488']
266 ['483', '513', '127', '480', '169', '114', '511', '488', '963', '191']
74 ['50', '169', '483', '172', '114', '408', '174', '181', '963', '515']
238 ['127', '169', '474', '318', '408', '513', '511', '187', '134', '302']
319 ['169', '12', '178', '408', '89', '318', '59', '357', '64', '190']
323 ['12', '187', '357', '427', '114', '474', '483', '408', '195', '174']
67 ['318', '483', '513', '408', '923', '963', '57', '474', '98', '511']
211 ['483', '50', '318', '408', '530', '169', '48', '427', '134', '315']
98 ['64', '408', '513', '657', '169', '511', '191', '483', '496', '427']
12 ['64', '169', '313', '603', '427', '657', '515', '178', '165', '483']
40 ['318', '408', '64', '169', '313', '515', '480', '496', '50', '114']
258 ['169', '114', '318', '408', '963', '195', '56', '60', '174', '1449']
228 ['488', '169', '408', '318', '963', '189', '114', '12', '513', '50']
325 ['427', '603', '56', '479', '709', '513', '663', '615', '633', '315']
320 ['114', '515', '408', '251', '923', '513', '316', '169', '483', '168']
326 ['607', '313', '189', '169', '661', '12', '303', '143', '408', '487']
327 ['483', '187', '134', '124', '488', '511', '641', '963', '656', '213']
183 ['318', '169', '313', '114', '514', '408', '603', '515', '1449', '657']
328 ['169', '923', '173', '114', '1', '735', '178', '484', '208', '242']
322 ['187', '408', '191', '169', '480', '178', '474', '481', '316', '488']
330 ['302', '272', '483', '408', '178', '705', '191', '169', '611', '251']
27 ['64', '12', '169', '22', '606', '1449', '603', '408', '318', '427']
331 ['272', '169', '89', '408', '318', '12', '320', '313', '196', '114']
332 ['603', '515', '496', '272', '408', '318', '153', '189', '357', '191']
329 ['114', '408', '64', '511', '357', '318', '315', '132', '285', '513']
86 ['483', '474', '98', '50', '513', '603', '493', '316', '114', '408']
139 ['408', '134', '513', '603', '709', '114', '923', '474', '272', '189']
300 ['14', '483', '408', '318', '64', '657', '285', '515', '272', '603']
163 ['50', '114', '172', '408', '169', '603', '515', '181', '513', '174']
333 ['169', '408', '12', '603', '64', '318', '114', '272', '251', '606']
334 ['178', '654', '114', '199', '923', '251', '136', '613', '661', '646']
39 ['318', '12', '408', '483', '8', '169', '657', '64', '56', '194']
324 ['302', '474', '144', '98', '603', '100', '515', '427', '512', '165']
132 ['318', '169', '64', '408', '180', '357', '98', '114', '603', '488']
336 ['98', '12', '64', '169', '174', '318', '205', '963', '172', '195']
335 ['98', '169', '318', '657', '408', '180', '114', '96', '603', '178']
169 ['173', '12', '318', '408', '114', '169', '89', '641', '357', '272']
338 ['318', '302', '209', '89', '199', '285', '114', '652', '165', '357']
339 ['408', '285', '641', '318', '169', '114', '251', '1142', '48', '659']
309 ['173', '318', '169', '187', '12', '50', '313', '408', '479', '192']
342 ['474', '1', '302', '127', '272', '180', '64', '187', '1039', '705']
340 ['313', '64', '22', '318', '98', '12', '191', '169', '513', '316']
317 ['515', '408', '64', '318', '169', '483', '302', '12', '513', '114']
341 ['98', '515', '174', '272', '408', '127', '318', '56', '64', '357']
343 ['178', '285', '14', '603', '433', '479', '151', '172', '430', '173']
344 ['474', '483', '134', '23', '603', '480', '168', '427', '48', '654']
345 ['483', '127', '427', '654', '134', '169', '114', '357', '657', '603']
346 ['258', '408', '194', '69', '228', '82', '114', '205', '483', '59']
347 ['963', '64', '169', '651', '205', '190', '483', '114', '272', '313']
273 ['408', '12', '173', '318', '169', '64', '657', '603', '251', '479']
55 ['483', '172', '408', '12', '64', '198', '705', '318', '96', '272']
349 ['408', '169', '12', '657', '603', '480', '318', '474', '483', '427']
348 ['408', '169', '12', '963', '316', '272', '198', '98', '114', '187']
354 ['923', '408', '474', '641', '856', '921', '647', '525', '132', '493']
351 ['515', '272', '172', '408', '318', '64', '191', '183', '430', '134']
358 ['98', '427', '483', '480', '169', '1449', '479', '530', '497', '515']
352 ['169', '313', '285', '318', '357', '275', '613', '483', '408', '189']
360 ['513', '408', '923', '318', '169', '178', '694', '98', '48', '180']
363 ['357', '165', '484', '199', '211', '607', '513', '633', '480', '318']
355 ['98', '603', '480', '174', '172', '483', '408', '178', '127', '318']
362 ['483', '12', '98', '127', '191', '64', '190', '603', '134', '357']
357 ['242', '302', '427', '165', '496', '174', '479', '272', '79', '172']
356 ['64', '169', '318', '98', '496', '357', '603', '174', '114', '408']
361 ['318', '483', '134', '474', '408', '64', '511', '427', '127', '480']
365 ['318', '357', '603', '178', '251', '64', '69', '11', '480', '189']
350 ['408', '318', '114', '474', '357', '641', '513', '169', '134', '923']
367 ['474', '603', '427', '480', '132', '479', '48', '483', '408', '178']
368 ['408', '169', '654', '657', '513', '483', '178', '603', '528', '198']
371 ['515', '56', '318', '272', '169', '963', '187', '313', '28', '408']
373 ['408', '313', '272', '902', '513', '223', '515', '1194', '484', '98']
370 ['408', '474', '513', '318', '169', '178', '515', '272', '488', '519']
374 ['496', '300', '275', '208', '313', '169', '484', '520', '298', '378']
372 ['222', '603', '1137', '181', '515', '480', '174', '96', '479', '272']
337 ['169', '408', '483', '12', '168', '318', '64', '657', '480', '178']
378 ['483', '187', '127', '408', '169', '603', '190', '114', '192', '208']
366 ['302', '474', '603', '515', '480', '498', '479', '272', '483', '408']
377 ['169', '318', '408', '12', '64', '114', '187', '515', '483', '50']
375 ['64', '12', '318', '127', '191', '98', '173', '169', '22', '483']
359 ['318', '12', '169', '172', '114', '189', '963', '178', '89', '96']
379 ['483', '313', '408', '484', '48', '482', '318', '493', '479', '923']
380 ['178', '657', '513', '484', '408', '285', '603', '169', '173', '606']
381 ['474', '515', '408', '603', '12', '302', '114', '488', '199', '136']
385 ['709', '45', '124', '963', '856', '641', '923', '302', '1194', '519']
382 ['45', '169', '656', '963', '483', '285', '251', '515', '132', '178']
387 ['134', '654', '276', '221', '1194', '137', '709', '657', '302', '483']
364 ['408', '169', '64', '318', '12', '114', '98', '515', '474', '483']
369 ['408', '169', '963', '318', '174', '12', '178', '98', '64', '89']
388 ['181', '480', '174', '79', '172', '408', '178', '318', '520', '64']
386 ['169', '114', '318', '185', '657', '12', '64', '480', '483', '357']
389 ['408', '511', '180', '169', '528', '606', '647', '357', '114', '1194']
383 ['408', '318', '12', '515', '114', '190', '64', '136', '511', '589']
390 ['318', '64', '133', '483', '408', '114', '313', '22', '178', '520']
393 ['493', '251', '478', '853', '408', '513', '515', '601', '199', '520']
392 ['427', '483', '132', '606', '187', '124', '22', '64', '498', '479']
376 ['483', '318', '169', '408', '657', '64', '174', '178', '479', '474']
394 ['318', '64', '483', '100', '357', '127', '268', '408', '199', '258']
391 ['302', '408', '169', '315', '519', '515', '178', '14', '285', '124']
398 ['143', '318', '313', '114', '651', '316', '190', '272', '515', '83']
397 ['98', '511', '114', '64', '603', '187', '923', '169', '203', '191']
399 ['1449', '604', '306', '272', '923', '921', '485', '652', '313', '316']
396 ['114', '98', '318', '64', '169', '272', '313', '174', '515', '611']
401 ['79', '98', '427', '408', '190', '496', '320', '234', '129', '480']
402 ['318', '114', '64', '134', '191', '56', '178', '514', '603', '133']
384 ['408', '169', '513', '474', '318', '511', '923', '114', '357', '479']
395 ['169', '114', '357', '520', '483', '12', '963', '195', '173', '480']
353 ['483', '169', '98', '318', '12', '64', '923', '408', '513', '114']
403 ['313', '64', '169', '498', '174', '194', '430', '484', '483', '963']
405 ['144', '496', '705', '1142', '237', '223', '283', '1134', '835', '165']
400 ['50', '12', '172', '174', '64', '408', '169', '22', '183', '483']
406 ['530', '302', '484', '178', '169', '114', '408', '963', '189', '659']
407 ['64', '114', '12', '318', '170', '178', '251', '192', '285', '187']
409 ['408', '114', '185', '641', '513', '64', '656', '182', '1203', '177']
404 ['64', '199', '98', '169', '603', '479', '408', '513', '519', '318']
413 ['318', '169', '483', '408', '174', '127', '64', '98', '496', '479']
416 ['57', '169', '408', '208', '48', '923', '1063', '114', '489', '963']
408 ['318', '50', '484', '316', '483', '408', '513', '191', '178', '169']
410 ['169', '50', '1449', '474', '134', '408', '515', '174', '114', '520']
411 ['12', '408', '64', '483', '251', '178', '478', '357', '316', '480']
417 ['318', '114', '480', '408', '313', '9', '482', '478', '603', '272']
412 ['530', '272', '60', '483', '79', '134', '313', '963', '513', '192']
420 ['318', '64', '169', '357', '427', '185', '98', '178', '483', '474']
422 ['357', '285', '408', '603', '169', '64', '56', '318', '12', '251']
425 ['23', '116', '179', '246', '114', '963', '603', '919', '496', '408']
419 ['498', '178', '172', '483', '251', '603', '64', '169', '136', '496']
415 ['408', '318', '12', '50', '114', '357', '169', '64', '313', '89']
423 ['408', '169', '64', '12', '318', '603', '187', '98', '178', '483']
429 ['408', '661', '169', '251', '272', '187', '135', '515', '615', '1142']
428 ['22', '190', '483', '318', '79', '64', '98', '132', '963', '127']
427 ['474', '86', '257', '144', '246', '98', '194', '603', '1137', '181']
418 ['408', '169', '64', '318', '185', '178', '12', '480', '205', '484']
424 ['483', '603', '513', '316', '98', '641', '963', '197', '285', '1449']
432 ['98', '318', '357', '64', '272', '483', '515', '427', '603', '651']
421 ['318', '515', '408', '114', '169', '189', '480', '316', '483', '357']
435 ['475', '205', '508', '192', '134', '320', '223', '272', '340', '483']
433 ['285', '169', '408', '528', '134', '242', '483', '127', '603', '427']
426 ['302', '114', '272', '169', '408', '165', '611', '179', '479', '124']
436 ['408', '318', '56', '114', '272', '69', '169', '79', '589', '12']
430 ['483', '408', '480', '427', '114', '496', '603', '357', '657', '197']
434 ['169', '114', '408', '265', '318', '496', '174', '64', '515', '516']
437 ['408', '285', '251', '199', '194', '178', '357', '427', '242', '528']
438 ['169', '64', '272', '187', '313', '320', '408', '173', '189', '478']
431 ['169', '408', '483', '114', '513', '515', '50', '357', '272', '56']
442 ['408', '151', '173', '50', '169', '478', '246', '357', '474', '114']
440 ['302', '100', '427', '132', '48', '408', '178', '318', '64', '169']
445 ['182', '427', '318', '483', '134', '651', '190', '169', '357', '114']
447 ['64', '357', '603', '318', '114', '480', '172', '530', '408', '178']
449 ['169', '427', '199', '318', '191', '156', '98', '408', '50', '134']
450 ['408', '515', '615', '165', '641', '189', '57', '963', '116', '1007']
446 ['169', '408', '483', '64', '511', '22', '50', '272', '187', '427']
439 ['190', '169', '408', '963', '64', '515', '178', '174', '483', '318']
451 ['313', '192', '272', '98', '298', '89', '114', '187', '186', '180']
452 ['313', '511', '357', '169', '178', '484', '114', '1007', '493', '215']
454 ['739', '265', '208', '192', '187', '515', '966', '320', '684', '408']
453 ['408', '173', '169', '96', '134', '64', '192', '114', '127', '603']
414 ['318', '64', '12', '187', '191', '98', '513', '192', '479', '132']
455 ['483', '316', '408', '169', '187', '963', '357', '114', '208', '661']
444 ['357', '169', '427', '474', '98', '603', '302', '513', '114', '127']
448 ['483', '408', '313', '178', '479', '498', '169', '251', '127', '474']
457 ['408', '480', '427', '736', '1142', '520', '496', '963', '498', '30']
456 ['408', '137', '285', '318', '488', '134', '89', '654', '340', '178']
458 ['641', '657', '923', '59', '661', '1143', '60', '114', '479', '177']
462 ['169', '318', '98', '174', '189', '511', '64', '483', '530', '408']
459 ['316', '313', '963', '176', '59', '315', '513', '1449', '118', '483']
460 ['408', '134', '514', '498', '60', '169', '89', '511', '923', '603']
461 ['357', '64', '318', '480', '408', '114', '427', '98', '14', '603']
467 ['483', '64', '12', '285', '134', '187', '191', '168', '178', '603']
468 ['483', '474', '187', '169', '408', '114', '480', '479', '482', '484']
466 ['474', '408', '493', '603', '483', '318', '427', '190', '169', '480']
472 ['302', '515', '165', '514', '479', '408', '178', '89', '430', '134']
465 ['168', '480', '313', '178', '483', '316', '923', '89', '493', '83']
463 ['89', '64', '318', '169', '12', '483', '174', '272', '408', '134']
471 ['173', '251', '169', '318', '178', '513', '515', '479', '60', '603']
474 ['169', '114', '153', '408', '272', '189', '512', '429', '887', '223']
469 ['480', '408', '657', '169', '114', '316', '12', '178', '89', '357']
464 ['64', '169', '496', '178', '408', '98', '1039', '963', '275', '318']
476 ['318', '114', '64', '98', '484', '178', '603', '483', '496', '169']
478 ['285', '127', '275', '603', '483', '474', '83', '136', '59', '480']
473 ['318', '114', '64', '174', '169', '408', '603', '272', '12', '187']
470 ['318', '357', '169', '185', '174', '313', '98', '483', '408', '527']
480 ['408', '357', '488', '199', '285', '124', '318', '189', '963', '474']
441 ['64', '483', '169', '114', '173', '603', '515', '657', '427', '178']
479 ['64', '191', '194', '12', '251', '515', '513', '124', '134', '114']
484 ['64', '483', '496', '511', '515', '169', '302', '480', '178', '479']
486 ['98', '223', '56', '483', '318', '488', '357', '603', '8', '496']
487 ['169', '515', '520', '963', '435', '511', '519', '496', '124', '316']
482 ['483', '114', '515', '169', '480', '408', '318', '199', '498', '484']
481 ['483', '114', '641', '408', '511', '478', '302', '172', '513', '963']
492 ['169', '50', '408', '12', '427', '22', '484', '513', '251', '357']
493 ['8', '169', '313', '963', '153', '64', '189', '484', '114', '187']
490 ['114', '513', '12', '511', '483', '172', '488', '169', '174', '408']
489 ['603', '169', '488', '114', '178', '963', '318', '79', '746', '611']
483 ['483', '172', '316', '169', '408', '251', '478', '178', '64', '479']
496 ['134', '187', '200', '408', '654', '45', '59', '963', '513', '169']
494 ['318', '185', '169', '12', '272', '172', '313', '195', '408', '22']
495 ['474', '483', '169', '315', '963', '59', '316', '136', '484', '603']
477 ['302', '474', '265', '144', '1', '98', '194', '603', '1137', '100']
497 ['272', '483', '59', '318', '199', '963', '198', '64', '302', '513']
488 ['313', '12', '316', '272', '735', '204', '114', '282', '121', '169']
498 ['285', '178', '408', '169', '529', '921', '1194', '114', '189', '45']
499 ['169', '408', '515', '64', '705', '320', '603', '302', '114', '170']
491 ['169', '318', '963', '87', '64', '98', '89', '57', '302', '189']
500 ['488', '603', '654', '209', '513', '23', '173', '484', '192', '525']
502 ['169', '12', '251', '178', '611', '50', '496', '320', '530', '488']
503 ['474', '209', '483', '179', '408', '647', '513', '320', '56', '511']
504 ['513', '923', '272', '64', '169', '408', '87', '83', '114', '265']
505 ['143', '318', '603', '15', '657', '483', '64', '485', '306', '272']
506 ['313', '64', '22', '318', '144', '127', '143', '483', '169', '237']
443 ['318', '64', '169', '408', '190', '22', '50', '79', '187', '192']
507 ['242', '474', '265', '86', '1', '98', '193', '194', '603', '1137']
514 ['427', '705', '480', '606', '1449', '519', '736', '187', '657', '513']
508 ['100', '408', '657', '169', '483', '127', '178', '302', '641', '12']
511 ['603', '408', '127', '318', '56', '64', '357', '169', '170', '132']
515 ['114', '169', '12', '963', '195', '515', '603', '64', '183', '190']
512 ['515', '480', '174', '483', '408', '269', '169', '603', '657', '357']
513 ['98', '174', '272', '483', '318', '64', '134', '169', '190', '511']
475 ['169', '427', '963', '408', '174', '22', '513', '357', '98', '511']
523 ['515', '427', '275', '174', '479', '79', '483', '178', '127', '318']
518 ['313', '496', '174', '318', '169', '50', '408', '96', '114', '64']
509 ['12', '178', '172', '185', '169', '474', '657', '114', '318', '251']
516 ['318', '483', '408', '114', '1449', '313', '923', '633', '189', '520']
510 ['408', '169', '114', '515', '318', '22', '64', '272', '513', '657']
524 ['408', '45', '223', '659', '114', '694', '1137', '166', '963', '357']
501 ['474', '318', '285', '408', '178', '169', '64', '657', '136', '513']
525 ['169', '483', '318', '408', '98', '64', '174', '50', '89', '515']
521 ['408', '483', '654', '192', '318', '169', '198', '519', '513', '205']
520 ['318', '408', '246', '64', '272', '268', '12', '89', '496', '313']
519 ['242', '302', '474', '265', '486', '95', '234', '98', '194', '603']
528 ['408', '114', '172', '963', '318', '98', '169', '64', '165', '513']
532 ['144', '174', '69', '64', '114', '657', '223', '651', '963', '185']
530 ['515', '318', '272', '496', '603', '498', '12', '657', '251', '923']
531 ['318', '64', '169', '133', '483', '408', '178', '481', '657', '190']
529 ['114', '169', '313', '173', '318', '408', '515', '190', '272', '199']
517 ['408', '169', '511', '199', '318', '513', '133', '64', '493', '12']
527 ['519', '114', '166', '251', '408', '199', '272', '430', '641', '483']
485 ['408', '318', '483', '12', '114', '64', '50', '100', '127', '169']
533 ['520', '173', '963', '114', '657', '79', '515', '316', '272', '750']
535 ['408', '251', '175', '208', '57', '169', '1007', '641', '694', '647']
536 ['12', '64', '173', '127', '520', '526', '651', '178', '463', '479']
526 ['483', '169', '134', '170', '654', '12', '223', '114', '511', '528']
537 ['408', '114', '659', '251', '154', '589', '522', '856', '223', '169']
534 ['98', '603', '181', '515', '480', '498', '496', '174', '485', '172']
541 ['169', '64', '357', '272', '515', '318', '520', '12', '513', '114']
538 ['114', '408', '313', '482', '64', '302', '603', '178', '427', '657']
542 ['408', '515', '483', '114', '135', '474', '603', '480', '170', '98']
545 ['408', '318', '313', '64', '272', '178', '114', '169', '1449', '316']
539 ['169', '173', '64', '479', '1', '408', '498', '515', '318', '251']
547 ['318', '114', '187', '64', '50', '357', '178', '169', '513', '174']
543 ['483', '963', '657', '127', '408', '285', '606', '589', '498', '641']
548 ['174', '96', '195', '144', '169', '22', '210', '513', '173', '318']
546 ['496', '479', '513', '174', '603', '178', '79', '408', '127', '474']
522 ['357', '483', '603', '178', '169', '127', '474', '513', '408', '498']
551 ['114', '923', '298', '633', '60', '1143', '474', '611', '657', '306']
544 ['318', '427', '169', '480', '64', '357', '114', '483', '603', '408']
553 ['169', '12', '408', '114', '318', '923', '302', '493', '316', '272']
552 ['318', '169', '408', '483', '316', '657', '178', '498', '64', '513']
540 ['483', '318', '408', '127', '12', '178', '657', '169', '56', '192']
554 ['64', '313', '408', '169', '205', '483', '114', '493', '12', '963']
550 ['64', '169', '173', '12', '408', '318', '127', '174', '134', '172']
556 ['511', '285', '408', '50', '169', '357', '8', '657', '199', '89']
559 ['474', '114', '408', '530', '498', '484', '313', '169', '134', '480']
560 ['357', '474', '408', '180', '169', '272', '511', '199', '251', '172']
561 ['134', '408', '169', '647', '654', '192', '60', '641', '525', '519']
563 ['318', '408', '272', '483', '285', '528', '187', '169', '64', '189']
566 ['276', '185', '169', '60', '190', '603', '513', '661', '923', '475']
557 ['318', '357', '169', '657', '408', '114', '515', '64', '603', '496']
558 ['169', '64', '50', '603', '178', '408', '12', '483', '657', '172']
564 ['483', '173', '114', '408', '174', '318', '923', '64', '493', '172']
565 ['194', '603', '480', '496', '483', '408', '178', '318', '484', '191']
573 ['408', '56', '511', '169', '114', '647', '923', '251', '474', '187']
549 ['64', '318', '12', '169', '272', '173', '408', '114', '178', '479']
567 ['923', '529', '408', '285', '921', '169', '652', '515', '516', '315']
569 ['408', '318', '496', '64', '483', '427', '515', '357', '170', '83']
562 ['12', '178', '22', '498', '64', '705', '265', '484', '530', '192']
576 ['64', '318', '169', '173', '313', '408', '515', '174', '12', '114']
577 ['272', '169', '487', '528', '199', '923', '315', '124', '178', '408']
579 ['64', '178', '272', '12', '483', '318', '251', '479', '519', '515']
574 ['64', '483', '174', '318', '169', '208', '191', '127', '528', '96']
555 ['408', '483', '191', '178', '515', '187', '313', '170', '427', '64']
572 ['483', '603', '479', '480', '187', '515', '318', '127', '408', '313']
575 ['408', '169', '515', '12', '657', '170', '190', '480', '114', '134']
584 ['318', '408', '64', '169', '515', '59', '178', '496', '174', '127']
588 ['513', '59', '478', '408', '190', '516', '507', '736', '187', '1512']
587 ['98', '64', '603', '127', '178', '408', '963', '12', '185', '519']
568 ['408', '302', '98', '513', '357', '170', '251', '480', '318', '607']
586 ['513', '251', '272', '963', '515', '408', '114', '478', '483', '1007']
585 ['483', '408', '64', '318', '22', '272', '174', '89', '173', '515']
582 ['127', '474', '12', '191', '98', '169', '603', '408', '178', '285']
591 ['178', '169', '483', '515', '657', '199', '408', '513', '134', '318']
581 ['178', '483', '12', '408', '513', '709', '963', '603', '480', '479']
592 ['208', '190', '641', '693', '651', '474', '136', '661', '435', '584']
580 ['408', '12', '483', '178', '172', '1142', '528', '488', '272', '694']
590 ['408', '169', '427', '12', '603', '178', '474', '318', '657', '64']
593 ['64', '186', '520', '197', '187', '114', '89', '651', '178', '519']
583 ['98', '318', '64', '484', '603', '479', '173', '136', '185', '169']
596 ['318', '169', '483', '480', '12', '173', '408', '178', '659', '191']
570 ['169', '114', '483', '530', '408', '657', '474', '183', '603', '64']
599 ['114', '173', '272', '98', '318', '659', '313', '603', '515', '408']
589 ['22', '50', '513', '1449', '174', '265', '178', '169', '483', '98']
594 ['64', '318', '169', '963', '408', '98', '178', '427', '272', '513']
597 ['169', '64', '318', '12', '427', '963', '98', '603', '408', '357']
578 ['408', '169', '1449', '483', '513', '511', '480', '189', '657', '178']
601 ['175', '408', '654', '209', '169', '134', '7', '192', '180', '187']
602 ['318', '114', '480', '178', '483', '191', '313', '79', '180', '187']
600 ['64', '114', '169', '190', '357', '272', '180', '313', '318', '12']
605 ['56', '134', '199', '511', '515', '169', '285', '178', '45', '479']
603 ['169', '408', '178', '483', '114', '480', '318', '963', '316', '302']
595 ['357', '64', '318', '169', '285', '408', '12', '483', '172', '173']
606 ['318', '357', '114', '408', '603', '272', '170', '482', '515', '657']
608 ['496', '170', '203', '963', '12', '652', '657', '922', '1137', '57']
607 ['127', '318', '408', '114', '169', '192', '89', '134', '654', '357']
610 ['408', '513', '132', '515', '192', '64', '306', '114', '641', '169']
611 ['64', '483', '357', '963', '59', '169', '12', '127', '408', '603']
617 ['318', '513', '12', '165', '603', '633', '483', '114', '199', '408']
618 ['511', '520', '169', '480', '114', '205', '272', '604', '316', '435']
614 ['127', '272', '50', '251', '169', '474', '114', '134', '408', '172']
609 ['318', '114', '169', '272', '98', '64', '57', '275', '427', '511']
615 ['64', '169', '408', '50', '173', '313', '114', '98', '285', '657']
616 ['169', '64', '408', '98', '318', '483', '285', '114', '513', '515']
620 ['515', '483', '178', '286', '96', '64', '523', '22', '187', '143']
571 ['318', '474', '127', '408', '169', '12', '178', '488', '513', '613']
619 ['484', '64', '318', '210', '12', '169', '204', '661', '223', '483']
613 ['169', '408', '199', '251', '134', '178', '180', '313', '114', '647']
622 ['134', '114', '187', '657', '318', '182', '357', '272', '813', '513']
621 ['408', '318', '114', '513', '169', '12', '251', '654', '178', '474']
604 ['173', '174', '64', '483', '202', '172', '313', '50', '479', '79']
624 ['318', '64', '178', '408', '12', '169', '528', '191', '613', '657']
612 ['408', '169', '318', '657', '114', '474', '189', '515', '694', '185']
627 ['603', '169', '408', '483', '488', '515', '480', '168', '127', '641']
623 ['64', '174', '480', '427', '169', '114', '318', '515', '513', '172']
628 ['474', '86', '98', '603', '32', '1137', '100', '515', '427', '165']
625 ['12', '178', '318', '427', '474', '98', '64', '496', '657', '132']
629 ['318', '313', '169', '408', '8', '114', '520', '496', '483', '97']
633 ['316', '64', '313', '483', '513', '22', '357', '191', '174', '659']
632 ['408', '169', '190', '511', '520', '178', '114', '427', '251', '493']
631 ['408', '480', '513', '178', '169', '12', '64', '603', '709', '647']
634 ['169', '191', '59', '177', '12', '430', '64', '178', '176', '483']
639 ['408', '185', '603', '480', '251', '302', '114', '133', '515', '657']
630 ['313', '189', '114', '318', '923', '408', '603', '178', '169', '611']
642 ['483', '251', '513', '59', '1143', '1449', '161', '272', '86', '187']
637 ['87', '318', '483', '114', '511', '133', '657', '480', '427', '89']
640 ['603', '181', '480', '483', '408', '484', '199', '50', '513', '114']
626 ['98', '483', '169', '64', '12', '661', '285', '513', '318', '484']
643 ['134', '318', '302', '251', '654', '285', '657', '64', '513', '199']
598 ['318', '169', '408', '64', '483', '48', '511', '170', '285', '423']
638 ['318', '64', '205', '483', '143', '79', '316', '178', '408', '480']
635 ['408', '132', '483', '114', '50', '272', '478', '1137', '251', '198']
644 ['302', '483', '408', '169', '114', '313', '515', '963', '488', '64']
636 ['98', '181', '496', '174', '172', '483', '408', '178', '318', '64']
645 ['408', '603', '169', '657', '269', '285', '127', '114', '661', '480']
648 ['313', '300', '258', '8', '378', '12', '129', '611', '51', '515']
647 ['12', '178', '513', '963', '169', '641', '408', '657', '478', '64']
650 ['408', '169', '318', '12', '114', '513', '165', '611', '64', '190']
651 ['408', '169', '318', '483', '513', '657', '603', '134', '251', '64']
654 ['427', '178', '480', '515', '657', '603', '202', '483', '328', '378']
653 ['750', '114', '963', '169', '1019', '173', '12', '483', '498', '515']
655 ['199', '661', '641', '1449', '488', '169', '189', '114', '530', '484']
649 ['64', '169', '357', '513', '191', '603', '22', '12', '45', '272']
658 ['357', '64', '187', '191', '272', '427', '180', '480', '285', '483']
656 ['169', '479', '474', '357', '318', '64', '199', '23', '127', '114']
660 ['641', '114', '199', '169', '12', '178', '647', '59', '408', '187']
659 ['169', '12', '251', '114', '923', '318', '100', '408', '302', '515']
646 ['408', '169', '114', '513', '515', '64', '318', '251', '603', '98']
663 ['511', '172', '22', '114', '408', '483', '651', '169', '427', '963']
664 ['511', '357', '474', '199', '178', '493', '114', '488', '316', '512']
657 ['483', '318', '98', '313', '64', '427', '480', '515', '408', '603']
665 ['408', '515', '169', '513', '512', '474', '189', '480', '318', '493']
666 ['285', '408', '589', '60', '641', '475', '652', '512', '178', '14']
661 ['483', '114', '12', '479', '513', '511', '659', '519', '474', '302']
662 ['408', '318', '528', '12', '127', '316', '923', '187', '199', '603']
667 ['169', '408', '511', '170', '474', '89', '180', '302', '165', '663']
641 ['302', '641', '963', '474', '187', '654', '488', '127', '318', '1449']
668 ['519', '513', '169', '12', '178', '603', '187', '963', '127', '483']
673 ['408', '169', '98', '285', '56', '483', '1449', '50', '603', '276']
671 ['143', '318', '64', '133', '251', '483', '302', '408', '95', '429']
669 ['478', '199', '285', '513', '251', '165', '178', '318', '923', '606']
676 ['96', '228', '408', '498', '427', '178', '511', '515', '19', '89']
674 ['318', '272', '64', '114', '169', '9', '89', '483', '22', '357']
652 ['408', '483', '318', '114', '694', '498', '169', '197', '484', '603']
677 ['302', '272', '484', '251', '169', '488', '514', '483', '611', '519']
682 ['408', '483', '1143', '478', '1142', '198', '169', '480', '116', '496']
679 ['408', '480', '127', '515', '603', '12', '114', '190', '136', '474']
684 ['313', '169', '496', '189', '318', '114', '515', '651', '603', '493']
685 ['513', '483', '199', '178', '603', '169', '114', '923', '192', '12']
683 ['408', '50', '357', '528', '12', '318', '134', '169', '483', '64']
691 ['408', '427', '483', '169', '515', '197', '12', '657', '134', '480']
672 ['427', '318', '64', '178', '603', '408', '12', '496', '59', '89']
692 ['169', '408', '178', '64', '251', '272', '174', '12', '657', '603']
690 ['50', '313', '172', '181', '659', '515', '251', '318', '272', '531']
689 ['174', '302', '318', '513', '64', '313', '191', '192', '79', '272']
686 ['483', '408', '169', '251', '316', '606', '479', '482', '114', '165']
693 ['603', '251', '657', '169', '474', '513', '515', '114', '408', '83']
688 ['242', '51', '346', '474', '265', '86', '222', '144', '1', '95']
697 ['64', '169', '603', '190', '318', '134', '313', '483', '408', '136']
698 ['318', '272', '12', '589', '531', '963', '657', '178', '169', '114']
670 ['302', '100', '169', '50', '318', '172', '127', '408', '173', '64']
694 ['169', '114', '12', '64', '408', '963', '515', '313', '192', '173']
680 ['173', '483', '168', '114', '134', '12', '603', '89', '923', '178']
705 ['513', '316', '320', '251', '735', '57', '1103', '408', '493', '272']
701 ['98', '515', '483', '408', '318', '357', '169', '603', '427', '172']
699 ['408', '657', '169', '89', '134', '114', '923', '483', '474', '603']
704 ['474', '114', '483', '408', '513', '530', '169', '179', '12', '357']
707 ['56', '320', '408', '114', '169', '223', '513', '357', '646', '189']
700 ['408', '172', '134', '313', '89', '483', '12', '64', '114', '190']
687 ['169', '127', '408', '427', '318', '114', '483', '357', '272', '480']
695 ['127', '603', '479', '134', '488', '483', '12', '513', '223', '178']
675 ['483', '474', '479', '178', '64', '480', '513', '603', '657', '641']
708 ['96', '174', '173', '64', '318', '408', '89', '169', '172', '515']
709 ['963', '169', '511', '408', '513', '488', '114', '100', '479', '12']
711 ['14', '357', '285', '603', '9', '657', '179', '1194', '124', '589']
710 ['474', '511', '114', '515', '480', '513', '498', '427', '408', '482']
712 ['64', '318', '408', '357', '657', '496', '118', '274', '22', '169']
715 ['187', '515', '127', '114', '313', '511', '408', '750', '651', '357']
713 ['169', '480', '483', '357', '98', '197', '12', '408', '285', '64']
716 ['316', '285', '272', '15', '315', '169', '408', '71', '1449', '170']
681 ['483', '318', '169', '515', '498', '603', '657', '96', '427', '513']
678 ['318', '64', '169', '59', '313', '48', '272', '178', '484', '124']
719 ['169', '479', '963', '519', '196', '197', '190', '1449', '133', '192']
702 ['50', '98', '408', '181', '64', '174', '132', '357', '199', '114']
721 ['114', '96', '408', '169', '313', '659', '186', '480', '316', '210']
714 ['174', '318', '64', '313', '316', '79', '172', '515', '173', '520']
717 ['173', '515', '498', '483', '216', '479', '64', '318', '408', '170']
718 ['318', '64', '603', '190', '313', '12', '169', '357', '272', '22']
696 ['483', '408', '474', '197', '513', '1137', '170', '269', '528', '511']
722 ['50', '408', '12', '318', '483', '127', '174', '191', '272', '269']
724 ['318', '64', '174', '98', '144', '651', '173', '143', '357', '186']
727 ['272', '313', '966', '484', '190', '223', '661', '134', '963', '237']
725 ['408', '318', '192', '923', '190', '657', '480', '169', '134', '603']
706 ['483', '318', '174', '172', '408', '169', '114', '923', '59', '272']
720 ['114', '474', '12', '408', '514', '513', '98', '134', '357', '516']
729 ['513', '64', '408', '169', '603', '178', '480', '659', '318', '251']
726 ['174', '50', '169', '190', '12', '1449', '963', '408', '172', '199']
728 ['318', '64', '169', '178', '603', '127', '657', '483', '408', '357']
703 ['313', '64', '174', '318', '169', '408', '357', '79', '480', '96']
738 ['114', '12', '515', '520', '480', '132', '272', '483', '963', '1194']
736 ['98', '483', '408', '169', '12', '64', '427', '69', '190', '603']
734 ['64', '169', '178', '641', '189', '12', '408', '185', '513', '659']
730 ['64', '483', '12', '134', '174', '178', '59', '318', '1449', '186']
743 ['127', '64', '251', '12', '178', '474', '483', '169', '357', '56']
742 ['169', '178', '64', '251', '357', '98', '427', '187', '603', '191']
737 ['134', '603', '114', '513', '199', '479', '408', '607', '483', '641']
733 ['408', '60', '483', '134', '514', '528', '169', '114', '168', '902']
745 ['318', '513', '223', '357', '208', '173', '408', '251', '199', '22']
740 ['169', '318', '483', '657', '963', '603', '114', '408', '320', '923']
735 ['408', '318', '169', '64', '98', '357', '114', '12', '56', '205']
747 ['191', '963', '114', '484', '518', '1449', '165', '656', '641', '613']
723 ['318', '408', '12', '64', '474', '56', '513', '127', '98', '302']
739 ['169', '189', '963', '408', '173', '1019', '174', '272', '474', '516']
749 ['318', '12', '408', '493', '607', '28', '963', '169', '165', '1007']
748 ['313', '12', '127', '191', '178', '480', '134', '484', '430', '611']
746 ['313', '169', '408', '173', '114', '318', '480', '98', '483', '272']
731 ['98', '651', '272', '423', '692', '22', '174', '169', '172', '181']
750 ['318', '98', '169', '1449', '313', '408', '64', '59', '483', '272']
741 ['318', '12', '127', '64', '169', '603', '408', '185', '511', '285']
751 ['318', '408', '114', '657', '169', '511', '64', '357', '513', '132']
756 ['114', '408', '474', '318', '657', '169', '1194', '483', '515', '513']
757 ['318', '169', '408', '12', '603', '320', '114', '483', '272', '302']
752 ['134', '603', '89', '12', '179', '514', '488', '408', '611', '318']
758 ['178', '169', '251', '519', '429', '136', '194', '516', '86', '606']
732 ['318', '169', '12', '50', '98', '408', '285', '64', '114', '657']
762 ['169', '408', '134', '528', '189', '318', '209', '483', '285', '205']
744 ['100', '12', '64', '408', '169', '183', '251', '134', '318', '357']
754 ['169', '480', '318', '100', '513', '114', '483', '484', '603', '357']
753 ['318', '169', '603', '496', '216', '408', '498', '1007', '478', '12']
763 ['169', '134', '114', '603', '285', '513', '963', '178', '488', '408']
764 ['963', '265', '169', '515', '427', '498', '193', '114', '513', '480']
767 ['169', '474', '178', '50', '408', '603', '191', '173', '134', '114']
769 ['318', '169', '483', '1449', '64', '22', '174', '657', '408', '189']
755 ['169', '408', '114', '313', '64', '89', '318', '190', '427', '272']
771 ['178', '272', '483', '513', '57', '430', '657', '479', '963', '923']
768 ['64', '318', '169', '22', '79', '651', '178', '251', '174', '191']
773 ['199', '528', '276', '223', '177', '285', '134', '137', '478', '511']
765 ['357', '408', '318', '134', '12', '168', '64', '89', '483', '603']
772 ['408', '318', '64', '357', '169', '114', '173', '178', '427', '663']
766 ['408', '251', '169', '56', '114', '1103', '515', '513', '320', '12']
774 ['60', '483', '474', '134', '478', '285', '1194', '603', '32', '315']
760 ['318', '408', '1449', '23', '192', '272', '513', '189', '923', '663']
761 ['168', '114', '318', '190', '173', '89', '169', '79', '408', '902']
777 ['408', '1449', '169', '483', '318', '480', '487', '12', '529', '189']
759 ['318', '169', '313', '272', '210', '515', '189', '657', '64', '114']
776 ['484', '172', '313', '513', '100', '408', '12', '64', '480', '1143']
780 ['181', '114', '483', '173', '169', '408', '480', '205', '191', '178']
779 ['172', '169', '408', '187', '192', '272', '318', '114', '12', '173']
778 ['408', '134', '474', '513', '169', '185', '182', '641', '114', '302']
782 ['318', '15', '408', '513', '87', '114', '169', '199', '613', '657']
786 ['64', '408', '483', '963', '12', '657', '603', '515', '114', '313']
784 ['318', '169', '114', '408', '178', '191', '64', '174', '134', '205']
770 ['98', '603', '196', '515', '498', '496', '479', '216', '483', '408']
788 ['408', '169', '242', '272', '313', '208', '515', '173', '513', '923']
789 ['603', '134', '169', '483', '187', '513', '191', '174', '318', '223']
790 ['64', '318', '272', '12', '114', '513', '178', '169', '185', '316']
787 ['318', '513', '408', '50', '168', '483', '178', '59', '174', '64']
783 ['408', '318', '169', '515', '603', '64', '272', '313', '251', '98']
785 ['513', '483', '408', '603', '178', '114', '963', '169', '98', '493']
794 ['603', '318', '169', '316', '64', '12', '408', '657', '199', '114']
781 ['480', '479', '408', '132', '173', '513', '963', '603', '427', '511']
796 ['1016', '310', '169', '837', '647', '73', '392', '1448', '114', '601']
795 ['199', '178', '318', '483', '114', '408', '134', '285', '124', '603']
793 ['408', '474', '178', '483', '12', '302', '515', '251', '134', '603']
798 ['513', '316', '169', '22', '192', '302', '300', '320', '199', '187']
791 ['114', '313', '408', '169', '513', '64', '272', '318', '316', '483']
802 ['64', '313', '187', '174', '178', '12', '169', '22', '114', '651']
800 ['169', '408', '528', '318', '302', '483', '178', '12', '513', '251']
804 ['313', '169', '484', '430', '114', '1194', '165', '189', '300', '166']
803 ['56', '483', '528', '98', '408', '923', '191', '187', '285', '357']
775 ['169', '408', '318', '963', '174', '64', '12', '483', '520', '178']
792 ['169', '513', '603', '178', '408', '483', '190', '480', '709', '302']
799 ['114', '169', '408', '12', '318', '64', '515', '657', '89', '357']
805 ['474', '408', '134', '114', '251', '921', '285', '57', '513', '923']
806 ['64', '134', '178', '478', '657', '963', '603', '1039', '194', '132']
807 ['1449', '189', '513', '963', '316', '272', '114', '302', '178', '192']
797 ['172', '174', '408', '318', '98', '8', '223', '251', '173', '187']
801 ['174', '258', '172', '408', '318', '64', '169', '12', '50', '22']
809 ['408', '114', '89', '318', '64', '963', '190', '169', '127', '515']
815 ['64', '22', '169', '12', '520', '126', '493', '408', '286', '648']
817 ['169', '12', '657', '483', '114', '408', '496', '64', '83', '427']
821 ['515', '479', '169', '603', '316', '474', '408', '187', '178', '480']
818 ['56', '98', '479', '318', '64', '12', '603', '483', '134', '114']
814 ['318', '169', '408', '50', '12', '172', '479', '313', '603', '357']
812 ['169', '64', '98', '176', '114', '313', '318', '272', '96', '144']
823 ['169', '114', '313', '192', '276', '511', '185', '483', '285', '357']
825 ['22', '59', '96', '265', '430', '313', '611', '483', '513', '69']
827 ['169', '474', '603', '100', '515', '479', '483', '134', '357', '513']
829 ['483', '169', '173', '199', '64', '191', '50', '285', '479', '603']
811 ['603', '480', '275', '174', '483', '408', '318', '89', '133', '520']
830 ['178', '318', '64', '483', '143', '493', '515', '513', '302', '659']
826 ['64', '169', '408', '12', '318', '114', '178', '603', '483', '474']
831 ['408', '172', '483', '511', '513', '474', '169', '318', '114', '357']
819 ['12', '357', '178', '127', '603', '9', '22', '64', '313', '483']
828 ['483', '408', '98', '474', '134', '530', '56', '48', '657', '603']
808 ['174', '172', '483', '408', '318', '89', '169', '50', '511', '513']
835 ['64', '178', '657', '603', '483', '114', '493', '498', '478', '963']
833 ['276', '582', '114', '513', '60', '408', '709', '856', '86', '607']
836 ['427', '64', '408', '480', '169', '114', '483', '515', '197', '651']
816 ['474', '98', '603', '408', '178', '318', '56', '357', '169', '12']
838 ['483', '178', '64', '493', '285', '515', '427', '192', '479', '651']
839 ['480', '408', '483', '963', '114', '923', '513', '603', '169', '488']
840 ['318', '114', '408', '136', '488', '633', '427', '694', '178', '1449']
832 ['169', '98', '114', '408', '318', '515', '480', '603', '189', '89']
810 ['474', '144', '1', '98', '193', '194', '603', '100', '181', '515']
844 ['408', '483', '169', '603', '657', '98', '272', '64', '285', '923']
843 ['408', '169', '189', '134', '156', '12', '114', '513', '272', '318']
834 ['135', '169', '12', '174', '603', '318', '98', '408', '64', '511']
846 ['114', '313', '156', '169', '1449', '166', '923', '1143', '408', '1073']
837 ['483', '515', '923', '50', '114', '408', '315', '64', '318', '178']
813 ['169', '318', '192', '408', '179', '483', '98', '512', '187', '603']
842 ['192', '172', '187', '12', '318', '513', '357', '603', '134', '483']
847 ['64', '87', '478', '268', '12', '315', '493', '22', '169', '497']
848 ['114', '313', '64', '408', '659', '251', '178', '611', '169', '87']
822 ['64', '318', '313', '178', '302', '479', '98', '59', '657', '611']
852 ['318', '483', '187', '173', '178', '64', '313', '429', '169', '174']
851 ['181', '169', '187', '190', '528', '114', '177', '189', '520', '513']
849 ['302', '265', '86', '257', '486', '98', '194', '603', '1137', '100']
854 ['169', '408', '192', '474', '480', '657', '178', '201', '209', '114']
850 ['64', '313', '1', '143', '483', '603', '657', '169', '489', '191']
858 ['64', '318', '483', '12', '480', '408', '50', '178', '657', '357']
853 ['408', '513', '114', '134', '313', '169', '50', '199', '98', '64']
855 ['318', '316', '64', '187', '114', '302', '197', '963', '408', '651']
824 ['511', '134', '513', '98', '127', '114', '199', '483', '641', '169']
845 ['318', '408', '12', '169', '657', '114', '64', '174', '483', '427']
841 ['169', '12', '357', '657', '89', '64', '603', '114', '408', '100']
859 ['169', '64', '98', '603', '479', '173', '515', '408', '12', '480']
862 ['272', '408', '178', '318', '189', '169', '513', '963', '30', '156']
856 ['169', '64', '318', '12', '603', '114', '657', '513', '515', '178']
820 ['64', '408', '272', '12', '318', '654', '185', '187', '169', '483']
863 ['318', '89', '64', '197', '208', '963', '59', '173', '169', '190']
860 ['318', '483', '190', '64', '484', '178', '169', '963', '603', '1194']
857 ['318', '496', '408', '515', '272', '64', '178', '169', '479', '59']
864 ['515', '187', '963', '272', '313', '528', '657', '479', '251', '923']
865 ['12', '89', '173', '357', '603', '657', '199', '318', '183', '64']
868 ['175', '357', '657', '165', '654', '302', '137', '134', '483', '251']
867 ['408', '178', '169', '165', '187', '127', '357', '923', '513', '285']
861 ['12', '64', '169', '251', '603', '641', '515', '657', '98', '408']
870 ['408', '114', '963', '285', '14', '529', '515', '187', '525', '482']
871 ['318', '12', '114', '64', '483', '169', '408', '178', '430', '657']
875 ['199', '178', '483', '182', '127', '408', '493', '482', '475', '272']
876 ['408', '169', '603', '64', '357', '114', '427', '657', '480', '515']
872 ['1449', '302', '318', '169', '189', '603', '79', '513', '427', '484']
866 ['483', '479', '318', '1449', '408', '22', '98', '923', '64', '515']
877 ['315', '496', '64', '127', '272', '318', '357', '408', '603', '320']
873 ['64', '408', '272', '169', '178', '318', '515', '498', '480', '15']
880 ['427', '251', '198', '408', '528', '813', '178', '480', '134', '496']
878 ['408', '313', '192', '657', '603', '114', '483', '493', '169', '480']
869 ['169', '135', '483', '89', '474', '12', '185', '480', '408', '190']
881 ['169', '496', '272', '607', '963', '966', '210', '657', '313', '316']
879 ['357', '64', '427', '272', '56', '408', '515', '513', '483', '169']
883 ['641', '923', '187', '169', '114', '963', '478', '474', '654', '507']
882 ['480', '318', '64', '313', '169', '408', '114', '651', '12', '520']
884 ['169', '483', '302', '134', '603', '114', '654', '170', '272', '427']
886 ['114', '169', '513', '408', '511', '313', '480', '302', '661', '199']
885 ['313', '64', '114', '496', '480', '657', '515', '408', '165', '385']
889 ['114', '478', '272', '1019', '963', '429', '143', '251', '316', '136']
874 ['178', '657', '187', '64', '408', '513', '318', '251', '169', '12']
892 ['169', '272', '474', '427', '963', '302', '408', '603', '513', '114']
890 ['408', '178', '318', '12', '14', '242', '60', '320', '1142', '64']
893 ['169', '98', '357', '483', '408', '313', '480', '189', '427', '64']
887 ['15', '750', '79', '408', '705', '59', '516', '316', '313', '205']
891 ['242', '98', '603', '515', '272', '483', '408', '178', '318', '64']
894 ['169', '357', '657', '408', '1449', '963', '603', '89', '64', '480']
896 ['357', '169', '114', '520', '170', '194', '750', '408', '197', '193']
897 ['302', '114', '169', '191', '513', '64', '357', '511', '178', '272']
901 ['143', '313', '79', '302', '480', '603', '483', '515', '173', '114']
899 ['489', '169', '87', '480', '178', '313', '136', '482', '656', '657']
903 ['169', '408', '190', '511', '474', '134', '513', '200', '285', '654']
904 ['87', '408', '318', '8', '528', '515', '272', '64', '923', '251']
907 ['242', '302', '474', '265', '193', '603', '1137', '196', '515', '526']
905 ['357', '408', '187', '64', '318', '127', '483', '480', '1137', '606']
902 ['169', '408', '178', '427', '98', '22', '603', '511', '705', '190']
898 ['169', '408', '12', '483', '50', '187', '528', '603', '923', '285']
895 ['357', '483', '127', '318', '64', '98', '114', '963', '515', '408']
906 ['483', '169', '56', '64', '114', '357', '98', '480', '318', '12']
900 ['408', '191', '170', '174', '134', '427', '114', '357', '135', '169']
908 ['178', '169', '408', '64', '285', '272', '513', '189', '474', '59']
916 ['127', '169', '285', '408', '191', '515', '357', '661', '603', '1142']
911 ['169', '64', '963', '408', '657', '178', '318', '513', '12', '170']
912 ['480', '178', '169', '603', '657', '285', '923', '202', '493', '189']
914 ['408', '169', '657', '483', '515', '275', '114', '480', '178', '923']
918 ['285', '272', '528', '813', '61', '408', '513', '30', '479', '511']
919 ['169', '485', '603', '178', '963', '251', '45', '213', '479', '408']
921 ['186', '318', '114', '22', '64', '302', '12', '520', '204', '963']
910 ['318', '515', '483', '603', '474', '64', '408', '427', '479', '136']
913 ['511', '134', '190', '275', '272', '515', '170', '114', '521', '1039']
915 ['169', '483', '64', '12', '603', '50', '318', '484', '98', '408']
922 ['483', '169', '408', '493', '199', '178', '709', '750', '515', '64']
923 ['98', '603', '515', '427', '480', '272', '79', '483', '408', '178']
928 ['242', '302', '474', '603', '32', '432', '515', '480', '498', '272']
927 ['313', '114', '318', '272', '302', '483', '603', '657', '169', '408']
924 ['603', '483', '190', '169', '657', '1449', '474', '22', '479', '520']
929 ['302', '64', '114', '513', '357', '511', '427', '169', '251', '408']
931 ['318', '64', '98', '496', '963', '114', '169', '174', '603', '56']
917 ['318', '169', '357', '408', '603', '316', '1449', '313', '189', '59']
932 ['318', '408', '963', '694', '59', '1073', '923', '512', '1194', '12']
909 ['302', '474', '603', '427', '480', '272', '483', '408', '127', '89']
934 ['98', '169', '272', '511', '114', '408', '187', '318', '165', '189']
933 ['114', '963', '185', '479', '513', '856', '521', '656', '134', '427']
935 ['169', '408', '318', '114', '923', '12', '611', '189', '493', '427']
938 ['64', '174', '520', '265', '302', '199', '79', '483', '496', '659']
940 ['169', '483', '408', '178', '603', '320', '423', '318', '1', '59']
888 ['483', '408', '169', '603', '318', '480', '515', '114', '657', '251']
925 ['318', '313', '178', '316', '603', '496', '191', '114', '657', '169']
942 ['98', '64', '178', '169', '963', '408', '483', '132', '22', '603']
937 ['318', '169', '603', '480', '98', '114', '64', '657', '427', '606']
926 ['318', '357', '169', '408', '50', '285', '174', '483', '178', '251']
943 ['223', '198', '45', '269', '357', '272', '531', '483', '963', '134']
939 ['302', '474', '144', '95', '98', '603', '100', '181', '515', '427']
936 ['483', '408', '134', '474', '89', '480', '169', '12', '114', '1449']
930 ['98', '357', '603', '318', '511', '197', '480', '285', '408', '606']
920 ['318', '483', '79', '174', '408', '178', '169', '657', '603', '114']
941 ['50', '64', '127', '169', '483', '114', '603', '12', '318', '98']

In [25]:

#알고리즘 평가
import surprise
from surprise import Dataset
data = Dataset.load_builtin('ml-100k')
data.split(n_folds=3)

In [ ]:

# RMSE(평균 제곱근 편차)
# 추정 값 또는 모델이 예측한 값과 실제 환경에서 관찰되는 값의 차이를 다룰 때 사용하는 측도
# 정밀도를 표현하는데 적합하다.
# 값이 커질수록 예측에 어느정도 오류가 있는지 알 수 있다.

# MAE(평균 절대 오차)
# 두 개의 연속 변수 간의 차리를 측정한 것
# 예측 결과와 최종결과를 비교하는 방법 중 하나.

#RMSE vs MAE
# RMSE 가 MAE보다 이상치에 민감
# 하지만 이상치가 매우 드물 경우 RMSE가 잘 맞아 일반적으로 널리 사용됨

In [26]:

sim_options = {'name': 'msd'}
algo = surprise.KNNBasic(sim_options = sim_options)
surprise.evaluate(algo, data)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:66: UserWarning: The evaluate() method is deprecated. Please use model_selection.cross_validate() instead.
  'model_selection.cross_validate() instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/dataset.py:193: UserWarning: Using data.split() or using load_from_folds() without using a CV iterator is now deprecated. 
  UserWarning)
Evaluating RMSE, MAE of algorithm KNNBasic.

------------
Fold 1
Computing the msd similarity matrix...
Done computing similarity matrix.
RMSE: 0.9886
MAE:  0.7802
------------
Fold 2
Computing the msd similarity matrix...
Done computing similarity matrix.
RMSE: 0.9915
MAE:  0.7840
------------
Fold 3
Computing the msd similarity matrix...
Done computing similarity matrix.
RMSE: 0.9866
MAE:  0.7817
------------
------------
Mean RMSE: 0.9889
Mean MAE : 0.7820
------------
------------

Out[26]:

CaseInsensitiveDefaultDict(list,
                           {'mae': [0.7802189976083773,
                             0.783998616236742,
                             0.7816694414058579],
                            'rmse': [0.988581860543401,
                             0.9915342547625395,
                             0.9866376586861513]})

In [27]:

sim_options = {'name' : 'cosine'}
algo = surprise.KNNBasic(sim_options=sim_options)
surprise.evaluate(algo,data)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:66: UserWarning: The evaluate() method is deprecated. Please use model_selection.cross_validate() instead.
  'model_selection.cross_validate() instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/dataset.py:193: UserWarning: Using data.split() or using load_from_folds() without using a CV iterator is now deprecated. 
  UserWarning)
Evaluating RMSE, MAE of algorithm KNNBasic.

------------
Fold 1
Computing the cosine similarity matrix...
Done computing similarity matrix.
RMSE: 1.0205
MAE:  0.8060
------------
Fold 2
Computing the cosine similarity matrix...
Done computing similarity matrix.
RMSE: 1.0246
MAE:  0.8120
------------
Fold 3
Computing the cosine similarity matrix...
Done computing similarity matrix.
RMSE: 1.0195
MAE:  0.8091
------------
------------
Mean RMSE: 1.0215
Mean MAE : 0.8090
------------
------------

Out[27]:

CaseInsensitiveDefaultDict(list,
                           {'mae': [0.806030797261509,
                             0.8120439158026675,
                             0.8090582538793538],
                            'rmse': [1.020463034428536,
                             1.0246269391772709,
                             1.0194786302184546]})

In [28]:

sim_options = {'name' : 'pearson_baseline'}
algo = surprise.KNNBasic(sim_options=sim_options)
surprise.evaluate(algo,data)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:66: UserWarning: The evaluate() method is deprecated. Please use model_selection.cross_validate() instead.
  'model_selection.cross_validate() instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/dataset.py:193: UserWarning: Using data.split() or using load_from_folds() without using a CV iterator is now deprecated. 
  UserWarning)
Evaluating RMSE, MAE of algorithm KNNBasic.

------------
Fold 1
Estimating biases using als...
Computing the pearson_baseline similarity matrix...
Done computing similarity matrix.
RMSE: 1.0099
MAE:  0.7982
------------
Fold 2
Estimating biases using als...
Computing the pearson_baseline similarity matrix...
Done computing similarity matrix.
RMSE: 1.0140
MAE:  0.8030
------------
Fold 3
Estimating biases using als...
Computing the pearson_baseline similarity matrix...
Done computing similarity matrix.
RMSE: 1.0070
MAE:  0.7987
------------
------------
Mean RMSE: 1.0103
Mean MAE : 0.8000
------------
------------

Out[28]:

CaseInsensitiveDefaultDict(list,
                           {'mae': [0.7982412446965477,
                             0.802987846170291,
                             0.798665233328668],
                            'rmse': [1.009867180638949,
                             1.013983308014259,
                             1.0070221348855233]})

In [29]:

algo = surprise.SVD()
surprise.evaluate(algo,data)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/evaluate.py:66: UserWarning: The evaluate() method is deprecated. Please use model_selection.cross_validate() instead.
  'model_selection.cross_validate() instead.', UserWarning)
/Users/apple/anaconda3/lib/python3.6/site-packages/surprise/dataset.py:193: UserWarning: Using data.split() or using load_from_folds() without using a CV iterator is now deprecated. 
  UserWarning)
Evaluating RMSE, MAE of algorithm SVD.

------------
Fold 1
RMSE: 0.9467
MAE:  0.7461
------------
Fold 2
RMSE: 0.9476
MAE:  0.7470
------------
Fold 3
RMSE: 0.9430
MAE:  0.7454
------------
------------
Mean RMSE: 0.9458
Mean MAE : 0.7461
------------
------------

Out[29]:

CaseInsensitiveDefaultDict(list,
                           {'mae': [0.7461152162961537,
                             0.7469725668755399,
                             0.7453529954592129],
                            'rmse': [0.9466899057105319,
                             0.9475860673879669,
                             0.9430403257419846]})
error: Content is protected !!
Scroll to Top