Test 8 Solution
Ensemble Learning¶
from sklearn.datasets import make_classification
from sklearn.model_selection import GridSearchCV
import nose.tools as test_# For testing
import numpy as np
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# Useful in beautifying numpy arrays.
from IPython.display import HTML, display
import tabulate
def pp(a, show_head=True):
'''
args: show_head -> if True print only first 5 rows.
return: None
'''
if a.ndim < 2:
a = [a]
if show_head:
display(HTML(tabulate.tabulate(a[:5], tablefmt='html')))
return
display(HTML(tabulate.tabulate(a, tablefmt='html')))
In this test, we'll use SVC, Bagging (voting, stacking etc) and Boosting and compare their performaces. To this end, let's use a difficult to learn dataset with 16 classses and 7 features (5 informative and 2 redundant).
Question 1¶
3 Points
Generate a dataset using make_classification given a number of samples to generate, number of classes and number of features.
def generate_dataset(n_samples_, n_classes_, n_features_, \
n_informative_, n_redundant_, random_state_, shuffle_):
'''
args: n_samples -> int => number of samples to generate
n_classes -> int => number of classes in your dataset
n_features -> int => total number of features (inforamtive + redundant)
n_informative -> int => number of informative features
n_informative -> int => number of informative features
n_redundant -> int => number of redundant features
random_state_ -> int => random state (for reproduciable results)
shuffle_ -> Bool => whether to shuffle data.
return: tuple (X, y) => X is ndarray of features (m, 7)
=> y is ndarray of labels (m,)
'''
### BEGIN SOLUTION
X, y = make_classification(n_samples=n_samples_, n_classes=n_classes_, \
n_features=n_features_, n_informative=n_informative_, \
n_redundant=n_redundant_, random_state=random_state_, \
shuffle=shuffle_)
return (X, y)
### END SOLUTION
X_for_test = generate_dataset(10000, 16, 7, 5, 2, 42, True)[0]
y_for_test = generate_dataset(10000, 16, 7, 5, 2, 42, True)[1]
test_.eq_ (X_for_test.shape, (10000, 7))
test_.eq_ (y_for_test.shape, (10000,))
### BEGIN HIDDEN TESTS
test_.ok_(np.isclose(X_for_test[:5][1], np.asarray([ 2.24443806, 1.7409484 , -1.50799445, -1.87367918, 4.70342764,
0.72546393, -3.27004638])).all())
### END HIDDEN TESTS
X = generate_dataset(10000, 16, 7, 5, 2, 42, True)[0]
y = generate_dataset(10000, 16, 7, 5, 2, 42, True)[1]
print('Dataset with 5 informative features and 2 redundant features:')
pp(X)
print('Labels (Total Classes-16):')
pp(y)
Dataset with 5 informative features and 2 redundance features:
0.913171 | 0.83296 | 1.19702 | 0.293289 | -0.573523 | 0.97669 | 0.926118 |
2.24444 | 1.74095 | -1.50799 | -1.87368 | 4.70343 | 0.725464 | -3.27005 |
2.64499 | 0.132772 | 3.39987 | -1.80951 | -1.39368 | -1.52042 | 0.228421 |
0.0373674 | 0.880855 | 0.256795 | -1.93653 | 2.12171 | -2.14082 | -2.64057 |
0.938134 | -2.22023 | 2.08695 | -1.89748 | -2.10017 | -2.00003 | 0.607856 |
Labels (Total Classes-16):
15 | 12 | 13 | 4 | 5 | 14 | 5 | 15 | 14 | 7 | 3 | 15 | 1 | 2 | 6 | 0 | 0 | 10 | 5 | 10 | 0 | 12 | 0 | 1 | 1 | 10 | 13 | 5 | 1 | 2 | 2 | 3 | 14 | 0 | 13 | 11 | 3 | 10 | 7 | 1 | 11 | 9 | 9 | 13 | 14 | 15 | 10 | 1 | 0 | 3 | 12 | 6 | 14 | 3 | 13 | 3 | 7 | 3 | 6 | 1 | 7 | 15 | 10 | 0 | 3 | 12 | 2 | 14 | 8 | 4 | 12 | 5 | 12 | 1 | 12 | 13 | 6 | 4 | 12 | 6 | 3 | 11 | 0 | 14 | 11 | 9 | 8 | 10 | 7 | 4 | 10 | 7 | 9 | 1 | 2 | 2 | 14 | 0 | 8 | 5 | 5 | 14 | 15 | 1 | 7 | 4 | 6 | 0 | 6 | 9 | 1 | 12 | 11 | 15 | 12 | 8 | 3 | 4 | 10 | 14 | 8 | 1 | 2 | 0 | 15 | 0 | 12 | 0 | 8 | 6 | 11 | 1 | 3 | 0 | 10 | 8 | 1 | 13 | 9 | 9 | 14 | 15 | 0 | 8 | 10 | 14 | 7 | 6 | 13 | 7 | 8 | 12 | 11 | 6 | 11 | 11 | 6 | 14 | 14 | 3 | 13 | 9 | 14 | 15 | 10 | 2 | 10 | 10 | 14 | 12 | 15 | 6 | 10 | 4 | 4 | 11 | 11 | 12 | 9 | 8 | 0 | 10 | 0 | 10 | 12 | 0 | 13 | 0 | 0 | 7 | 3 | 15 | 2 | 2 | 6 | 2 | 1 | 11 | 1 | 4 | 15 | 10 | 4 | 8 | 11 | 9 | 14 | 10 | 1 | 4 | 12 | 3 | 14 | 7 | 2 | 8 | 2 | 5 | 3 | 11 | 13 | 4 | 7 | 7 | 9 | 13 | 12 | 14 | 14 | 7 | 6 | 13 | 1 | 4 | 11 | 14 | 3 | 11 | 4 | 14 | 11 | 3 | 7 | 1 | 11 | 12 | 8 | 1 | 9 | 9 | 11 | 0 | 14 | 13 | 7 | 15 | 9 | 8 | 3 | 14 | 12 | 6 | 15 | 14 | 3 | 2 | 0 | 12 | 15 | 7 | 7 | 9 | 13 | 4 | 0 | 12 | 1 | 10 | 5 | 1 | 13 | 7 | 4 | 4 | 8 | 14 | 1 | 0 | 10 | 4 | 0 | 14 | 0 | 11 | 5 | 9 | 1 | 6 | 1 | 13 | 7 | 5 | 6 | 15 | 1 | 10 | 11 | 1 | 4 | 10 | 11 | 10 | 12 | 5 | 2 | 15 | 3 | 7 | 1 | 5 | 3 | 15 | 0 | 0 | 9 | 15 | 4 | 6 | 1 | 13 | 3 | 13 | 5 | 2 | 13 | 10 | 8 | 3 | 7 | 2 | 9 | 7 | 10 | 1 | 0 | 0 | 9 | 12 | 5 | 13 | 1 | 9 | 11 | 2 | 15 | 13 | 3 | 12 | 15 | 5 | 2 | 14 | 3 | 0 | 0 | 12 | 6 | 6 | 8 | 2 | 6 | 11 | 9 | 1 | 3 | 2 | 1 | 10 | 6 | 6 | 10 | 12 | 9 | 6 | 5 | 6 | 9 | 4 | 10 | 4 | 13 | 4 | 5 | 3 | 0 | 2 | 3 | 3 | 5 | 3 | 9 | 3 | 1 | 10 | 8 | 7 | 2 | 1 | 11 | 2 | 12 | 7 | 12 | 2 | 2 | 2 | 6 | 12 | 7 | 1 | 9 | 2 | 2 | 1 | 15 | 0 | 4 | 3 | 8 | 3 | 0 | 2 | 14 | 14 | 2 | 9 | 12 | 0 | 3 | 1 | 5 | 12 | 7 | 0 | 13 | 6 | 1 | 15 | 10 | 0 | 11 | 12 | 0 | 5 | 2 | 13 | 13 | 5 | 13 | 8 | 3 | 13 | 13 | 12 | 3 | 4 | 7 | 13 | 15 | 9 | 2 | 10 | 10 | 5 | 3 | 6 | 3 | 5 | 3 | 12 | 12 | 3 | 10 | 3 | 8 | 15 | 10 | 9 | 14 | 11 | 13 | 11 | 12 | 3 | 3 | 0 | 14 | 4 | 2 | 4 | 0 | 7 | 2 | 10 | 0 | 13 | 6 | 11 | 5 | 11 | 2 | 12 | 7 | 5 | 14 | 15 | 7 | 4 | 8 | 14 | 1 | 3 | 7 | 12 | 15 | 4 | 13 | 3 | 8 | 7 | 14 | 11 | 13 | 14 | 14 | 2 | 13 | 2 | 9 | 10 | 13 | 4 | 3 | 10 | 5 | 6 | 11 | 3 | 15 | 6 | 4 | 9 | 15 | 6 | 7 | 0 | 6 | 7 | 9 | 13 | 15 | 0 | 14 | 4 | 13 | 11 | 3 | 14 | 8 | 1 | 13 | 2 | 12 | 3 | 6 | 9 | 7 | 7 | 14 | 12 | 13 | 3 | 11 | 8 | 12 | 14 | 5 | 9 | 6 | 5 | 5 | 15 | 8 | 13 | 15 | 2 | 7 | 12 | 11 | 6 | 6 | 3 | 1 | 8 | 12 | 14 | 5 | 14 | 5 | 8 | 6 | 15 | 2 | 11 | 14 | 10 | 2 | 9 | 13 | 7 | 13 | 15 | 10 | 6 | 0 | 0 | 10 | 10 | 9 | 12 | 10 | 8 | 0 | 5 | 13 | 10 | 9 | 10 | 8 | 1 | 8 | 14 | 1 | 6 | 2 | 14 | 1 | 9 | 0 | 4 | 12 | 0 | 8 | 5 | 9 | 12 | 7 | 9 | 4 | 10 | 12 | 7 | 9 | 12 | 7 | 14 | 15 | 10 | 7 | 1 | 8 | 1 | 8 | 13 | 12 | 7 | 4 | 14 | 8 | 11 | 1 | 8 | 8 | 13 | 7 | 13 | 6 | 15 | 14 | 13 | 2 | 11 | 13 | 7 | 0 | 2 | 5 | 2 | 3 | 2 | 13 | 6 | 10 | 5 | 0 | 13 | 15 | 7 | 2 | 1 | 2 | 6 | 3 | 4 | 3 | 15 | 9 | 5 | 5 | 12 | 4 | 8 | 1 | 3 | 14 | 5 | 3 | 0 | 3 | 5 | 9 | 12 | 13 | 9 | 1 | 7 | 4 | 3 | 0 | 7 | 12 | 5 | 14 | 15 | 0 | 5 | 11 | 13 | 7 | 6 | 3 | 2 | 1 | 1 | 3 | 2 | 2 | 14 | 1 | 1 | 7 | 10 | 5 | 11 | 15 | 1 | 15 | 6 | 6 | 11 | 5 | 10 | 8 | 3 | 2 | 4 | 5 | 15 | 15 | 14 | 6 | 5 | 5 | 8 | 11 | 7 | 10 | 9 | 11 | 10 | 5 | 11 | 2 | 10 | 14 | 5 | 2 | 2 | 13 | 2 | 12 | 4 | 5 | 12 | 8 | 1 | 2 | 7 | 8 | 7 | 12 | 9 | 4 | 14 | 14 | 14 | 9 | 12 | 11 | 13 | 13 | 2 | 3 | 11 | 13 | 2 | 12 | 5 | 7 | 5 | 1 | 2 | 5 | 2 | 2 | 12 | 12 | 4 | 7 | 3 | 13 | 6 | 6 | 7 | 5 | 14 | 6 | 0 | 8 | 0 | 2 | 9 | 15 | 10 | 14 | 14 | 2 | 0 | 4 | 0 | 14 | 7 | 8 | 6 | 4 | 11 | 8 | 3 | 4 | 13 | 4 | 7 | 7 | 13 | 9 | 3 | 9 | 5 | 6 | 15 | 14 | 8 | 4 | 8 | 7 | 13 | 13 | 11 | 4 | 10 | 10 | 4 | 1 | 1 | 2 | 2 | 1 | 5 | 13 | 4 | 3 | 13 | 3 | 1 | 13 | 4 | 0 | 13 | 13 | 13 | 9 | 5 | 14 | 8 | 2 | 14 | 5 | 5 | 3 | 8 | 1 | 15 | 14 | 9 | 7 | 1 | 13 | 11 | 1 | 10 | 6 | 12 | 10 | 1 | 12 | 15 | 0 | 6 | 15 | 13 | 4 | 1 | 3 | 4 | 5 | 4 | 12 | 7 | 2 | 4 | 6 | 13 | 9 | 14 | 3 | 6 | 15 | 3 | 5 | 9 | 0 | 4 | 1 | 8 | 4 | 2 | 4 | 11 | 0 | 10 | 15 | 13 | 11 | 3 | 4 | 5 | 1 | 12 | 0 | 9 | 6 | 4 | 7 | 11 | 7 | 15 | 2 | 2 | 1 | 3 | 2 | 0 | 4 | 1 | 13 | 13 | 7 | 1 | 13 | 2 | 0 | 6 | 5 | 5 | 3 | 14 | 9 | 14 | 6 | 1 | 2 | 9 | 11 | 2 | 15 | 0 | 10 | 13 | 7 | 0 | 5 | 3 | 4 | 8 | 10 | 1 | 5 | 4 | 9 | 4 | 11 | 2 | 8 | 7 | 7 | 1 | 15 | 10 | 3 | 1 | 11 | 3 | 15 | 1 | 13 | 3 | 3 | 4 | 15 | 9 | 14 | 12 | 13 | 4 | 2 | 2 | 7 | 8 | 1 | 11 | 10 | 6 | 15 | 11 | 14 | 10 | 13 | 10 | 13 | 8 | 6 | 10 | 13 | 8 | 3 | 10 | 3 | 14 | 13 | 5 | 5 | 9 | 1 | 12 | 8 | 1 | 3 | 3 | 10 | 14 | 3 | 11 | 1 | 1 | 12 | 9 | 6 | 12 | 4 | 10 | 6 | 14 | 15 | 10 | 10 | 4 | 9 | 14 | 5 | 0 | 10 | 11 | 14 | 4 | 13 | 9 | 4 | 5 | 10 | 8 | 6 | 10 | 10 | 15 | 10 | 10 | 14 | 14 | 13 | 13 | 15 | 3 | 12 | 15 | 5 | 6 | 12 | 14 | 3 | 8 | 14 | 2 | 15 | 1 | 12 | 8 | 0 | 8 | 15 | 1 | 2 | 9 | 9 | 6 | 13 | 0 | 4 | 15 | 11 | 5 | 13 | 14 | 10 | 8 | 7 | 14 | 12 | 11 | 4 | 7 | 5 | 0 | 5 | 6 | 10 | 4 | 6 | 10 | 5 | 14 | 7 | 6 | 5 | 6 | 6 | 7 | 0 | 2 | 8 | 14 | 3 | 8 | 2 | 3 | 6 | 12 | 13 | 9 | 2 | 0 | 1 | 11 | 7 | 6 | 9 | 10 | 9 | 14 | 3 | 11 | 11 | 10 | 11 | 11 | 9 | 5 | 9 | 4 | 4 | 11 | 0 | 4 | 14 | 8 | 5 | 12 | 13 | 10 | 2 | 14 | 14 | 10 | 10 | 3 | 3 | 12 | 3 | 13 | 4 | 13 | 9 | 11 | 2 | 10 | 1 | 6 | 15 | 5 | 10 | 8 | 9 | 7 | 0 | 3 | 13 | 7 | 7 | 6 | 11 | 3 | 9 | 10 | 5 | 5 | 3 | 10 | 5 | 3 | 3 | 4 | 6 | 14 | 4 | 5 | 9 | 8 | 15 | 4 | 14 | 11 | 5 | 15 | 10 | 12 | 6 | 14 | 4 | 5 | 12 | 3 | 13 | 2 | 10 | 4 | 5 | 14 | 1 | 2 | 0 | 10 | 14 | 1 | 0 | 8 | 8 | 0 | 12 | 1 | 5 | 13 | 12 | 12 | 9 | 11 | 2 | 0 | 13 | 3 | 4 | 2 | 13 | 10 | 0 | 0 | 6 | 3 | 2 | 7 | 7 | 12 | 8 | 12 | 7 | 11 | 14 | 12 | 10 | 1 | 8 | 8 | 8 | 6 | 10 | 11 | 5 | 2 | 0 | 12 | 14 | 1 | 13 | 11 | 7 | 6 | 13 | 4 | 12 | 0 | 2 | 2 | 4 | 1 | 2 | 14 | 9 | 5 | 6 | 11 | 14 | 14 | 12 | 4 | 0 | 5 | 4 | 3 | 10 | 5 | 7 | 7 | 8 | 10 | 8 | 4 | 6 | 6 | 10 | 11 | 3 | 11 | 15 | 15 | 5 | 4 | 2 | 10 | 5 | 1 | 11 | 13 | 5 | 13 | 4 | 3 | 13 | 14 | 2 | 3 | 7 | 3 | 14 | 7 | 1 | 2 | 13 | 1 | 14 | 11 | 0 | 12 | 11 | 5 | 14 | 4 | 8 | 15 | 9 | 7 | 13 | 4 | 0 | 0 | 3 | 4 | 4 | 8 | 5 | 15 | 7 | 3 | 9 | 13 | 12 | 12 | 2 | 1 | 0 | 8 | 7 | 15 | 15 | 8 | 1 | 9 | 4 | 15 | 4 | 1 | 11 | 8 | 4 | 8 | 12 | 12 | 4 | 0 | 6 | 5 | 13 | 11 | 9 | 7 | 9 | 12 | 0 | 1 | 14 | 9 | 10 | 2 | 2 | 12 | 14 | 6 | 14 | 2 | 4 | 15 | 5 | 3 | 1 | 15 | 5 | 11 | 12 | 6 | 2 | 3 | 5 | 5 | 7 | 14 | 13 | 10 | 13 | 11 | 9 | 10 | 9 | 1 | 9 | 0 | 0 | 11 | 11 | 10 | 6 | 13 | 11 | 14 | 1 | 7 | 11 | 5 | 6 | 2 | 3 | 10 | 4 | 6 | 4 | 9 | 10 | 13 | 13 | 0 | 10 | 7 | 8 | 13 | 6 | 12 | 5 | 3 | 2 | 11 | 13 | 9 | 12 | 13 | 14 | 10 | 10 | 13 | 6 | 15 | 8 | 2 | 13 | 14 | 4 | 7 | 12 | 3 | 6 | 1 | 10 | 5 | 9 | 3 | 3 | 9 | 2 | 6 | 14 | 8 | 10 | 12 | 1 | 14 | 0 | 5 | 0 | 6 | 15 | 10 | 13 | 15 | 2 | 13 | 10 | 6 | 3 | 7 | 3 | 2 | 0 | 9 | 4 | 2 | 4 | 14 | 13 | 3 | 6 | 9 | 8 | 11 | 1 | 9 | 5 | 11 | 12 | 3 | 8 | 13 | 7 | 4 | 7 | 4 | 5 | 1 | 14 | 9 | 8 | 10 | 7 | 5 | 12 | 1 | 13 | 8 | 11 | 9 | 4 | 5 | 1 | 0 | 1 | 11 | 5 | 3 | 8 | 8 | 7 | 5 | 2 | 12 | 4 | 3 | 15 | 10 | 7 | 1 | 6 | 11 | 13 | 13 | 14 | 15 | 12 | 3 | 1 | 14 | 5 | 10 | 10 | 11 | 13 | 1 | 14 | 4 | 14 | 11 | 15 | 10 | 0 | 14 | 5 | 9 | 12 | 12 | 5 | 11 | 2 | 9 | 10 | 15 | 10 | 7 | 15 | 1 | 4 | 14 | 3 | 13 | 11 | 10 | 1 | 12 | 3 | 10 | 0 | 11 | 5 | 3 | 6 | 2 | 10 | 2 | 10 | 1 | 11 | 1 | 7 | 15 | 1 | 11 | 6 | 10 | 8 | 8 | 11 | 13 | 11 | 14 | 4 | 7 | 3 | 8 | 5 | 1 | 0 | 13 | 14 | 1 | 6 | 1 | 4 | 1 | 6 | 3 | 2 | 3 | 13 | 8 | 13 | 14 | 7 | 14 | 0 | 11 | 0 | 3 | 15 | 11 | 1 | 7 | 1 | 10 | 12 | 5 | 13 | 10 | 14 | 6 | 5 | 2 | 1 | 3 | 12 | 14 | 1 | 2 | 15 | 4 | 9 | 15 | 13 | 10 | 13 | 0 | 0 | 8 | 3 | 6 | 1 | 15 | 12 | 1 | 2 | 2 | 11 | 6 | 5 | 2 | 15 | 0 | 12 | 2 | 12 | 12 | 4 | 1 | 1 | 8 | 11 | 3 | 2 | 0 | 15 | 9 | 15 | 5 | 14 | 0 | 9 | 10 | 9 | 10 | 0 | 5 | 14 | 9 | 14 | 11 | 10 | 14 | 8 | 10 | 1 | 4 | 3 | 11 | 4 | 0 | 3 | 3 | 7 | 13 | 0 | 3 | 14 | 14 | 12 | 13 | 7 | 13 | 14 | 9 | 13 | 9 | 4 | 1 | 5 | 5 | 9 | 14 | 5 | 1 | 12 | 9 | 14 | 6 | 10 | 5 | 13 | 8 | 0 | 4 | 3 | 5 | 4 | 2 | 15 | 13 | 15 | 9 | 1 | 12 | 10 | 5 | 4 | 15 | 7 | 14 | 12 | 11 | 6 | 4 | 9 | 12 | 5 | 8 | 14 | 12 | 5 | 0 | 6 | 8 | 15 | 2 | 10 | 11 | 12 | 9 | 5 | 10 | 9 | 10 | 0 | 10 | 9 | 1 | 8 | 10 | 10 | 14 | 7 | 6 | 15 | 1 | 8 | 6 | 9 | 13 | 6 | 4 | 3 | 12 | 1 | 0 | 9 | 11 | 13 | 8 | 14 | 6 | 7 | 8 | 2 | 6 | 13 | 7 | 5 | 1 | 9 | 1 | 14 | 4 | 9 | 15 | 2 | 7 | 10 | 15 | 6 | 3 | 5 | 7 | 15 | 9 | 4 | 14 | 4 | 10 | 1 | 8 | 2 | 8 | 2 | 11 | 5 | 8 | 2 | 2 | 8 | 1 | 3 | 3 | 7 | 14 | 3 | 4 | 3 | 4 | 0 | 2 | 4 | 14 | 13 | 1 | 14 | 11 | 4 | 13 | 13 | 14 | 6 | 6 | 8 | 5 | 14 | 6 | 11 | 3 | 4 | 4 | 6 | 14 | 4 | 6 | 14 | 4 | 12 | 3 | 1 | 9 | 14 | 15 | 3 | 12 | 8 | 15 | 9 | 7 | 14 | 9 | 6 | 6 | 1 | 4 | 9 | 12 | 4 | 11 | 7 | 14 | 6 | 4 | 13 | 4 | 6 | 12 | 5 | 2 | 7 | 8 | 3 | 4 | 12 | 2 | 6 | 8 | 0 | 13 | 0 | 11 | 13 | 10 | 7 | 4 | 12 | 8 | 13 | 10 | 11 | 15 | 12 | 11 | 15 | 4 | 0 | 14 | 2 | 4 | 7 | 8 | 3 | 11 | 1 | 15 | 11 | 3 | 0 | 12 | 5 | 13 | 8 | 3 | 13 | 12 | 1 | 8 | 4 | 10 | 1 | 15 | 6 | 5 | 2 | 11 | 6 | 14 | 2 | 4 | 15 | 13 | 8 | 12 | 2 | 9 | 0 | 4 | 2 | 5 | 4 | 0 | 14 | 1 | 0 | 6 | 6 | 4 | 11 | 11 | 2 | 11 | 10 | 8 | 1 | 4 | 13 | 11 | 2 | 14 | 12 | 2 | 9 | 9 | 6 | 12 | 2 | 14 | 14 | 7 | 8 | 10 | 2 | 14 | 1 | 12 | 4 | 4 | 8 | 6 | 10 | 15 | 2 | 15 | 12 | 15 | 13 | 0 | 12 | 1 | 10 | 0 | 6 | 12 | 1 | 12 | 13 | 15 | 12 | 1 | 7 | 9 | 4 | 7 | 14 | 15 | 4 | 3 | 3 | 11 | 10 | 9 | 0 | 11 | 5 | 12 | 10 | 11 | 6 | 5 | 15 | 10 | 15 | 0 | 2 | 11 | 14 | 6 | 6 | 7 | 8 | 1 | 15 | 2 | 6 | 6 | 13 | 9 | 1 | 13 | 5 | 7 | 2 | 9 | 2 | 15 | 0 | 9 | 6 | 2 | 3 | 13 | 12 | 14 | 1 | 8 | 8 | 6 | 9 | 7 | 5 | 9 | 9 | 2 | 10 | 12 | 11 | 2 | 14 | 0 | 11 | 11 | 2 | 6 | 14 | 1 | 4 | 6 | 15 | 3 | 15 | 5 | 9 | 3 | 4 | 7 | 3 | 11 | 13 | 0 | 10 | 2 | 3 | 5 | 9 | 4 | 7 | 4 | 5 | 13 | 5 | 2 | 14 | 12 | 11 | 2 | 10 | 11 | 5 | 6 | 3 | 4 | 6 | 13 | 5 | 6 | 6 | 5 | 6 | 5 | 8 | 10 | 2 | 9 | 3 | 3 | 6 | 9 | 11 | 7 | 3 | 3 | 9 | 0 | 11 | 6 | 0 | 2 | 13 | 9 | 8 | 9 | 1 | 7 | 12 | 4 | 13 | 11 | 3 | 5 | 10 | 15 | 15 | 6 | 14 | 12 | 14 | 2 | 13 | 14 | 11 | 1 | 4 | 9 | 6 | 13 | 6 | 2 | 4 | 7 | 8 | 2 | 11 | 13 | 3 | 2 | 4 | 8 | 0 | 5 | 14 | 8 | 8 | 5 | 7 | 4 | 14 | 6 | 8 | 13 | 2 | 14 | 3 | 7 | 4 | 5 | 3 | 15 | 5 | 1 | 11 | 5 | 14 | 12 | 3 | 2 | 2 | 3 | 1 | 11 | 9 | 8 | 12 | 10 | 0 | 10 | 7 | 15 | 15 | 11 | 8 | 13 | 2 | 0 | 7 | 9 | 4 | 9 | 12 | 0 | 3 | 0 | 2 | 10 | 3 | 13 | 9 | 2 | 4 | 2 | 14 | 11 | 9 | 12 | 9 | 11 | 10 | 1 | 14 | 0 | 11 | 14 | 15 | 15 | 12 | 2 | 15 | 2 | 6 | 4 | 8 | 3 | 11 | 14 | 4 | 8 | 10 | 10 | 1 | 1 | 6 | 13 | 10 | 7 | 12 | 12 | 12 | 8 | 11 | 13 | 4 | 4 | 14 | 7 | 11 | 7 | 1 | 13 | 5 | 12 | 10 | 7 | 12 | 5 | 0 | 8 | 12 | 15 | 8 | 14 | 15 | 8 | 10 | 2 | 0 | 6 | 9 | 13 | 2 | 6 | 5 | 12 | 0 | 13 | 12 | 7 | 12 | 6 | 3 | 12 | 8 | 7 | 12 | 2 | 3 | 10 | 11 | 15 | 2 | 10 | 2 | 14 | 4 | 13 | 11 | 11 | 15 | 12 | 1 | 0 | 8 | 13 | 9 | 3 | 2 | 12 | 1 | 13 | 3 | 0 | 4 | 5 | 9 | 14 | 2 | 3 | 10 | 13 | 6 | 11 | 6 | 4 | 3 | 9 | 13 | 0 | 14 | 5 | 13 | 3 | 10 | 4 | 8 | 14 | 7 | 15 | 5 | 7 | 2 | 7 | 0 | 2 | 13 | 5 | 13 | 5 | 3 | 15 | 11 | 13 | 8 | 3 | 5 | 7 | 15 | 3 | 5 | 10 | 7 | 0 | 0 | 1 | 4 | 8 | 3 | 9 | 12 | 2 | 11 | 3 | 3 | 10 | 11 | 11 | 4 | 13 | 11 | 5 | 0 | 4 | 15 | 4 | 4 | 9 | 4 | 11 | 1 | 7 | 14 | 6 | 3 | 1 | 7 | 14 | 4 | 3 | 15 | 11 | 6 | 0 | 11 | 10 | 2 | 11 | 14 | 10 | 14 | 6 | 8 | 1 | 14 | 1 | 9 | 13 | 8 | 7 | 8 | 7 | 5 | 2 | 14 | 6 | 9 | 9 | 0 | 7 | 13 | 1 | 2 | 12 | 10 | 10 | 10 | 6 | 13 | 1 | 9 | 2 | 11 | 1 | 3 | 1 | 15 | 6 | 6 | 3 | 7 | 3 | 11 | 8 | 2 | 5 | 6 | 3 | 13 | 7 | 5 | 11 | 12 | 1 | 9 | 8 | 0 | 9 | 15 | 5 | 1 | 9 | 5 | 6 | 5 | 0 | 6 | 10 | 8 | 5 | 7 | 4 | 15 | 5 | 11 | 15 | 12 | 3 | 3 | 2 | 10 | 14 | 7 | 4 | 7 | 5 | 8 | 0 | 5 | 1 | 13 | 15 | 10 | 7 | 2 | 0 | 5 | 14 | 6 | 10 | 0 | 15 | 7 | 6 | 7 | 10 | 5 | 11 | 11 | 2 | 10 | 6 | 4 | 14 | 11 | 11 | 0 | 15 | 4 | 10 | 7 | 1 | 13 | 15 | 15 | 14 | 7 | 5 | 10 | 11 | 15 | 9 | 12 | 13 | 2 | 8 | 11 | 11 | 5 | 9 | 5 | 6 | 0 | 4 | 10 | 7 | 4 | 13 | 12 | 14 | 10 | 3 | 0 | 15 | 8 | 9 | 0 | 1 | 6 | 15 | 8 | 11 | 13 | 13 | 7 | 3 | 0 | 7 | 14 | 2 | 2 | 7 | 15 | 9 | 4 | 1 | 6 | 5 | 13 | 14 | 11 | 9 | 8 | 2 | 11 | 1 | 6 | 7 | 1 | 13 | 5 | 7 | 6 | 8 | 12 | 15 | 10 | 6 | 8 | 1 | 5 | 0 | 1 | 2 | 13 | 4 | 0 | 0 | 12 | 10 | 13 | 6 | 10 | 0 | 6 | 3 | 12 | 7 | 15 | 10 | 3 | 10 | 10 | 8 | 6 | 7 | 3 | 0 | 3 | 11 | 3 | 1 | 7 | 2 | 3 | 13 | 7 | 14 | 2 | 6 | 12 | 1 | 7 | 15 | 8 | 13 | 7 | 8 | 10 | 9 | 15 | 4 | 2 | 6 | 8 | 6 | 8 | 0 | 8 | 12 | 8 | 7 | 9 | 9 | 13 | 3 | 6 | 9 | 14 | 4 | 15 | 12 | 5 | 3 | 15 | 5 | 9 | 5 | 0 | 13 | 4 | 12 | 3 | 6 | 4 | 9 | 9 | 14 | 15 | 7 | 4 | 12 | 1 | 7 | 7 | 12 | 13 | 6 | 2 | 12 | 14 | 8 | 8 | 12 | 7 | 6 | 4 | 2 | 15 | 9 | 8 | 10 | 10 | 12 | 12 | 0 | 2 | 7 | 9 | 3 | 9 | 15 | 8 | 0 | 11 | 5 | 6 | 7 | 9 | 0 | 13 | 13 | 12 | 13 | 14 | 13 | 13 | 9 | 13 | 6 | 9 | 7 | 8 | 2 | 4 | 3 | 1 | 7 | 4 | 8 | 5 | 1 | 3 | 9 | 14 | 3 | 15 | 6 | 1 | 1 | 13 | 15 | 2 | 12 | 12 | 6 | 12 | 6 | 0 | 7 | 15 | 15 | 3 | 7 | 8 | 1 | 13 | 12 | 4 | 9 | 8 | 15 | 15 | 6 | 6 | 1 | 8 | 14 | 2 | 5 | 15 | 9 | 6 | 2 | 3 | 14 | 10 | 15 | 1 | 10 | 10 | 0 | 9 | 9 | 0 | 10 | 15 | 13 | 4 | 9 | 12 | 1 | 0 | 15 | 11 | 5 | 1 | 13 | 4 | 5 | 10 | 14 | 1 | 2 | 6 | 8 | 11 | 13 | 3 | 11 | 8 | 15 | 5 | 8 | 7 | 11 | 12 | 7 | 1 | 2 | 0 | 15 | 8 | 2 | 12 | 14 | 13 | 7 | 0 | 0 | 11 | 11 | 11 | 9 | 4 | 14 | 11 | 10 | 9 | 5 | 8 | 7 | 8 | 11 | 12 | 9 | 4 | 13 | 12 | 15 | 8 | 3 | 12 | 5 | 10 | 5 | 7 | 14 | 4 | 3 | 10 | 13 | 11 | 10 | 0 | 7 | 10 | 2 | 6 | 4 | 4 | 2 | 15 | 3 | 1 | 10 | 10 | 9 | 5 | 5 | 3 | 0 | 14 | 14 | 6 | 2 | 9 | 12 | 6 | 0 | 9 | 10 | 9 | 2 | 5 | 6 | 0 | 7 | 1 | 9 | 3 | 7 | 13 | 8 | 0 | 15 | 7 | 11 | 12 | 4 | 1 | 0 | 0 | 8 | 2 | 12 | 0 | 1 | 9 | 13 | 7 | 6 | 13 | 14 | 15 | 12 | 0 | 12 | 15 | 3 | 0 | 10 | 10 | 9 | 8 | 4 | 5 | 9 | 4 | 2 | 5 | 3 | 4 | 8 | 9 | 7 | 12 | 7 | 3 | 8 | 10 | 11 | 6 | 12 | 3 | 14 | 4 | 9 | 5 | 12 | 7 | 3 | 9 | 13 | 0 | 3 | 3 | 8 | 3 | 4 | 13 | 5 | 12 | 1 | 2 | 8 | 10 | 14 | 15 | 6 | 11 | 5 | 14 | 11 | 5 | 3 | 13 | 0 | 11 | 9 | 0 | 5 | 10 | 9 | 11 | 9 | 12 | 2 | 14 | 9 | 3 | 3 | 0 | 10 | 12 | 0 | 11 | 5 | 11 | 3 | 7 | 6 | 5 | 12 | 7 | 2 | 5 | 3 | 5 | 5 | 1 | 15 | 9 | 13 | 10 | 5 | 3 | 9 | 2 | 1 | 13 | 8 | 5 | 6 | 12 | 2 | 2 | 14 | 12 | 15 | 6 | 0 | 4 | 10 | 12 | 7 | 7 | 9 | 7 | 10 | 6 | 8 | 12 | 8 | 14 | 13 | 7 | 11 | 13 | 0 | 12 | 4 | 5 | 9 | 10 | 10 | 3 | 8 | 11 | 3 | 4 | 0 | 2 | 4 | 3 | 11 | 14 | 9 | 4 | 6 | 9 | 5 | 2 | 3 | 12 | 14 | 8 | 11 | 2 | 12 | 9 | 8 | 3 | 12 | 14 | 8 | 8 | 11 | 0 | 1 | 13 | 11 | 4 | 7 | 6 | 5 | 1 | 9 | 9 | 0 | 9 | 5 | 9 | 9 | 15 | 13 | 12 | 15 | 8 | 0 | 1 | 14 | 13 | 4 | 0 | 12 | 10 | 6 | 2 | 9 | 11 | 8 | 9 | 6 | 2 | 14 | 12 | 7 | 15 | 7 | 4 | 7 | 13 | 12 | 12 | 2 | 7 | 10 | 7 | 15 | 11 | 11 | 15 | 14 | 10 | 4 | 4 | 11 | 14 | 12 | 5 | 1 | 10 | 10 | 12 | 15 | 1 | 1 | 13 | 7 | 0 | 14 | 11 | 1 | 5 | 3 | 4 | 12 | 12 | 0 | 12 | 7 | 11 | 11 | 1 | 15 | 5 | 9 | 11 | 14 | 6 | 4 | 5 | 13 | 15 | 5 | 8 | 10 | 12 | 15 | 11 | 4 | 14 | 3 | 8 | 11 | 3 | 13 | 2 | 7 | 9 | 15 | 4 | 9 | 9 | 13 | 3 | 10 | 3 | 14 | 8 | 2 | 10 | 9 | 9 | 12 | 6 | 3 | 5 | 9 | 7 | 4 | 0 | 8 | 10 | 3 | 7 | 15 | 12 | 3 | 15 | 3 | 6 | 5 | 8 | 10 | 0 | 11 | 2 | 3 | 15 | 5 | 1 | 0 | 6 | 6 | 2 | 11 | 8 | 1 | 3 | 11 | 1 | 15 | 3 | 11 | 3 | 8 | 5 | 8 | 12 | 2 | 7 | 1 | 8 | 13 | 12 | 8 | 4 | 2 | 12 | 3 | 8 | 8 | 5 | 11 | 15 | 2 | 11 | 3 | 0 | 10 | 5 | 2 | 6 | 9 | 15 | 10 | 0 | 0 | 13 | 1 | 15 | 12 | 9 | 2 | 0 | 0 | 6 | 2 | 5 | 12 | 6 | 15 | 6 | 8 | 15 | 8 | 1 | 7 | 13 | 15 | 11 | 3 | 10 | 10 | 2 | 13 | 15 | 3 | 8 | 11 | 6 | 6 | 14 | 6 | 12 | 14 | 7 | 6 | 0 | 12 | 8 | 5 | 2 | 0 | 0 | 13 | 7 | 7 | 4 | 6 | 5 | 8 | 14 | 8 | 2 | 3 | 0 | 1 | 15 | 9 | 5 | 1 | 0 | 11 | 15 | 12 | 15 | 0 | 0 | 1 | 14 | 8 | 6 | 14 | 4 | 14 | 8 | 14 | 4 | 3 | 8 | 6 | 8 | 14 | 4 | 4 | 11 | 14 | 4 | 7 | 4 | 0 | 4 | 13 | 9 | 1 | 7 | 8 | 1 | 15 | 13 | 4 | 6 | 8 | 12 | 3 | 15 | 2 | 3 | 4 | 13 | 15 | 14 | 10 | 4 | 9 | 12 | 6 | 8 | 1 | 2 | 0 | 15 | 0 | 1 | 5 | 5 | 13 | 10 | 3 | 6 | 2 | 6 | 4 | 11 | 8 | 4 | 2 | 5 | 7 | 2 | 14 | 1 | 9 | 5 | 13 | 1 | 0 | 4 | 8 | 1 | 4 | 6 | 11 | 2 | 5 | 5 | 9 | 0 | 3 | 14 | 5 | 4 | 15 | 1 | 13 | 11 | 7 | 2 | 12 | 5 | 10 | 2 | 10 | 1 | 6 | 2 | 0 | 5 | 5 | 10 | 12 | 8 | 3 | 3 | 9 | 7 | 8 | 10 | 7 | 11 | 13 | 7 | 3 | 15 | 7 | 9 | 9 | 15 | 12 | 6 | 0 | 10 | 12 | 10 | 4 | 1 | 14 | 2 | 6 | 6 | 1 | 5 | 8 | 8 | 3 | 3 | 5 | 9 | 15 | 12 | 10 | 7 | 3 | 2 | 4 | 12 | 9 | 11 | 2 | 13 | 3 | 6 | 0 | 13 | 3 | 5 | 7 | 2 | 14 | 12 | 13 | 14 | 15 | 0 | 1 | 15 | 2 | 10 | 3 | 9 | 15 | 2 | 12 | 13 | 15 | 12 | 12 | 0 | 10 | 12 | 11 | 4 | 4 | 15 | 4 | 14 | 3 | 12 | 1 | 10 | 10 | 2 | 3 | 5 | 9 | 3 | 14 | 5 | 4 | 8 | 8 | 6 | 0 | 5 | 11 | 0 | 10 | 12 | 4 | 15 | 12 | 0 | 15 | 8 | 1 | 15 | 13 | 6 | 9 | 8 | 4 | 6 | 9 | 2 | 5 | 12 | 13 | 6 | 4 | 6 | 9 | 13 | 4 | 13 | 14 | 5 | 2 | 8 | 11 | 0 | 7 | 10 | 5 | 6 | 1 | 11 | 8 | 12 | 9 | 4 | 0 | 14 | 8 | 1 | 3 | 7 | 3 | 2 | 7 | 4 | 1 | 8 | 10 | 0 | 8 | 2 | 6 | 9 | 2 | 5 | 2 | 2 | 14 | 4 | 12 | 10 | 8 | 11 | 15 | 4 | 3 | 2 | 13 | 13 | 4 | 10 | 14 | 8 | 3 | 3 | 1 | 15 | 7 | 1 | 6 | 6 | 15 | 12 | 8 | 5 | 11 | 8 | 6 | 1 | 12 | 8 | 15 | 14 | 7 | 10 | 1 | 1 | 11 | 0 | 2 | 10 | 13 | 13 | 2 | 12 | 4 | 5 | 4 | 10 | 5 | 12 | 11 | 9 | 7 | 13 | 4 | 13 | 7 | 15 | 2 | 6 | 11 | 12 | 3 | 4 | 1 | 1 | 1 | 15 | 5 | 9 | 2 | 12 | 11 | 15 | 9 | 11 | 8 | 0 | 2 | 2 | 0 | 3 | 2 | 1 | 4 | 4 | 6 | 8 | 5 | 7 | 0 | 0 | 5 | 1 | 8 | 3 | 3 | 13 | 12 | 15 | 9 | 12 | 4 | 10 | 10 | 5 | 0 | 15 | 14 | 8 | 5 | 13 | 4 | 1 | 15 | 10 | 10 | 8 | 1 | 6 | 12 | 1 | 10 | 6 | 13 | 11 | 4 | 14 | 10 | 4 | 8 | 11 | 12 | 3 | 9 | 8 | 10 | 7 | 12 | 11 | 3 | 6 | 11 | 7 | 11 | 0 | 6 | 14 | 4 | 9 | 0 | 5 | 13 | 1 | 15 | 10 | 15 | 1 | 9 | 0 | 3 | 0 | 3 | 13 | 2 | 13 | 3 | 1 | 14 | 13 | 13 | 0 | 1 | 2 | 0 | 7 | 0 | 5 | 4 | 5 | 1 | 9 | 14 | 1 | 6 | 3 | 8 | 3 | 6 | 5 | 5 | 13 | 2 | 5 | 9 | 10 | 3 | 15 | 15 | 2 | 10 | 9 | 0 | 1 | 7 | 11 | 11 | 10 | 12 | 0 | 14 | 6 | 3 | 13 | 13 | 14 | 3 | 8 | 1 | 10 | 6 | 11 | 12 | 11 | 8 | 0 | 8 | 10 | 13 | 4 | 8 | 15 | 2 | 11 | 15 | 6 | 0 | 0 | 9 | 10 | 7 | 13 | 1 | 14 | 10 | 0 | 15 | 13 | 2 | 1 | 11 | 11 | 12 | 10 | 3 | 5 | 14 | 0 | 15 | 3 | 4 | 6 | 14 | 2 | 0 | 13 | 8 | 14 | 10 | 1 | 1 | 5 | 5 | 10 | 2 | 0 | 10 | 13 | 10 | 0 | 3 | 12 | 3 | 6 | 14 | 10 | 6 | 8 | 5 | 7 | 0 | 6 | 7 | 1 | 15 | 14 | 15 | 4 | 15 | 0 | 9 | 0 | 9 | 3 | 8 | 4 | 11 | 0 | 12 | 3 | 1 | 11 | 10 | 1 | 11 | 7 | 12 | 6 | 6 | 8 | 15 | 7 | 3 | 4 | 8 | 13 | 14 | 9 | 3 | 3 | 8 | 1 | 14 | 0 | 6 | 9 | 9 | 12 | 13 | 3 | 3 | 4 | 12 | 10 | 13 | 3 | 1 | 9 | 1 | 5 | 9 | 4 | 9 | 3 | 2 | 5 | 15 | 2 | 5 | 11 | 3 | 6 | 13 | 7 | 6 | 8 | 8 | 14 | 0 | 9 | 15 | 3 | 13 | 12 | 9 | 5 | 15 | 4 | 1 | 1 | 14 | 5 | 12 | 9 | 9 | 14 | 7 | 3 | 7 | 6 | 8 | 6 | 14 | 8 | 4 | 6 | 5 | 15 | 11 | 9 | 0 | 9 | 3 | 15 | 0 | 0 | 11 | 5 | 15 | 8 | 8 | 0 | 9 | 15 | 6 | 2 | 0 | 12 | 0 | 2 | 0 | 2 | 9 | 10 | 12 | 11 | 6 | 10 | 2 | 10 | 8 | 14 | 7 | 12 | 5 | 3 | 7 | 13 | 3 | 13 | 2 | 6 | 3 | 2 | 7 | 10 | 7 | 3 | 9 | 12 | 8 | 4 | 11 | 6 | 15 | 4 | 4 | 9 | 15 | 15 | 9 | 0 | 8 | 14 | 4 | 7 | 5 | 11 | 6 | 0 | 11 | 8 | 8 | 9 | 13 | 11 | 4 | 14 | 2 | 15 | 12 | 5 | 9 | 14 | 12 | 8 | 12 | 1 | 8 | 11 | 9 | 7 | 6 | 8 | 13 | 7 | 4 | 12 | 1 | 15 | 0 | 3 | 2 | 0 | 7 | 10 | 10 | 5 | 5 | 8 | 11 | 6 | 5 | 3 | 5 | 4 | 0 | 4 | 14 | 9 | 4 | 14 | 14 | 13 | 1 | 14 | 7 | 8 | 8 | 6 | 12 | 6 | 1 | 7 | 0 | 3 | 8 | 0 | 12 | 11 | 12 | 2 | 10 | 9 | 1 | 11 | 0 | 10 | 10 | 13 | 9 | 6 | 2 | 8 | 2 | 12 | 12 | 4 | 12 | 12 | 1 | 2 | 3 | 0 | 3 | 11 | 9 | 15 | 9 | 4 | 3 | 4 | 12 | 3 | 11 | 13 | 2 | 15 | 3 | 1 | 4 | 3 | 5 | 7 | 6 | 10 | 0 | 12 | 4 | 5 | 8 | 0 | 10 | 10 | 5 | 13 | 13 | 12 | 14 | 8 | 3 | 3 | 14 | 5 | 14 | 8 | 13 | 11 | 10 | 1 | 13 | 10 | 6 | 11 | 13 | 1 | 9 | 4 | 9 | 11 | 3 | 9 | 2 | 15 | 12 | 4 | 9 | 7 | 15 | 0 | 12 | 14 | 4 | 15 | 11 | 2 | 3 | 0 | 8 | 2 | 8 | 10 | 11 | 10 | 6 | 10 | 12 | 1 | 3 | 13 | 14 | 14 | 13 | 1 | 1 | 3 | 1 | 15 | 13 | 13 | 13 | 9 | 11 | 9 | 12 | 9 | 6 | 14 | 15 | 10 | 12 | 15 | 11 | 10 | 8 | 5 | 13 | 2 | 13 | 10 | 10 | 4 | 10 | 11 | 5 | 6 | 14 | 7 | 2 | 7 | 0 | 3 | 1 | 8 | 15 | 4 | 9 | 12 | 11 | 11 | 13 | 3 | 5 | 7 | 6 | 12 | 14 | 7 | 1 | 1 | 14 | 5 | 7 | 1 | 9 | 9 | 12 | 13 | 7 | 0 | 7 | 7 | 0 | 3 | 11 | 8 | 0 | 3 | 10 | 3 | 15 | 10 | 3 | 7 | 1 | 9 | 2 | 9 | 14 | 4 | 12 | 9 | 13 | 13 | 5 | 15 | 3 | 5 | 4 | 2 | 13 | 1 | 6 | 12 | 5 | 3 | 9 | 2 | 1 | 0 | 3 | 10 | 2 | 7 | 2 | 11 | 11 | 14 | 2 | 3 | 7 | 7 | 4 | 5 | 8 | 2 | 4 | 13 | 9 | 2 | 6 | 11 | 14 | 8 | 3 | 0 | 12 | 11 | 6 | 1 | 2 | 9 | 6 | 0 | 2 | 4 | 0 | 5 | 5 | 15 | 5 | 6 | 2 | 11 | 6 | 1 | 14 | 8 | 14 | 7 | 12 | 5 | 8 | 2 | 14 | 8 | 10 | 15 | 6 | 6 | 5 | 4 | 8 | 2 | 13 | 14 | 12 | 0 | 8 | 9 | 11 | 7 | 11 | 6 | 9 | 1 | 4 | 13 | 6 | 6 | 3 | 14 | 13 | 8 | 2 | 3 | 11 | 11 | 8 | 14 | 13 | 9 | 6 | 4 | 13 | 6 | 11 | 14 | 2 | 13 | 2 | 11 | 4 | 10 | 15 | 6 | 10 | 0 | 1 | 5 | 3 | 0 | 6 | 8 | 13 | 11 | 12 | 4 | 11 | 5 | 12 | 12 | 1 | 2 | 15 | 11 | 4 | 13 | 4 | 6 | 0 | 14 | 8 | 1 | 11 | 3 | 11 | 2 | 9 | 8 | 14 | 7 | 5 | 7 | 7 | 9 | 13 | 12 | 15 | 8 | 11 | 14 | 10 | 12 | 0 | 9 | 3 | 5 | 1 | 12 | 1 | 5 | 12 | 13 | 3 | 2 | 12 | 13 | 8 | 14 | 8 | 12 | 2 | 3 | 3 | 6 | 9 | 12 | 7 | 11 | 10 | 8 | 5 | 2 | 7 | 0 | 3 | 5 | 8 | 3 | 6 | 2 | 3 | 15 | 1 | 1 | 4 | 6 | 8 | 9 | 6 | 13 | 5 | 8 | 8 | 6 | 9 | 12 | 3 | 13 | 13 | 11 | 1 | 4 | 12 | 7 | 8 | 12 | 3 | 7 | 6 | 15 | 12 | 9 | 13 | 8 | 11 | 12 | 6 | 3 | 9 | 12 | 5 | 15 | 4 | 14 | 11 | 2 | 0 | 7 | 4 | 1 | 1 | 8 | 10 | 10 | 15 | 8 | 9 | 4 | 7 | 12 | 1 | 1 | 14 | 3 | 10 | 2 | 10 | 8 | 11 | 5 | 14 | 3 | 13 | 2 | 4 | 11 | 3 | 14 | 7 | 9 | 4 | 3 | 9 | 15 | 6 | 1 | 7 | 5 | 10 | 8 | 15 | 3 | 0 | 4 | 8 | 13 | 14 | 8 | 15 | 14 | 3 | 1 | 2 | 11 | 1 | 12 | 13 | 9 | 6 | 8 | 15 | 1 | 1 | 10 | 7 | 3 | 2 | 6 | 3 | 9 | 14 | 12 | 7 | 1 | 1 | 12 | 7 | 0 | 7 | 9 | 14 | 8 | 10 | 3 | 12 | 1 | 6 | 2 | 15 | 10 | 15 | 8 | 2 | 3 | 11 | 10 | 4 | 10 | 14 | 8 | 4 | 0 | 11 | 9 | 3 | 0 | 7 | 15 | 7 | 3 | 7 | 14 | 7 | 15 | 1 | 15 | 13 | 2 | 3 | 0 | 0 | 9 | 1 | 2 | 7 | 10 | 2 | 3 | 13 | 5 | 0 | 7 | 12 | 13 | 8 | 8 | 15 | 1 | 4 | 1 | 1 | 10 | 11 | 10 | 6 | 8 | 2 | 8 | 8 | 5 | 2 | 12 | 13 | 5 | 3 | 6 | 13 | 7 | 15 | 15 | 1 | 15 | 2 | 0 | 8 | 10 | 10 | 9 | 12 | 15 | 1 | 7 | 12 | 12 | 7 | 12 | 11 | 5 | 6 | 7 | 14 | 7 | 0 | 13 | 7 | 15 | 5 | 10 | 1 | 14 | 9 | 9 | 2 | 15 | 1 | 10 | 15 | 1 | 12 | 14 | 3 | 0 | 9 | 0 | 14 | 2 | 6 | 12 | 15 | 12 | 7 | 15 | 11 | 12 | 1 | 2 | 0 | 8 | 5 | 3 | 2 | 7 | 11 | 13 | 15 | 11 | 10 | 4 | 14 | 1 | 9 | 0 | 3 | 1 | 6 | 0 | 9 | 0 | 3 | 11 | 4 | 7 | 1 | 1 | 11 | 1 | 11 | 3 | 14 | 7 | 12 | 5 | 14 | 9 | 5 | 1 | 15 | 4 | 12 | 8 | 10 | 7 | 10 | 11 | 5 | 8 | 6 | 2 | 6 | 13 | 15 | 9 | 5 | 7 | 1 | 6 | 12 | 1 | 5 | 0 | 8 | 10 | 7 | 14 | 4 | 12 | 4 | 14 | 3 | 12 | 12 | 6 | 6 | 11 | 13 | 0 | 15 | 0 | 7 | 2 | 12 | 5 | 5 | 1 | 13 | 9 | 3 | 5 | 11 | 2 | 8 | 13 | 9 | 5 | 11 | 2 | 7 | 3 | 0 | 11 | 14 | 10 | 3 | 1 | 11 | 14 | 1 | 2 | 10 | 9 | 4 | 5 | 11 | 7 | 3 | 10 | 2 | 8 | 12 | 7 | 9 | 0 | 4 | 10 | 11 | 1 | 9 | 4 | 0 | 5 | 13 | 1 | 2 | 9 | 3 | 7 | 14 | 8 | 12 | 9 | 2 | 5 | 8 | 0 | 14 | 9 | 14 | 14 | 3 | 1 | 12 | 12 | 8 | 7 | 5 | 15 | 8 | 10 | 15 | 4 | 4 | 3 | 15 | 7 | 5 | 3 | 13 | 13 | 10 | 7 | 11 | 0 | 8 | 4 | 8 | 8 | 4 | 8 | 8 | 3 | 14 | 9 | 2 | 9 | 13 | 11 | 14 | 7 | 15 | 5 | 15 | 8 | 2 | 4 | 1 | 12 | 4 | 14 | 11 | 12 | 9 | 7 | 11 | 3 | 9 | 15 | 1 | 10 | 9 | 12 | 11 | 13 | 11 | 15 | 5 | 0 | 12 | 10 | 0 | 5 | 2 | 14 | 11 | 5 | 3 | 12 | 12 | 1 | 8 | 6 | 4 | 14 | 14 | 3 | 10 | 6 | 2 | 13 | 15 | 3 | 11 | 2 | 10 | 3 | 9 | 6 | 0 | 10 | 8 | 5 | 2 | 12 | 13 | 0 | 5 | 11 | 5 | 1 | 3 | 14 | 8 | 12 | 2 | 4 | 1 | 8 | 11 | 12 | 14 | 8 | 14 | 15 | 3 | 8 | 2 | 14 | 0 | 0 | 14 | 5 | 6 | 0 | 7 | 1 | 14 | 13 | 6 | 15 | 1 | 13 | 1 | 6 | 7 | 3 | 14 | 7 | 7 | 8 | 14 | 6 | 8 | 5 | 10 | 13 | 11 | 5 | 12 | 4 | 1 | 3 | 9 | 1 | 4 | 12 | 15 | 12 | 15 | 2 | 11 | 7 | 1 | 1 | 1 | 0 | 6 | 15 | 9 | 9 | 7 | 1 | 14 | 1 | 10 | 0 | 4 | 13 | 0 | 8 | 10 | 2 | 2 | 10 | 6 | 12 | 2 | 15 | 11 | 8 | 10 | 5 | 7 | 8 | 1 | 6 | 15 | 15 | 0 | 3 | 1 | 3 | 10 | 13 | 0 | 12 | 12 | 5 | 10 | 11 | 6 | 12 | 0 | 11 | 12 | 10 | 3 | 1 | 3 | 5 | 4 | 2 | 0 | 7 | 2 | 9 | 2 | 8 | 11 | 2 | 14 | 8 | 11 | 12 | 13 | 0 | 10 | 12 | 15 | 7 | 7 | 11 | 6 | 12 | 9 | 4 | 12 | 10 | 9 | 12 | 11 | 13 | 1 | 12 | 6 | 15 | 2 | 9 | 12 | 6 | 7 | 0 | 15 | 12 | 2 | 0 | 10 | 11 | 7 | 0 | 3 | 8 | 15 | 11 | 6 | 12 | 1 | 5 | 4 | 11 | 3 | 7 | 7 | 7 | 5 | 10 | 1 | 3 | 0 | 13 | 6 | 7 | 4 | 11 | 2 | 14 | 11 | 11 | 4 | 6 | 0 | 11 | 10 | 0 | 6 | 11 | 4 | 3 | 8 | 8 | 12 | 15 | 13 | 3 | 12 | 10 | 13 | 6 | 1 | 9 | 5 | 4 | 13 | 1 | 13 | 7 | 14 | 10 | 6 | 13 | 8 | 6 | 11 | 0 | 13 | 14 | 3 | 7 | 12 | 15 | 7 | 6 | 9 | 8 | 6 | 4 | 1 | 1 | 0 | 13 | 13 | 10 | 4 | 10 | 1 | 11 | 2 | 12 | 14 | 0 | 4 | 1 | 8 | 14 | 4 | 3 | 0 | 10 | 12 | 14 | 14 | 3 | 14 | 6 | 2 | 7 | 10 | 1 | 4 | 9 | 13 | 1 | 3 | 4 | 3 | 7 | 8 | 5 | 7 | 15 | 9 | 6 | 15 | 15 | 10 | 5 | 12 | 5 | 12 | 11 | 6 | 6 | 15 | 15 | 9 | 13 | 11 | 7 | 4 | 10 | 15 | 7 | 4 | 5 | 6 | 15 | 15 | 8 | 5 | 9 | 7 | 14 | 4 | 9 | 7 | 7 | 2 | 8 | 4 | 6 | 14 | 7 | 9 | 4 | 14 | 2 | 15 | 8 | 1 | 12 | 8 | 12 | 10 | 11 | 9 | 6 | 0 | 13 | 12 | 14 | 12 | 12 | 1 | 9 | 15 | 3 | 9 | 8 | 10 | 3 | 8 | 0 | 8 | 1 | 13 | 15 | 14 | 5 | 11 | 6 | 9 | 11 | 4 | 12 | 12 | 13 | 1 | 12 | 8 | 9 | 3 | 0 | 14 | 13 | 15 | 13 | 0 | 15 | 13 | 1 | 8 | 9 | 15 | 5 | 9 | 4 | 8 | 8 | 9 | 4 | 2 | 12 | 5 | 14 | 12 | 5 | 5 | 11 | 2 | 10 | 5 | 6 | 5 | 13 | 13 | 4 | 11 | 4 | 6 | 15 | 4 | 6 | 8 | 11 | 8 | 12 | 13 | 13 | 2 | 11 | 6 | 1 | 6 | 12 | 14 | 6 | 4 | 15 | 13 | 14 | 0 | 13 | 5 | 10 | 3 | 13 | 9 | 6 | 5 | 10 | 10 | 6 | 8 | 15 | 4 | 6 | 0 | 15 | 2 | 9 | 7 | 3 | 3 | 6 | 11 | 6 | 9 | 7 | 9 | 12 | 8 | 9 | 1 | 9 | 8 | 13 | 14 | 1 | 4 | 13 | 2 | 15 | 7 | 7 | 12 | 14 | 5 | 4 | 8 | 7 | 2 | 7 | 8 | 9 | 8 | 11 | 5 | 7 | 6 | 15 | 6 | 5 | 1 | 11 | 15 | 5 | 0 | 10 | 2 | 11 | 7 | 1 | 6 | 14 | 0 | 13 | 10 | 3 | 5 | 10 | 4 | 14 | 1 | 0 | 1 | 12 | 11 | 6 | 7 | 1 | 9 | 6 | 1 | 9 | 14 | 0 | 14 | 6 | 5 | 0 | 10 | 1 | 10 | 1 | 3 | 4 | 5 | 3 | 3 | 13 | 9 | 12 | 7 | 2 | 13 | 8 | 11 | 4 | 9 | 12 | 7 | 14 | 5 | 15 | 14 | 14 | 10 | 3 | 7 | 15 | 0 | 15 | 5 | 2 | 9 | 15 | 14 | 3 | 15 | 11 | 15 | 1 | 5 | 13 | 11 | 9 | 1 | 8 | 14 | 10 | 5 | 4 | 4 | 13 | 10 | 7 | 12 | 15 | 3 | 7 | 6 | 10 | 11 | 3 | 9 | 12 | 6 | 0 | 14 | 1 | 7 | 10 | 8 | 6 | 11 | 5 | 5 | 13 | 2 | 6 | 7 | 14 | 5 | 6 | 13 | 6 | 3 | 6 | 11 | 14 | 4 | 0 | 15 | 7 | 15 | 9 | 15 | 9 | 11 | 11 | 0 | 10 | 1 | 15 | 10 | 1 | 15 | 3 | 5 | 5 | 0 | 3 | 14 | 2 | 15 | 2 | 1 | 7 | 10 | 7 | 10 | 14 | 1 | 7 | 0 | 11 | 13 | 7 | 8 | 12 | 8 | 11 | 4 | 15 | 13 | 5 | 0 | 11 | 12 | 7 | 4 | 15 | 9 | 12 | 13 | 14 | 2 | 11 | 14 | 12 | 13 | 6 | 15 | 9 | 15 | 11 | 11 | 3 | 1 | 5 | 14 | 3 | 5 | 12 | 3 | 15 | 11 | 13 | 10 | 2 | 8 | 2 | 7 | 6 | 4 | 5 | 8 | 0 | 8 | 2 | 3 | 0 | 8 | 2 | 4 | 12 | 1 | 10 | 4 | 15 | 0 | 8 | 6 | 6 | 8 | 9 | 8 | 8 | 0 | 0 | 15 | 2 | 8 | 11 | 11 | 5 | 11 | 10 | 4 | 1 | 12 | 4 | 9 | 3 | 10 | 12 | 11 | 7 | 1 | 14 | 9 | 9 | 15 | 5 | 6 | 15 | 1 | 15 | 0 | 1 | 3 | 3 | 12 | 7 | 9 | 4 | 13 | 10 | 13 | 0 | 12 | 4 | 3 | 3 | 11 | 5 | 0 | 5 | 9 | 15 | 15 | 10 | 6 | 12 | 14 | 10 | 7 | 8 | 4 | 1 | 9 | 4 | 1 | 13 | 6 | 9 | 12 | 12 | 1 | 9 | 9 | 2 | 1 | 14 | 4 | 12 | 1 | 12 | 0 | 12 | 0 | 2 | 0 | 5 | 8 | 0 | 14 | 0 | 7 | 1 | 4 | 5 | 2 | 8 | 15 | 8 | 13 | 14 | 11 | 1 | 11 | 0 | 1 | 7 | 9 | 10 | 6 | 9 | 14 | 12 | 4 | 10 | 9 | 6 | 2 | 2 | 5 | 3 | 13 | 7 | 0 | 15 | 8 | 9 | 3 | 6 | 13 | 8 | 13 | 12 | 4 | 12 | 6 | 9 | 15 | 4 | 2 | 14 | 6 | 14 | 11 | 3 | 9 | 7 | 0 | 10 | 6 | 6 | 12 | 11 | 12 | 6 | 9 | 14 | 3 | 7 | 5 | 13 | 13 | 9 | 10 | 9 | 15 | 4 | 12 | 0 | 4 | 12 | 6 | 6 | 9 | 4 | 0 | 0 | 4 | 10 | 10 | 10 | 7 | 9 | 3 | 13 | 9 | 11 | 4 | 8 | 8 | 0 | 8 | 15 | 1 | 7 | 2 | 11 | 8 | 2 | 2 | 5 | 3 | 14 | 0 | 8 | 14 | 5 | 14 | 14 | 9 | 11 | 1 | 6 | 15 | 4 | 4 | 14 | 13 | 10 | 0 | 7 | 12 | 12 | 8 | 6 | 15 | 1 | 15 | 5 | 1 | 13 | 12 | 10 | 10 | 4 | 10 | 9 | 11 | 5 | 12 | 13 | 3 | 7 | 13 | 7 | 4 | 6 | 11 | 14 | 8 | 12 | 2 | 10 | 0 | 15 | 5 | 2 | 11 | 10 | 1 | 1 | 6 | 12 | 2 | 7 | 0 | 10 | 10 | 1 | 6 | 7 | 10 | 6 | 0 | 13 | 8 | 6 | 3 | 4 | 7 | 12 | 9 | 15 | 5 | 11 | 4 | 0 | 6 | 7 | 11 | 9 | 12 | 1 | 5 | 11 | 13 | 14 | 11 | 2 | 11 | 4 | 13 | 7 | 2 | 8 | 15 | 0 | 11 | 0 | 0 | 12 | 1 | 12 | 12 | 1 | 8 | 1 | 13 | 13 | 4 | 7 | 14 | 11 | 6 | 13 | 2 | 10 | 2 | 11 | 1 | 1 | 6 | 7 | 0 | 7 | 8 | 14 | 11 | 7 | 14 | 15 | 7 | 2 | 12 | 5 | 12 | 7 | 4 | 11 | 14 | 5 | 10 | 8 | 15 | 2 | 8 | 6 | 6 | 1 | 8 | 10 | 12 | 12 | 9 | 9 | 2 | 0 | 6 | 1 | 4 | 14 | 11 | 8 | 15 | 14 | 15 | 4 | 4 | 1 | 4 | 8 | 4 | 6 | 13 | 6 | 3 | 12 | 3 | 0 | 15 | 5 | 9 | 3 | 0 | 11 | 5 | 9 | 1 | 14 | 3 | 9 | 7 | 8 | 9 | 3 | 11 | 2 | 6 | 10 | 6 | 6 | 9 | 5 | 15 | 13 | 12 | 13 | 9 | 2 | 14 | 7 | 11 | 11 | 1 | 7 | 15 | 15 | 5 | 3 | 8 | 3 | 7 | 9 | 10 | 14 | 14 | 13 | 0 | 14 | 10 | 0 | 7 | 4 | 0 | 2 | 0 | 4 | 2 | 0 | 13 | 15 | 5 | 4 | 12 | 10 | 11 | 11 | 2 | 0 | 0 | 10 | 10 | 7 | 15 | 6 | 4 | 7 | 13 | 9 | 7 | 13 | 1 | 5 | 12 | 2 | 9 | 11 | 10 | 7 | 15 | 3 | 4 | 11 | 10 | 5 | 8 | 2 | 11 | 11 | 14 | 0 | 6 | 5 | 1 | 5 | 12 | 2 | 7 | 15 | 3 | 5 | 2 | 5 | 9 | 14 | 14 | 1 | 13 | 8 | 5 | 7 | 14 | 13 | 8 | 3 | 7 | 0 | 14 | 6 | 0 | 4 | 15 | 3 | 1 | 14 | 6 | 13 | 14 | 14 | 15 | 2 | 3 | 7 | 6 | 9 | 14 | 13 | 12 | 4 | 7 | 10 | 2 | 14 | 12 | 4 | 2 | 7 | 7 | 13 | 11 | 11 | 5 | 15 | 6 | 11 | 2 | 3 | 5 | 0 | 11 | 12 | 1 | 7 | 12 | 13 | 5 | 5 | 11 | 3 | 10 | 15 | 14 | 0 | 12 | 1 | 6 | 7 | 0 | 15 | 9 | 1 | 12 | 0 | 0 | 6 | 3 | 14 | 9 | 5 | 15 | 14 | 11 | 13 | 5 | 5 | 13 | 7 | 3 | 14 | 13 | 1 | 5 | 4 | 10 | 3 | 5 | 6 | 6 | 13 | 11 | 10 | 2 | 6 | 4 | 3 | 2 | 13 | 7 | 10 | 5 | 13 | 8 | 5 | 5 | 15 | 15 | 8 | 6 | 6 | 0 | 10 | 5 | 1 | 2 | 15 | 12 | 5 | 15 | 8 | 1 | 13 | 15 | 3 | 14 | 5 | 7 | 4 | 7 | 5 | 5 | 14 | 15 | 3 | 8 | 14 | 5 | 15 | 13 | 10 | 4 | 11 | 3 | 15 | 0 | 5 | 11 | 1 | 2 | 13 | 0 | 2 | 2 | 4 | 5 | 13 | 1 | 3 | 5 | 13 | 4 | 14 | 4 | 11 | 4 | 13 | 6 | 13 | 2 | 6 | 15 | 7 | 5 | 1 | 11 | 13 | 2 | 0 | 15 | 0 | 15 | 9 | 4 | 8 | 11 | 2 | 7 | 3 | 11 | 6 | 8 | 10 | 9 | 15 | 5 | 9 | 2 | 8 | 8 | 1 | 10 | 10 | 2 | 6 | 6 | 14 | 5 | 0 | 11 | 3 | 4 | 9 | 12 | 2 | 6 | 2 | 2 | 4 | 2 | 13 | 12 | 6 | 15 | 6 | 4 | 7 | 0 | 3 | 1 | 6 | 5 | 2 | 4 | 0 | 15 | 2 | 7 | 7 | 12 | 10 | 5 | 10 | 8 | 13 | 4 | 5 | 0 | 15 | 1 | 7 | 13 | 7 | 13 | 13 | 13 | 9 | 1 | 15 | 5 | 11 | 14 | 9 | 5 | 7 | 11 | 4 | 7 | 1 | 4 | 14 | 15 | 1 | 2 | 5 | 1 | 14 | 5 | 13 | 15 | 6 | 9 | 14 | 0 | 7 | 8 | 7 | 7 | 15 | 1 | 14 | 13 | 4 | 4 | 1 | 1 | 7 | 6 | 13 | 11 | 10 | 0 | 10 | 14 | 13 | 15 | 12 | 7 | 10 | 13 | 15 | 1 | 13 | 10 | 8 | 3 | 10 | 1 | 0 | 9 | 4 | 1 | 8 | 13 | 6 | 3 | 13 | 7 | 3 | 9 | 1 | 15 | 11 | 12 | 5 | 4 | 9 | 6 | 10 | 9 | 4 | 11 | 13 | 5 | 8 | 13 | 3 | 4 | 14 | 12 | 7 | 7 | 12 | 7 | 6 | 2 | 10 | 14 | 9 | 12 | 7 | 11 | 7 | 1 | 6 | 13 | 11 | 8 | 0 | 1 | 12 | 13 | 15 | 13 | 5 | 9 | 14 | 12 | 13 | 4 | 6 | 2 | 2 | 5 | 7 | 3 | 4 | 11 | 3 | 9 | 10 | 4 | 4 | 0 | 10 | 12 | 14 | 4 | 6 | 8 | 8 | 4 | 12 | 6 | 5 | 9 | 15 | 0 | 0 | 15 | 14 | 9 | 14 | 4 | 3 | 10 | 15 | 7 | 13 | 9 | 8 | 8 | 14 | 14 | 5 | 11 | 10 | 4 | 4 | 5 | 12 | 7 | 8 | 8 | 12 | 2 | 0 | 5 | 4 | 4 | 15 | 0 | 11 | 15 | 12 | 13 | 5 | 1 | 1 | 3 | 5 | 15 | 15 | 2 | 6 | 0 | 0 | 0 | 5 | 10 | 3 | 5 | 11 | 9 | 7 | 12 | 2 | 6 | 15 | 8 | 13 | 10 | 14 | 2 | 12 | 5 | 14 | 0 | 13 | 15 | 9 | 14 | 15 | 6 | 0 | 0 | 15 | 2 | 7 | 2 | 8 | 8 | 0 | 4 | 12 | 3 | 6 | 1 | 15 | 2 | 9 | 14 | 9 | 5 | 15 | 5 | 0 | 15 | 0 | 5 | 0 | 10 | 14 | 4 | 5 | 13 | 2 | 11 | 7 | 3 | 2 | 15 | 1 | 14 | 7 | 9 | 6 | 14 | 10 | 0 | 10 | 6 | 2 | 11 | 14 | 0 | 4 | 9 | 3 | 2 | 15 | 2 | 0 | 4 | 0 | 10 | 3 | 2 | 11 | 0 | 10 | 10 | 12 | 15 | 1 | 3 | 6 | 3 | 2 | 14 | 3 | 3 | 4 | 7 | 14 | 14 | 13 | 1 | 0 | 15 | 7 | 12 | 2 | 9 | 0 | 4 | 0 | 7 | 15 | 4 | 3 | 7 | 4 | 7 | 0 | 11 | 14 | 15 | 4 | 7 | 0 | 7 | 9 | 12 | 8 | 3 | 4 | 12 | 12 | 7 | 10 | 8 | 8 | 12 | 12 | 9 | 6 | 11 | 8 | 5 | 6 | 11 | 9 | 2 | 14 | 3 | 13 | 2 | 6 | 2 | 8 | 9 | 14 | 5 | 4 | 12 | 12 | 15 | 5 | 4 | 15 | 1 | 12 | 0 | 5 | 0 | 9 | 15 | 11 | 2 | 4 | 7 | 8 | 14 | 5 | 1 | 6 | 12 | 13 | 7 | 11 | 15 | 4 | 7 | 6 | 9 | 13 | 11 | 11 | 4 | 14 | 13 | 10 | 6 | 8 | 11 | 12 | 10 | 15 | 10 | 10 | 1 | 1 | 15 | 4 | 2 | 15 | 9 | 5 | 13 | 8 | 15 | 2 | 6 | 13 | 4 | 6 | 14 | 14 | 6 | 4 | 10 | 14 | 13 | 14 | 11 | 11 | 0 | 4 | 10 | 1 | 7 | 15 | 14 | 0 | 15 | 2 | 13 | 9 | 14 | 10 | 13 | 10 | 1 | 4 | 0 | 4 | 5 | 13 | 1 | 9 | 7 | 12 | 8 | 9 | 4 | 4 | 11 | 10 | 14 | 1 | 13 | 7 | 10 | 3 | 15 | 7 | 12 | 15 | 2 | 9 | 9 | 7 | 8 | 12 | 14 | 0 | 3 | 11 | 0 | 2 | 7 | 12 | 0 | 11 | 2 | 4 | 8 | 10 | 8 | 0 | 5 | 4 | 13 | 9 | 8 | 6 | 10 | 9 | 9 | 11 | 15 | 5 | 1 | 13 | 10 | 1 | 3 | 8 | 15 | 9 | 5 | 10 | 14 | 7 | 4 | 5 | 9 | 15 | 14 | 11 | 11 | 0 | 6 | 11 | 3 | 6 | 1 | 4 | 0 | 0 | 4 | 8 | 1 | 4 | 5 | 0 | 1 | 3 | 4 | 9 | 9 | 4 | 1 | 14 | 12 | 3 | 14 | 8 | 1 | 0 | 10 | 2 | 12 | 3 | 12 | 2 | 8 | 13 | 0 | 5 | 12 | 5 | 13 | 6 | 14 | 4 | 5 | 6 | 3 | 1 | 12 | 6 | 7 | 8 | 15 | 7 | 4 | 10 | 1 | 5 | 13 | 13 | 8 | 14 | 3 | 12 | 6 | 13 | 14 | 1 | 1 | 7 | 8 | 7 | 9 | 15 | 12 | 12 | 14 | 10 | 12 | 9 | 11 | 6 | 2 | 9 | 0 | 0 | 12 | 8 | 9 | 10 | 1 | 4 | 15 | 11 | 5 | 13 | 10 | 12 | 8 | 10 | 8 | 6 | 13 | 10 | 4 | 10 | 6 | 8 | 2 | 8 | 1 | 0 | 4 | 7 | 8 | 8 | 2 | 13 | 8 | 9 | 1 | 7 | 4 | 15 | 10 | 7 | 15 | 15 | 13 | 3 | 9 | 9 | 6 | 5 | 15 | 3 | 9 | 6 | 5 | 11 | 12 | 6 | 4 | 15 | 11 | 9 | 10 | 8 | 0 | 12 | 5 | 3 | 3 | 13 | 13 | 12 | 14 | 8 | 10 | 2 | 0 | 9 | 13 | 1 | 14 | 15 | 9 | 11 | 3 | 5 | 14 | 10 | 5 | 15 | 4 | 14 | 6 | 15 | 7 | 0 | 4 | 15 | 14 | 4 | 13 | 10 | 6 | 13 | 7 | 5 | 11 | 8 | 7 | 7 | 0 | 13 | 0 | 0 | 6 | 10 | 14 | 6 | 5 | 7 | 9 | 15 | 9 | 12 | 7 | 3 | 10 | 3 | 9 | 8 | 13 | 8 | 15 | 11 | 8 | 7 | 7 | 8 | 11 | 13 | 0 | 9 | 13 | 10 | 7 | 3 | 3 | 9 | 7 | 9 | 15 | 1 | 0 | 8 | 3 | 15 | 0 | 2 | 11 | 4 | 11 | 5 | 5 | 14 | 14 | 1 | 7 | 6 | 10 | 11 | 1 | 14 | 11 | 11 | 4 | 12 | 10 | 2 | 8 | 1 | 1 | 4 | 11 | 15 | 2 | 6 | 11 | 6 | 4 | 14 | 0 | 4 | 5 | 8 | 0 | 12 | 8 | 0 | 5 | 1 | 12 | 12 | 6 | 4 | 15 | 1 | 0 | 8 | 10 | 12 | 2 | 1 | 11 | 8 | 2 | 3 | 10 | 3 | 4 | 0 | 0 | 8 | 8 | 15 | 8 | 6 | 2 | 11 | 6 | 11 | 14 | 6 | 12 | 13 | 5 | 13 | 13 | 0 | 15 | 1 | 4 | 6 | 15 | 5 | 13 | 2 | 13 | 13 | 4 | 11 | 10 | 9 | 1 | 0 | 0 | 2 | 3 | 15 | 10 | 9 | 14 | 7 | 9 | 5 | 1 | 10 | 5 | 10 | 5 | 8 | 12 | 11 | 14 | 0 | 14 | 10 | 2 | 8 | 11 | 14 | 2 | 7 | 5 | 11 | 13 | 2 | 3 | 10 | 12 | 7 | 8 | 3 | 9 | 8 | 8 | 14 | 3 | 6 | 2 | 4 | 10 | 13 | 12 | 5 | 14 | 7 | 9 | 11 | 6 | 10 | 2 | 10 | 14 | 3 | 13 | 10 | 14 | 3 | 2 | 12 | 11 | 3 | 7 | 12 | 15 | 7 | 10 | 3 | 15 | 15 | 7 | 9 | 8 | 1 | 7 | 1 | 8 | 7 | 6 | 12 | 9 | 9 | 2 | 6 | 5 | 13 | 10 | 9 | 0 | 2 | 0 | 2 | 12 | 4 | 11 | 5 | 13 | 1 | 13 | 10 | 1 | 13 | 11 | 5 | 4 | 14 | 4 | 6 | 5 | 9 | 8 | 3 | 11 | 2 | 3 | 8 | 11 | 14 | 0 | 0 | 8 | 14 | 10 | 7 | 5 | 14 | 9 | 15 | 14 | 5 | 10 | 11 | 3 | 6 | 7 | 3 | 7 | 6 | 13 | 15 | 10 | 3 | 12 | 4 | 6 | 10 | 12 | 3 | 1 | 12 | 5 | 9 | 13 | 0 | 12 | 0 | 14 | 1 | 8 | 7 | 15 | 5 | 5 | 6 | 0 | 0 | 2 | 11 | 14 | 15 | 6 | 11 | 10 | 6 | 4 | 11 | 10 | 5 | 13 | 5 | 1 | 1 | 6 | 0 | 12 | 10 | 11 | 13 | 8 | 8 | 4 | 2 | 0 | 11 | 0 | 10 | 14 | 7 | 14 | 2 | 14 | 10 | 12 | 15 | 14 | 12 | 5 | 6 | 7 | 14 | 6 | 10 | 12 | 2 | 6 | 15 | 3 | 13 | 1 | 2 | 2 | 11 | 13 | 5 | 8 | 12 | 15 | 15 | 12 | 14 | 9 | 15 | 0 | 6 | 2 | 11 | 11 | 10 | 4 | 10 | 1 | 11 | 13 | 6 | 9 | 9 | 0 | 3 | 10 | 6 | 0 | 2 | 11 | 15 | 10 | 7 | 2 | 3 | 14 | 10 | 1 | 9 | 7 | 10 | 11 | 8 | 1 | 9 | 6 | 14 | 0 | 0 | 14 | 11 | 10 | 5 | 10 | 7 | 9 | 2 | 5 | 15 | 15 | 15 | 8 | 7 | 6 | 11 | 11 | 9 | 4 | 7 | 9 | 15 | 15 | 1 | 1 | 3 | 11 | 3 | 3 | 8 | 5 | 0 | 11 | 1 | 0 | 6 | 4 | 5 | 7 | 6 | 0 | 0 | 13 | 0 | 7 | 10 | 0 | 7 | 5 | 7 | 1 | 10 | 7 | 9 | 7 | 4 | 0 | 5 | 11 | 8 | 8 | 9 | 14 | 1 | 5 | 6 | 14 | 8 | 14 | 13 | 0 | 13 | 7 | 4 | 2 | 2 | 8 | 14 | 9 | 3 | 12 | 3 | 5 | 11 | 12 | 14 | 0 | 10 | 15 | 3 | 7 | 4 | 2 | 2 | 13 | 12 | 12 | 7 | 14 | 14 | 2 | 8 | 12 | 4 | 8 | 14 | 14 | 11 | 14 | 13 | 2 | 10 | 1 | 3 | 11 | 13 | 15 | 11 | 13 | 12 | 12 | 4 | 0 | 3 | 4 | 10 | 8 | 1 | 11 | 0 | 11 | 5 | 3 | 10 | 13 | 4 | 1 | 5 | 7 | 14 | 10 | 1 | 4 | 0 | 10 | 12 | 11 | 2 | 9 | 2 | 14 | 15 | 7 | 2 | 7 | 4 | 5 | 8 | 6 | 2 | 9 | 11 | 7 | 13 | 6 | 14 | 8 | 9 | 8 | 3 | 12 | 2 | 15 | 12 | 5 | 2 | 8 | 13 | 12 | 0 | 5 | 8 | 1 | 3 | 12 | 8 | 6 | 7 | 7 | 4 | 7 | 7 | 7 | 7 | 12 | 1 | 2 | 4 | 13 | 6 | 8 | 5 | 6 | 8 | 10 | 11 | 15 | 6 | 1 | 13 | 13 | 11 | 14 | 13 | 1 | 9 | 8 | 13 | 15 | 6 | 14 | 4 | 15 | 9 | 0 | 12 | 6 | 7 | 10 | 2 | 2 | 15 | 15 | 15 | 2 | 0 | 0 | 3 | 5 | 0 | 9 | 9 | 2 | 7 | 1 | 10 | 2 | 2 | 2 | 1 | 0 | 14 | 9 | 11 | 1 | 8 | 8 | 9 | 15 | 11 | 6 | 7 | 14 | 12 | 6 | 5 | 14 | 6 | 12 | 9 | 8 | 1 | 3 | 12 | 2 | 6 | 13 | 12 | 9 | 0 | 10 | 5 | 0 | 1 | 11 | 9 | 0 | 7 | 4 | 12 | 2 | 15 | 5 | 12 | 2 | 15 | 3 | 4 | 1 | 2 | 2 | 6 | 12 | 3 | 8 | 5 | 6 | 5 | 8 | 11 | 8 | 8 | 14 | 15 | 13 | 8 | 13 | 10 | 0 | 13 | 12 | 11 | 4 | 6 | 0 | 1 | 4 | 2 | 5 | 15 | 13 | 5 | 2 | 11 | 6 | 6 | 11 | 9 | 1 | 6 | 12 | 3 | 10 | 7 | 3 | 10 | 1 | 2 | 10 | 6 | 1 | 6 | 0 | 1 | 3 | 4 | 12 | 10 | 8 | 15 | 3 | 3 | 7 | 0 | 15 | 12 | 7 | 15 | 15 | 15 | 1 | 9 | 2 | 4 | 15 | 0 | 13 | 11 | 14 | 7 | 13 | 1 | 14 | 8 | 9 | 13 | 0 | 0 | 8 | 4 | 10 | 6 | 10 | 13 | 15 | 10 | 6 | 2 | 3 | 11 | 6 | 15 | 13 | 13 | 2 | 13 | 2 | 3 | 15 | 8 | 5 | 9 | 15 | 13 | 14 | 1 | 11 | 15 | 3 | 0 | 4 | 1 | 5 | 13 | 14 | 1 | 14 | 2 | 15 | 8 | 6 | 8 | 1 | 9 | 11 | 7 | 10 | 8 | 0 | 9 | 4 | 5 | 8 | 15 | 3 | 6 | 1 | 0 | 13 | 6 | 2 | 15 | 13 | 7 | 15 | 12 | 6 | 10 | 14 | 9 | 5 | 5 | 11 | 12 | 0 | 6 | 11 | 0 | 12 | 4 | 12 | 11 | 3 | 1 | 15 | 5 | 8 | 4 | 5 | 9 | 13 | 5 | 0 | 15 | 13 | 1 | 10 | 15 | 12 | 13 | 1 | 6 | 4 | 9 | 4 | 8 | 13 | 12 | 6 | 10 | 6 | 13 | 0 | 14 | 0 | 5 | 4 | 4 | 15 | 2 | 10 | 8 | 1 | 7 | 15 | 6 | 12 | 2 | 9 | 14 | 4 | 8 | 4 | 9 | 10 | 2 | 8 | 4 | 15 | 3 | 4 | 10 | 8 | 9 | 4 | 5 | 11 | 1 | 11 | 12 | 10 | 7 | 9 | 14 | 10 | 1 | 13 | 8 | 4 | 1 | 1 | 2 | 5 | 4 | 10 | 15 | 0 | 6 | 6 | 3 | 2 | 5 | 7 | 1 | 1 | 9 | 7 | 8 | 3 | 10 | 15 | 10 | 5 | 11 | 12 | 14 | 1 | 0 | 12 | 0 | 5 | 14 | 9 | 7 | 1 | 14 | 14 | 11 | 8 | 0 | 11 | 9 | 2 | 5 | 15 | 14 | 8 | 3 | 5 | 7 | 3 | 6 | 4 | 4 | 2 | 15 | 13 | 14 | 12 | 3 | 2 | 1 | 6 | 14 | 14 | 9 | 5 | 13 | 15 | 13 | 2 | 1 | 15 | 2 | 2 | 12 | 6 | 8 | 1 | 14 | 14 | 14 | 6 | 15 | 13 | 14 | 5 | 10 | 4 | 1 | 15 | 7 | 9 | 6 | 6 | 7 | 1 | 3 | 3 | 1 | 5 | 9 | 3 | 7 | 13 | 13 | 5 | 6 | 2 | 6 | 5 | 0 | 9 | 8 | 4 | 15 | 1 | 6 | 14 | 3 | 9 | 13 | 6 | 6 | 10 | 2 | 3 | 11 | 5 | 9 | 0 | 2 | 4 | 8 | 15 | 15 | 6 | 9 | 10 | 3 | 6 | 2 | 15 | 13 | 6 | 0 | 10 | 6 | 15 | 11 | 7 | 6 | 14 | 2 | 4 | 8 | 0 | 5 | 4 | 11 | 15 | 0 | 4 | 13 | 2 | 11 | 1 | 5 | 12 | 0 | 13 | 12 | 9 | 4 | 9 | 7 | 6 | 3 | 14 | 15 | 9 | 1 | 8 | 3 | 4 | 15 | 11 | 5 | 3 | 4 | 14 | 14 | 6 | 1 | 1 | 5 | 1 | 13 | 15 | 0 | 2 | 12 | 9 | 11 | 1 | 11 | 10 | 11 | 4 | 1 | 2 | 6 | 5 | 8 | 12 | 11 | 6 | 14 | 5 | 11 | 13 | 12 | 7 | 14 | 4 | 2 | 3 | 7 | 9 | 6 | 1 | 5 | 12 | 2 | 15 | 4 | 8 | 1 | 0 | 11 | 1 | 10 | 13 | 11 | 13 | 9 | 7 | 4 | 14 | 6 | 12 | 4 | 6 | 15 | 13 | 1 | 1 | 10 | 5 | 14 | 10 | 11 | 9 | 9 | 8 | 7 | 12 | 13 | 1 | 1 | 9 | 0 | 0 | 13 | 15 | 2 | 8 | 12 | 12 | 8 | 9 | 1 | 5 | 14 | 5 | 14 | 12 | 5 | 9 | 8 | 2 | 15 | 8 | 4 | 11 | 4 | 11 | 5 | 15 | 4 | 12 | 14 | 8 | 15 | 8 | 14 | 11 | 14 | 6 | 0 | 0 | 2 | 14 | 12 | 4 | 14 | 2 | 4 | 2 | 7 | 7 | 8 | 6 | 4 | 5 | 3 | 2 | 12 | 7 | 15 | 10 | 10 | 9 | 3 | 9 | 9 | 14 | 12 | 2 | 9 | 15 | 2 | 11 | 9 | 14 | 11 | 11 | 3 | 15 | 3 | 4 | 8 | 8 | 11 | 12 | 4 | 10 | 15 | 3 | 3 | 15 | 2 | 9 | 15 | 1 | 14 | 3 | 0 | 0 | 3 | 15 | 5 | 12 | 14 | 8 | 8 | 1 | 5 | 12 | 15 | 6 | 8 | 0 | 14 | 4 | 13 | 9 | 10 | 12 | 1 | 15 | 2 | 12 | 11 | 13 | 8 | 2 | 13 | 15 | 6 | 2 | 12 | 0 | 7 | 13 | 3 | 0 | 7 | 14 | 1 | 9 | 1 | 14 | 0 | 8 | 3 | 3 | 0 | 4 | 6 | 9 | 1 | 14 | 5 | 10 | 1 | 6 | 2 | 10 | 7 | 9 | 3 | 10 | 11 | 10 | 13 | 9 | 1 | 8 | 12 | 9 | 0 | 8 | 8 | 3 | 2 | 2 | 11 | 9 | 12 | 12 | 13 | 10 | 12 | 13 | 8 | 4 | 15 | 6 | 15 | 3 | 3 | 10 | 6 | 11 | 12 | 2 | 3 | 4 | 9 | 6 | 10 | 2 | 0 | 4 | 14 | 3 | 0 | 10 | 2 | 4 | 15 | 8 | 12 | 9 | 0 | 5 | 11 | 10 | 14 | 2 | 5 | 14 | 7 | 6 | 12 | 14 | 10 | 1 | 15 | 3 | 10 | 14 | 2 | 9 | 6 | 10 | 7 | 2 | 3 | 13 | 4 | 10 | 7 | 12 | 15 | 10 | 0 | 1 | 4 | 0 | 5 | 11 | 9 | 15 | 5 | 7 | 15 | 11 | 15 | 7 | 9 | 3 | 0 | 10 | 14 | 5 | 0 | 13 | 14 | 13 | 11 | 7 | 4 | 2 | 13 | 14 | 0 | 3 | 15 | 2 | 1 | 12 | 12 | 5 | 1 | 13 | 5 | 15 | 8 | 10 | 7 | 14 | 7 | 1 | 6 | 5 | 12 | 8 | 5 | 7 | 11 | 15 | 10 | 5 | 13 | 12 | 9 | 13 | 15 | 7 | 8 | 13 | 5 | 8 | 11 | 9 | 11 | 1 | 1 | 4 | 15 | 9 | 10 | 7 | 4 | 7 | 6 | 6 | 7 | 13 | 2 | 4 | 3 | 15 | 15 | 9 | 12 | 12 | 3 | 10 | 3 | 2 | 8 | 5 | 13 | 11 | 9 | 0 | 11 | 8 | 0 | 7 | 3 | 2 | 0 | 10 | 1 | 5 | 9 | 9 | 9 | 15 | 14 | 3 | 5 | 9 | 5 | 13 | 9 | 9 | 7 | 15 | 5 | 2 | 11 | 15 | 0 | 14 | 3 | 11 | 5 | 0 | 14 | 7 | 7 | 0 | 7 | 14 | 11 | 7 | 1 | 15 | 14 | 10 | 5 | 4 | 8 | 12 | 11 | 9 | 14 | 13 | 9 | 1 | 14 | 11 | 6 | 4 | 15 | 13 | 5 | 3 | 13 | 6 | 10 | 12 | 7 | 4 | 10 | 4 | 15 | 6 | 14 | 12 | 7 | 10 | 15 | 11 | 0 | 3 | 4 | 15 | 14 | 6 | 7 | 14 | 7 | 11 | 12 | 10 | 3 | 10 | 2 | 6 | 10 | 8 | 7 | 10 | 11 | 8 | 2 | 11 | 6 | 1 | 6 | 7 | 6 | 13 | 4 | 14 | 1 | 7 | 11 | 8 | 10 | 15 | 1 | 15 | 7 | 7 | 7 | 12 | 5 | 11 | 14 | 3 | 4 | 3 | 15 | 4 | 0 | 9 | 0 | 14 | 11 | 8 | 11 | 15 | 5 | 12 | 11 | 4 | 14 | 13 | 15 | 10 | 5 | 11 | 0 | 10 | 11 | 7 | 8 | 4 | 7 | 13 | 12 | 4 | 14 | 15 | 4 | 5 | 5 | 9 | 9 | 10 | 0 | 6 | 1 | 1 | 11 | 15 | 11 | 13 | 1 | 3 | 14 | 11 | 2 | 14 | 12 | 1 | 15 | 12 | 7 | 13 | 15 | 12 | 1 | 10 | 0 | 15 | 14 | 0 | 1 | 15 | 4 | 2 | 0 | 1 | 1 | 7 | 10 | 0 | 5 | 3 | 10 | 2 | 3 | 5 | 14 | 4 | 10 | 9 | 10 | 7 | 7 | 11 | 3 | 15 | 10 | 13 | 9 | 9 | 10 | 0 | 5 | 4 | 14 | 3 | 6 | 2 | 6 | 6 | 3 | 6 | 8 | 1 | 7 | 10 | 7 | 10 | 11 | 1 | 2 | 1 | 1 | 9 | 1 | 6 | 2 | 15 | 3 | 15 | 13 | 2 | 4 | 7 | 13 | 6 | 2 | 7 | 7 | 8 | 11 | 4 | 15 | 8 | 3 | 12 | 9 | 9 | 6 | 15 | 6 | 13 | 9 | 1 | 2 | 15 | 11 | 5 | 7 | 5 | 7 | 13 | 8 | 11 | 10 | 6 | 3 | 13 | 7 | 4 | 0 | 15 | 9 | 8 | 10 | 6 | 13 | 6 | 3 | 2 | 4 | 8 | 15 | 0 | 14 | 4 | 2 | 6 | 4 | 12 | 2 | 0 | 3 | 11 | 15 | 8 | 7 | 10 | 10 | 5 | 6 | 11 | 6 | 11 | 6 | 6 | 14 | 1 | 3 | 15 | 4 | 0 | 11 | 8 | 8 | 7 | 13 | 9 | 9 | 14 | 5 | 6 | 14 | 4 | 14 | 0 | 2 | 5 | 12 | 0 | 8 | 6 | 8 | 8 | 14 | 1 | 4 | 7 | 5 | 15 | 10 | 15 | 9 | 8 | 14 | 13 | 15 | 4 | 14 | 5 | 7 | 3 | 14 | 2 | 2 | 1 | 0 | 8 | 1 | 11 | 13 | 9 | 0 | 4 | 12 | 6 | 13 | 11 | 4 | 3 | 8 | 12 | 7 | 9 | 13 | 9 | 2 | 6 | 7 | 15 | 15 | 12 | 3 | 7 | 10 | 10 | 14 | 13 | 0 | 13 | 2 | 1 | 5 | 8 | 0 | 6 | 2 | 0 | 2 | 6 | 9 | 5 | 7 | 6 | 4 | 8 | 9 | 0 | 8 | 7 | 6 | 9 | 15 | 14 | 10 | 5 | 1 | 2 | 5 | 7 | 0 | 5 | 12 | 11 | 14 | 2 | 3 | 12 | 12 | 7 | 3 | 13 | 14 | 1 | 5 | 2 | 9 | 3 | 9 | 9 | 7 | 13 | 3 | 13 | 14 | 0 | 4 | 9 | 13 | 4 | 9 | 9 | 7 | 9 | 13 | 10 | 4 | 12 | 14 | 8 | 8 | 6 | 2 | 7 | 13 | 9 | 8 | 14 | 14 | 8 | 2 | 3 | 13 | 0 | 8 | 1 | 8 | 1 | 9 | 1 | 1 | 7 | 11 | 10 | 0 | 11 | 8 | 9 | 12 | 13 | 10 | 6 | 5 | 10 | 5 | 11 | 12 | 4 | 10 | 12 | 7 | 7 | 8 | 15 | 4 | 9 | 5 | 7 | 15 | 14 | 13 | 0 | 8 | 3 | 5 | 3 | 6 | 0 | 15 | 11 | 14 | 2 | 0 | 3 | 2 | 11 | 2 | 9 | 3 | 0 | 2 | 12 | 4 | 1 | 4 | 1 | 0 | 6 | 15 | 2 | 8 | 14 | 8 | 2 | 7 | 9 | 6 | 11 | 9 | 0 | 7 | 7 | 2 | 13 | 11 | 0 | 13 | 2 | 14 | 9 | 13 | 3 | 0 | 13 | 13 | 9 | 8 | 6 | 9 | 10 | 0 | 0 | 2 | 9 | 10 | 11 | 13 | 12 | 15 | 11 | 11 | 1 | 2 | 5 | 5 | 7 | 7 | 1 | 14 | 6 | 13 | 4 | 9 | 4 | 0 | 10 | 3 | 8 | 12 | 0 | 11 | 11 | 4 | 13 | 15 | 0 | 5 | 5 | 5 | 0 | 4 | 12 | 0 | 13 | 3 | 15 | 13 | 7 | 10 | 4 | 10 | 7 | 3 | 8 | 11 | 0 | 3 | 8 | 7 | 1 | 7 | 2 | 5 | 7 | 8 | 1 | 6 | 7 | 6 | 5 | 1 | 4 | 0 | 0 | 2 | 0 | 14 | 12 | 8 | 1 | 8 | 11 | 14 | 8 | 3 | 8 | 14 | 1 | 1 | 13 | 11 | 7 | 11 | 12 | 6 | 15 | 13 | 2 | 3 | 10 | 2 | 4 | 8 | 13 | 11 | 0 | 2 | 6 | 5 | 11 | 0 | 2 | 2 | 4 | 0 | 5 | 3 | 11 | 7 | 8 | 0 | 13 | 0 | 9 | 12 | 5 | 6 | 6 | 13 | 3 | 15 | 12 | 3 | 15 | 13 | 6 | 0 | 11 | 5 | 5 | 4 | 0 | 7 | 9 | 11 | 0 | 15 | 11 | 4 | 11 | 15 | 8 | 1 | 2 | 3 | 1 | 10 | 5 | 14 | 9 | 1 | 9 | 8 | 10 | 14 | 10 | 8 | 6 | 4 | 3 | 2 | 7 | 6 | 1 | 7 | 9 | 0 | 12 | 14 | 6 | 10 | 2 | 5 | 5 | 14 | 11 | 3 | 5 | 4 | 10 |
Train Test Split¶
X_train, X_test, y_train, y_test = train_test_split(X, y, \
test_size=0.33, random_state=42)
Train SVC¶
svc = SVC()
svc.fit(X_train, y_train)
SVC()
Predict labels
y_pred = svc.predict(X_test)
svc.score(X_test, y_test)
0.5663636363636364
accuracy_score(y_test, y_pred)
0.5663636363636364
Both acccuracy and R2 score are low (~56%) on this difficult to learn multiclass dataset.
Think about how many decision boundaries a linear classifier need to classify a dataset with 16 classes- this indeed a very difficult task (with very few informative features) when compared to binary classification.
Bagging¶
Let's try to improve this accuracy by Bagging if possible.
Question 2¶
4 Points
Implement a voting classifier, using 4 classifiers:
- LogisticRegression
- RandomForestClassifier (with 100 estimators)
- Gaussian Naive Bayes (GaussianNB)
- Support Vector Classifier (SVC).
Import any sklearn libraries/functions you need below.
Note that SVC in general performs better when data is standardized; we're passing data as it is for this question intentionally.
# Set up any libarary imports here
### BEGIN SOLUTION
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
### END SOLUTION SOLUTION
def instantiate_classifiers_for_voting(rs, n_estimators_):
'''
Return 4 instantiated (not fitted) classifiers.
args: rs -> int => random state for all classifiers which accept it.
n_estimators_ -> int => number of estimators for RandomForestClassifier
return: tuple of length 4 -> (clf1, clf2, clf3, clf4) => Each element is
an instantiated classifier in this order logistic regression, Random Forest Classifier,
Gaussian NB, SVC.
Other:
> In LogisticRegression use 'multinomial' for 'multi_class' arg.
> For all classifiers, leave other parameters with their default values.
'''
### BEGIN SOLUTION
clf1 = LogisticRegression(multi_class='multinomial', random_state=rs)
clf2 = RandomForestClassifier(n_estimators=n_estimators_, random_state=rs)
clf3 = GaussianNB()
clf4 = SVC(random_state=rs)
return (clf1, clf2, clf3, clf4)
### END SOLUTION
test_.eq_ (len(instantiate_classifiers_for_voting(34, 10)), 4)
logr = instantiate_classifiers_for_voting(34, 10)[0]
test_.eq_(logr.random_state, 34)
### BEGIN HIDDEN TESTS
try:
logr.score(X, y)
except:
pass
else:
raise AssertionError("Fitted classifier when you only instantiation was required")
### END HIDDEN TESTS
_classifiers_voting = instantiate_classifiers_for_voting(42, 100)
_classifiers_voting
(LogisticRegression(multi_class='multinomial', random_state=42), RandomForestClassifier(random_state=42), GaussianNB(), SVC(random_state=42))
Question 3¶
4 Points
Fit a voting classifier using the classifiers you instatitated above- using sklearn. Look up what sklearn library/function you'll need and import it below.
### BEGIN SOLUTION
from sklearn.ensemble import VotingClassifier
### END SOLUTION
def fit_voting_classifier(classifiers_, voting_):
'''
Fit a Voting classifier which uses classifiers_ as estimators. Note that in sklearn
fitting a voting classifier will automatically fit its estimators. Read relevant documentation
for more information.
args: classifiers_ -> tuple of length 4 -> (clf1, clf2, clf3, clf4) => Each element is
an instantiated classifier.
voting_ -> string -> 'hard', 'soft'. We'll only do 'hard' voting here. Do not
worry about soft voting at this point. Read relevant documentation
for more information.
return: fitted voting classifier.
'''
### BEGIN SOLUTION
clf1, clf2, clf3, clf4 = classifiers_[0], classifiers_[1],\
classifiers_[2], classifiers_[3]
estimators_ = [
('lr', clf1),
('rf', clf2),
('gnb', clf3),
('svc', clf4)
]
vot_clf = VotingClassifier(estimators=estimators_, voting=voting_)
vot_clf = vot_clf.fit(X, y)
return vot_clf
### END SOLUTION
_vot_clf = fit_voting_classifier(_classifiers_voting, 'hard')
estimators_list = _vot_clf.estimators_
_vot_clf = fit_voting_classifier(_classifiers_voting, 'hard')
estimators_list = _vot_clf.estimators_
test_.eq_ (
[str(est_name) for est_name in estimators_list], [
"LogisticRegression(multi_class='multinomial', random_state=42)",
'RandomForestClassifier(random_state=42)',
'GaussianNB()',
'SVC(random_state=42)'
]
)
### BEGIN HIDDEN TESTS
test_.eq_(_vot_clf.n_features_in_ , 7)
try:
_vot_clf.score(X_test, y_test)
except:
raise AssertionError('Unfitted voting classifier?')
### END HIDDEN TESTS
_vot_clf = fit_voting_classifier(_classifiers_voting, 'hard')
Train¶
_vot_clf = fit_voting_classifier(_classifiers_voting, 'hard')
Predict¶
y_pred_vot_clf = _vot_clf.predict(X_test)
Accuracy¶
print('R2 score:', _vot_clf.score(X_test, y_test))
print('Accuracy:', accuracy_score(y_pred_vot_clf, y_test))
R2 score: 0.6193939393939394 Accuracy: 0.6193939393939394
You should see at accuracy of ~62% which is a huge improvement when compared to using only SVC. Voting improved performance.
Aside
: Netflix awarded a 1 million dollars prize to a developer team in 2009 for an algorithm that increased the accuracy of the company's recommendation engine by 10 percent
.
Stacking¶
Let's now try stacking and observe how it behaves on our dataset. Recall, what stacking is (read the tutorial if needed).
Question 4¶
4 Points
Implement a voting classifier, using 4 classifiers:
- Random Forest Classifier
- SVC (with 100 estimators). This time with data standardized using standard scaler.
- Logistic Regression
- Gaussian Naive Bayes (GaussianNB)
Import any sklearn libraries/functions you need below.
Note that SVC in general performs better when data is standardized; We'll do so in this question. You may find make_pipeline useful.
# Set up any libarary imports here
### BEGIN SOLUTION
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
### END SOLUTION SOLUTION
def instantiate_classifiers_for_stacking(rs, n_estimators_, max_iter_):
'''
Return 5 instantiated (not fitted) classifiers.
args: rs -> int => random state for all classifiers which accept it.
n_estimators_ -> int => number of estimators for RandomForestClassifier
max_iter_ -> int => pass this to SVC and both Logistic Regressions to silence warnings.
Read relevant docs for more information.
return: tuple of length 4 -> (clf1, clf2, clf3, clf4, final_clf) => Each element is
an instantiated classifier in this order Random Forest Classifier,
SVC, Logistic Regression, Gaussian NB. The final_clf is also a
Logistic Regression.
Other:
> In both LogisticRegressions use 'multinomial' for 'multi_class' arg.
> For all classifiers, leave other parameters with their default values.
'''
### BEGIN SOLUTION
clf1 = RandomForestClassifier(n_estimators=n_estimators_, random_state=rs)
clf2 = make_pipeline(StandardScaler(),
SVC(max_iter=max_iter_, random_state=rs))
clf3 = LogisticRegression(multi_class='multinomial', random_state=rs, \
max_iter=max_iter_)
clf4 = GaussianNB()
final_clf = final_estimator=LogisticRegression(multi_class='multinomial',
max_iter=max_iter_)
return (clf1, clf2, clf3, clf4, final_clf)
### END SOLUTION
test_.eq_ (len(instantiate_classifiers_for_stacking(34, 10, 10000)), 5)
logr = instantiate_classifiers_for_stacking(34, 10, 10000)[0]
test_.eq_(logr.random_state, 34)
### BEGIN HIDDEN TESTS
try:
logr.score(X, y)
except:
pass
else:
raise AssertionError("Fitted classifier when you only instantiation was required")
### END HIDDEN TESTS
classifiers_stacking = instantiate_classifiers_for_stacking(42, 100, 100000)
# Set up any libarary imports here
### BEGIN SOLUTION
from sklearn.ensemble import StackingClassifier
### END SOLUTION SOLUTION
def fit_stacking_classifier(classifiers_):
'''
Fit a Voting classifier which uses classifiers_ as estimators. Note that in sklearn
fitting a voting classifier will automatically fit its estimators. Read relevant documentation
for more information.
args: classifiers_ -> tuple of length 4 -> (clf1, clf2, clf3, clf4) => Each element is
an instantiated classifier.
return: fitted voting classifier.
The solution should be very similar to that of fit_voting_classifier.
'''
### BEGIN SOLUTION
clf1, clf2, clf3, clf4, final_clf = classifiers_[0], classifiers_[1],\
classifiers_[2], classifiers_[3], classifiers_[4]
estimators_ = [
('rf', clf1),
('svc', clf2),
('lr', clf3),
('gb', clf4)
]
stack_clf = StackingClassifier(estimators=estimators_, final_estimator=final_clf)
stack_clf = stack_clf.fit(X, y)
return stack_clf
### END SOLUTION
_stack_clf = fit_stacking_classifier(classifiers_stacking)
estimators_list = _stack_clf.estimators_
test_.eq_ (
["".join(str(est_name).split()) for est_name in estimators_list], # remove white spaces then compare
[
'RandomForestClassifier(random_state=42)',
"Pipeline(steps=[('standardscaler',StandardScaler()),('svc',SVC(max_iter=100000,random_state=42))])",
"LogisticRegression(max_iter=100000,multi_class='multinomial',random_state=42)",
'GaussianNB()'
]
)
### BEGIN HIDDEN TESTS
test_.eq_(_stack_clf.n_features_in_ , 7)
try:
_stack_clf.score(X_test, y_test)
except:
raise AssertionError('Unfitted voting classifier?')
### END HIDDEN TESTS
_stack_clf = fit_stacking_classifier(classifiers_stacking)
y_pred_stack_clf = _stack_clf.predict(X_test)
print('R2 score:', _stack_clf.score(X_test, y_test))
print('Accuracy:', accuracy_score(y_pred_vot_clf, y_test))
R2 score: 0.9215151515151515 Accuracy: 0.6193939393939394
Observe the performance.
Question 5¶
7 Points
This question is open ended
and this will test you on several things including how well you can read documentations. Train a XGBoost classifier on given data; Tune hyperparameters if you wish; To earn credit in this question, your accuracy on test data should be $\ge 56\%$.
# Set up any library imports here
### BEGIN SOLUTION
import xgboost as xgb
### END SOLUTION
# You may use this cell (or create other cells)
# for scratch work e.g. GridSearch() for hyperparameters tuning.
def train_XGBoost(X_train_, y_train_):
'''
Train a booster object on
return: xgboost.core.Booster object
args: X_train_ -> ndarray -> shape (m, 7)
y_train_ -> ndarray -> shape (m,)
Returned Booster should be trained (hyperparameter tuned etc) which can predict
accuracy score on test data. Accuracy should be at least 56 to earn credit.
'''
bst = None
### BEGIN SOLUTION
dtrain = xgb.DMatrix(X_train, y_train)
dtest = xgb.DMatrix(X_test, y_test)
param = {'max_depth': 32, 'eta': .4, 'objective': 'multi:softmax',\
'subsample':.93}
param['nthread'] = 5
param['num_class'] = 16
param['n_estimators'] = 400
num_round = 20
bst = xgb.train(param, dtrain, num_round)
### END SOLUTION
return bst # xgboost.core.Booster object
bst = train_XGBoost(X_train, y_train)
test_.eq_ (str(type(bst)), "<class 'xgboost.core.Booster'>")
### BEGIN HIDDEN TESTS
dtest = xgb.DMatrix(X_test)
y_pred_test = bst.predict(dtest)
acc = accuracy_score(y_test, y_pred_test)
test_.ok_ (acc >= 0.56)
### END HIDDEN TESTS
[15:18:53] WARNING: /Users/travis/build/dmlc/xgboost/src/learner.cc:480: Parameters: { n_estimators } might not be used. This may not be accurate due to some parameters are only used in language bindings but passed down to XGBoost core. Or some parameters are not used but slip through this verification. Please open an issue if you find above cases.
Other Insights From XGBoost¶
xgb.plot_importance(bst) # feature immportance
<matplotlib.axes._subplots.AxesSubplot at 0x7f9697e934a8>
# !pip install graphviz
xgb.to_graphviz(bst, num_trees=2) # second tree. Change this number to display the corresponding tree.