diff --git a/Untitled.ipynb b/Untitled.ipynb index e7ae302..32dfefd 100644 --- a/Untitled.ipynb +++ b/Untitled.ipynb @@ -1,7328 +1,7319 @@ { "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", "data = np.load(\"data.npz\", allow_pickle=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['target_labels', 'target_CMs', 'database_labels', 'database_CMs']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.files" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "8\n", "7\n", "12\n", "17\n", "13\n", "13\n", "15\n", "16\n", "15\n", "15\n", "15\n", "17\n", "17\n", "14\n", "13\n", "17\n", "15\n", "15\n", "15\n", "14\n", "11\n", "13\n", "15\n", "17\n", "13\n", "11\n", "13\n", "11\n", "17\n", "13\n", "13\n", "12\n", "13\n", "13\n", "15\n", "12\n", "15\n", "13\n", "13\n", "13\n", "15\n", "15\n", "15\n", "14\n", "15\n", "17\n", "12\n", "13\n", "17\n", "15\n", "15\n", "13\n", "17\n", "15\n", "17\n", "12\n", "15\n", "12\n", "15\n", "17\n", "13\n", "11\n", "13\n", "11\n", "15\n", "15\n", "15\n", "18\n", "12\n", "17\n", "15\n", "11\n", "15\n", "11\n", "17\n", "13\n", "17\n", "13\n", "15\n", "14\n", "18\n", "13\n", "11\n", "15\n", "15\n", "11\n", "11\n", "15\n", "15\n", "15\n", "10\n", "13\n", "16\n", "15\n", "15\n", "11\n", "15\n", "11\n", "15\n", "15\n", "11\n", "10\n", "17\n", "15\n", "14\n", "15\n", "13\n", "15\n", "13\n", "15\n", "13\n", "15\n", "8\n", "8\n", "13\n", "13\n", "11\n", "18\n", "18\n", "11\n", "13\n", "9\n", "11\n", "11\n", "10\n", "15\n", "13\n", "9\n", "11\n", "11\n", "16\n", "15\n", "13\n", "15\n", "13\n", "12\n", "15\n", "13\n", "7\n", "9\n", "7\n", "11\n", "14\n", "11\n", "9\n", "11\n", "11\n", "11\n", "9\n", "13\n", "15\n", "13\n", "13\n", "13\n", "18\n", "11\n", "11\n", "10\n", "13\n", "13\n", "11\n", "12\n", "11\n", "12\n", "11\n", "11\n", "18\n", "11\n", "12\n", "11\n", "11\n", "14\n", "12\n", "10\n", "11\n", "16\n", "11\n", "10\n", "10\n", "10\n", "12\n", "16\n", "14\n", "12\n", "18\n", "18\n", "18\n", "16\n", "22\n", "20\n", "10\n", "16\n", "22\n", "18\n", "22\n", "18\n", "14\n", "22\n", "19\n", "18\n", "18\n", "10\n", "18\n", "14\n", "20\n", "16\n", "20\n", "16\n", "22\n", "22\n", "17\n", "18\n", "8\n", "18\n", "14\n", "22\n", "18\n", "22\n", "20\n", "20\n", "22\n", "22\n", "19\n", "10\n", "9\n", "22\n", "18\n", "22\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "8\n", "19\n", "17\n", "17\n", "17\n", "17\n", "17\n", "19\n", "19\n", "19\n", "19\n", "8\n", "19\n", "15\n", "15\n", "17\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "9\n", "17\n", "17\n", "19\n", "17\n", "19\n", "19\n", "19\n", "15\n", "15\n", "19\n", "15\n", "19\n", "19\n", "20\n", "15\n", "18\n", "16\n", "18\n", "18\n", "18\n", "20\n", "13\n", "20\n", "16\n", "16\n", "20\n", "15\n", "22\n", "12\n", "18\n", "16\n", "18\n", "11\n", "16\n", "20\n", "18\n", "16\n", "12\n", "15\n", "16\n", "20\n", "20\n", "18\n", "13\n", "20\n", "18\n", "22\n", "18\n", "16\n", "14\n", "17\n", "19\n", "20\n", "18\n", "15\n", "16\n", "14\n", "18\n", "22\n", "20\n", "18\n", "22\n", "20\n", "17\n", "20\n", "11\n", "18\n", "22\n", "20\n", "18\n", "22\n", "11\n", "15\n", "15\n", "11\n", "17\n", "6\n", "15\n", "17\n", "9\n", "17\n", "11\n", "19\n", "19\n", "17\n", "19\n", "17\n", "11\n", "13\n", "19\n", "17\n", "19\n", "13\n", "21\n", "21\n", "19\n", "13\n", "17\n", "15\n", "11\n", "17\n", "19\n", "17\n", "15\n", "21\n", "19\n", "13\n", "21\n", "21\n", "19\n", "9\n", "15\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "15\n", "19\n", "17\n", "15\n", "19\n", "13\n", "15\n", "17\n", "19\n", "17\n", "19\n", "21\n", "19\n", "17\n", "15\n", "19\n", "19\n", "20\n", "20\n", "17\n", "20\n", "18\n", "16\n", "20\n", "20\n", "13\n", "18\n", "14\n", "16\n", "20\n", "20\n", "17\n", "16\n", "20\n", "20\n", "13\n", "15\n", "19\n", "15\n", "19\n", "19\n", "22\n", "18\n", "15\n", "16\n", "14\n", "20\n", "13\n", "18\n", "22\n", "20\n", "18\n", "16\n", "18\n", "16\n", "17\n", "21\n", "20\n", "15\n", "20\n", "18\n", "20\n", "22\n", "20\n", "18\n", "20\n", "18\n", "20\n", "17\n", "10\n", "14\n", "18\n", "22\n", "22\n", "20\n", "18\n", "21\n", "15\n", "13\n", "17\n", "17\n", "10\n", "17\n", "17\n", "21\n", "21\n", "19\n", "19\n", "17\n", "21\n", "19\n", "21\n", "12\n", "15\n", "17\n", "21\n", "17\n", "19\n", "19\n", "17\n", "17\n", "19\n", "21\n", "14\n", "19\n", "19\n", "17\n", "19\n", "14\n", "14\n", "15\n", "15\n", "13\n", "17\n", "14\n", "15\n", "19\n", "17\n", "19\n", "17\n", "15\n", "17\n", "21\n", "17\n", "19\n", "14\n", "19\n", "17\n", "15\n", "19\n", "19\n", "20\n", "18\n", "16\n", "19\n", "15\n", "14\n", "20\n", "20\n", "16\n", "14\n", "20\n", "17\n", "18\n", "20\n", "15\n", "13\n", "14\n", "17\n", "15\n", "13\n", "15\n", "19\n", "17\n", "17\n", "20\n", "20\n", "19\n", "14\n", "19\n", "20\n", "20\n", "20\n", "20\n", "19\n", "19\n", "19\n", "19\n", "19\n", "14\n", "19\n", "19\n", "19\n", "20\n", "20\n", "20\n", "19\n", "19\n", "17\n", "19\n", "7\n", "15\n", "18\n", "16\n", "14\n", "20\n", "18\n", "16\n", "18\n", "16\n", "22\n", "20\n", "14\n", "17\n", "18\n", "16\n", "14\n", "20\n", "20\n", "18\n", "22\n", "20\n", "18\n", "12\n", "22\n", "19\n", "22\n", "22\n", "20\n", "18\n", "20\n", "22\n", "20\n", "18\n", "10\n", "20\n", "18\n", "19\n", "21\n", "15\n", "21\n", "15\n", "19\n", "19\n", "21\n", "16\n", "21\n", "17\n", "21\n", "19\n", "17\n", "21\n", "19\n", "17\n", "19\n", "15\n", "10\n", "21\n", "17\n", "21\n", "17\n", "19\n", "21\n", "19\n", "19\n", "19\n", "19\n", "8\n", "17\n", "13\n", "15\n", "13\n", "19\n", "19\n", "17\n", "19\n", "17\n", "21\n", "14\n", "17\n", "15\n", "19\n", "17\n", "19\n", "19\n", "17\n", "19\n", "17\n", "15\n", "10\n", "12\n", "12\n", "14\n", "14\n", "17\n", "17\n", "17\n", "15\n", "17\n", "17\n", "14\n", "17\n", "17\n", "15\n", "13\n", "19\n", "17\n", "15\n", "17\n", "13\n", "15\n", "10\n", "10\n", "13\n", "17\n", "15\n", "19\n", "19\n", "17\n", "15\n", "12\n", "14\n", "19\n", "15\n", "19\n", "14\n", "12\n", "14\n", "14\n", "16\n", "18\n", "18\n", "16\n", "17\n", "16\n", "18\n", "17\n", "17\n", "18\n", "18\n", "16\n", "19\n", "19\n", "15\n", "18\n", "16\n", "18\n", "17\n", "19\n", "18\n", "16\n", "20\n", "18\n", "16\n", "19\n", "15\n", "12\n", "15\n", "18\n", "15\n", "17\n", "15\n", "15\n", "17\n", "20\n", "18\n", "20\n", "12\n", "18\n", "18\n", "15\n", "15\n", "15\n", "17\n", "17\n", "15\n", "15\n", "19\n", "8\n", "19\n", "19\n", "17\n", "17\n", "19\n", "15\n", "15\n", "15\n", "15\n", "20\n", "16\n", "18\n", "16\n", "19\n", "19\n", "15\n", "19\n", "15\n", "20\n", "20\n", "20\n", "12\n", "19\n", "19\n", "19\n", "20\n", "20\n", "16\n", "18\n", "17\n", "20\n", "18\n", "16\n", "17\n", "13\n", "15\n", "15\n", "19\n", "19\n", "19\n", "15\n", "17\n", "19\n", "12\n", "14\n", "19\n", "19\n", "15\n", "20\n", "19\n", "19\n", "20\n", "20\n", "20\n", "17\n", "16\n", "20\n", "19\n", "19\n", "19\n", "19\n", "19\n", "19\n", "19\n", "20\n", "20\n", "15\n", "15\n", "19\n", "20\n", "19\n", "19\n", "19\n", "22\n", "20\n", "20\n", "18\n", "14\n", "18\n", "16\n", "13\n", "20\n", "18\n", "20\n", "22\n", "20\n", "18\n", "20\n", "12\n", "18\n", "14\n", "20\n", "13\n", "18\n", "16\n", "18\n", "16\n", "20\n", "22\n", "16\n", "20\n", "18\n", "16\n", "14\n", "13\n", "20\n", "22\n", "20\n", "18\n", "20\n", "14\n", "18\n", "21\n", "17\n", "21\n", "15\n", "15\n", "17\n", "17\n", "15\n", "15\n", "14\n", "15\n", "21\n", "15\n", "21\n", "17\n", "21\n", "15\n", "17\n", "13\n", "19\n", "16\n", "15\n", "19\n", "15\n", "21\n", "21\n", "17\n", "17\n", "19\n", "13\n", "21\n", "14\n", "17\n", "21\n", "17\n", "15\n", "17\n", "21\n", "19\n", "17\n", "15\n", "19\n", "10\n", "12\n", "17\n", "17\n", "15\n", "19\n", "17\n", "19\n", "17\n", "21\n", "14\n", "17\n", "11\n", "14\n", "12\n", "14\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "19\n", "14\n", "17\n", "17\n", "17\n", "15\n", "17\n", "19\n", "17\n", "15\n", "17\n", "19\n", "17\n", "17\n", "19\n", "19\n", "15\n", "17\n", "15\n", "15\n", "14\n", "14\n", "14\n", "14\n", "14\n", "14\n", "13\n", "17\n", "12\n", "15\n", "13\n", "17\n", "15\n", "17\n", "10\n", "17\n", "15\n", "17\n", "17\n", "17\n", "13\n", "15\n", "17\n", "15\n", "17\n", "9\n", "19\n", "17\n", "15\n", "17\n", "15\n", "17\n", "12\n", "12\n", "14\n", "14\n", "14\n", "14\n", "14\n", "14\n", "16\n", "18\n", "16\n", "19\n", "18\n", "17\n", "17\n", "12\n", "17\n", "17\n", "16\n", "18\n", "17\n", "18\n", "16\n", "19\n", "17\n", "17\n", "9\n", "17\n", "15\n", "18\n", "18\n", "17\n", "17\n", "18\n", "16\n", "19\n", "17\n", "11\n", "11\n", "18\n", "17\n", "18\n", "15\n", "17\n", "17\n", "18\n", "16\n", "18\n", "17\n", "9\n", "16\n", "18\n", "16\n", "18\n", "16\n", "15\n", "13\n", "17\n", "15\n", "16\n", "13\n", "19\n", "16\n", "18\n", "19\n", "17\n", "14\n", "20\n", "16\n", "16\n", "16\n", "11\n", "18\n", "17\n", "18\n", "18\n", "13\n", "17\n", "15\n", "15\n", "13\n", "19\n", "17\n", "19\n", "17\n", "19\n", "19\n", "13\n", "19\n", "17\n", "17\n", "17\n", "15\n", "13\n", "17\n", "15\n", "17\n", "15\n", "19\n", "17\n", "17\n", "17\n", "15\n", "15\n", "13\n", "15\n", "18\n", "16\n", "19\n", "11\n", "17\n", "19\n", "20\n", "16\n", "14\n", "13\n", "12\n", "12\n", "12\n", "14\n", "14\n", "18\n", "19\n", "16\n", "16\n", "16\n", "13\n", "18\n", "18\n", "19\n", "15\n", "11\n", "15\n", "19\n", "15\n", "15\n", "13\n", "13\n", "17\n", "19\n", "11\n", "15\n", "10\n", "12\n", "13\n", "19\n", "17\n", "12\n", "6\n", "11\n", "13\n", "10\n", "10\n", "12\n", "10\n", "17\n", "15\n", "10\n", "13\n", "19\n", "17\n", "13\n", "17\n", "12\n", "10\n", "12\n", "10\n", "19\n", "20\n", "16\n", "19\n", "15\n", "11\n", "15\n", "19\n", "15\n", "19\n", "20\n", "16\n", "14\n", "12\n", "18\n", "16\n", "9\n", "18\n", "17\n", "18\n", "16\n", "19\n", "15\n", "13\n", "11\n", "17\n", "15\n", "15\n", "17\n", "17\n", "15\n", "15\n", "18\n", "16\n", "16\n", "14\n", "18\n", "16\n", "17\n", "18\n", "16\n", "18\n", "13\n", "19\n", "16\n", "14\n", "16\n", "14\n", "18\n", "11\n", "16\n", "18\n", "16\n", "16\n", "14\n", "19\n", "20\n", "18\n", "21\n", "11\n", "13\n", "9\n", "13\n", "13\n", "11\n", "13\n", "19\n", "19\n", "19\n", "17\n", "19\n", "11\n", "13\n", "15\n", "13\n", "11\n", "19\n", "17\n", "19\n", "19\n", "17\n", "10\n", "13\n", "10\n", "19\n", "15\n", "19\n", "15\n", "19\n", "19\n", "17\n", "19\n", "19\n", "13\n", "11\n", "17\n", "12\n", "12\n", "12\n", "13\n", "12\n", "13\n", "17\n", "15\n", "19\n", "15\n", "15\n", "17\n", "17\n", "17\n", "17\n", "13\n", "15\n", "15\n", "13\n", "15\n", "15\n", "17\n", "13\n", "13\n", "11\n", "17\n", "15\n", "12\n", "14\n", "12\n", "12\n", "13\n", "10\n", "17\n", "14\n", "17\n", "13\n", "15\n", "15\n", "17\n", "17\n", "15\n", "11\n", "13\n", "11\n", "19\n", "15\n", "13\n", "15\n", "13\n", "13\n", "11\n", "17\n", "9\n", "15\n", "15\n", "15\n", "19\n", "15\n", "15\n", "15\n", "13\n", "13\n", "13\n", "11\n", "15\n", "13\n", "15\n", "13\n", "17\n", "19\n", "17\n", "17\n", "17\n", "17\n", "16\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "13\n", "15\n", "15\n", "17\n", "18\n", "13\n", "17\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "16\n", "15\n", "17\n", "15\n", "17\n", "15\n", "17\n", "19\n", "15\n", "15\n", "15\n", "7\n", "13\n", "17\n", "15\n", "15\n", "17\n", "17\n", "17\n", "15\n", "15\n", "17\n", "17\n", "12\n", "15\n", "17\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "12\n", "15\n", "15\n", "15\n", "13\n", "15\n", "11\n", "13\n", "15\n", "17\n", "15\n", "15\n", "15\n", "13\n", "15\n", "15\n", "15\n", "13\n", "15\n", "15\n", "13\n", "15\n", "15\n", "13\n", "17\n", "13\n", "15\n", "15\n", "17\n", "15\n", "17\n", "17\n", "15\n", "15\n", "17\n", "17\n", "17\n", "17\n", "15\n", "17\n", "17\n", "17\n", "17\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "15\n", "19\n", "19\n", "17\n", "17\n", "15\n", "18\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "19\n", "17\n", "15\n", "17\n", "15\n", "15\n", "15\n", "17\n", "15\n", "15\n", "19\n", "19\n", "19\n", "15\n", "17\n", "15\n", "19\n", "19\n", "17\n", "17\n", "19\n", "17\n", "17\n", "15\n", "13\n", "15\n", "5\n", "13\n", "15\n", "15\n", "19\n", "13\n", "13\n", "15\n", "17\n", "15\n", "13\n", "15\n", "13\n", "13\n", "19\n", "17\n", "17\n", "15\n", "17\n", "15\n", "19\n", "17\n", "17\n", "15\n", "15\n", "19\n", "19\n", "17\n", "15\n", "15\n", "15\n", "17\n", "15\n", "15\n", "11\n", "15\n", "15\n", "17\n", "19\n", "17\n", "17\n", "17\n", "17\n", "17\n", "19\n", "17\n", "17\n", "17\n", "19\n", "11\n", "19\n", "17\n", "15\n", "17\n", "17\n", "15\n", "12\n", "15\n", "15\n", "17\n", "19\n", "13\n", "17\n", "19\n", "19\n", "19\n", "17\n", "10\n", "19\n", "13\n", "13\n", "13\n", "15\n", "11\n", "17\n", "15\n", "17\n", "15\n", "12\n", "17\n", "15\n", "15\n", "15\n", "15\n", "19\n", "15\n", "15\n", "15\n", "15\n", "18\n", "17\n", "19\n", "17\n", "13\n", "11\n", "13\n", "13\n", "17\n", "21\n", "17\n", "15\n", "15\n", "13\n", "15\n", "17\n", "15\n", "15\n", "19\n", "17\n", "13\n", "15\n", "13\n", "10\n", "13\n", "15\n", "17\n", "17\n", "15\n", "13\n", "17\n", "15\n", "15\n", "17\n", "16\n", "21\n", "19\n", "15\n", "15\n", "17\n", "17\n", "13\n", "17\n", "15\n", "13\n", "10\n", "15\n", "19\n", "15\n", "15\n", "17\n", "17\n", "15\n", "17\n", "13\n", "17\n", "14\n", "15\n", "19\n", "17\n", "17\n", "15\n", "19\n", "17\n", "15\n", "19\n", "17\n", "12\n", "15\n", "17\n", "17\n", "19\n", "15\n", "17\n", "17\n", "15\n", "15\n", "17\n", "14\n", "15\n", "15\n", "15\n", "19\n", "17\n", "15\n", "15\n", "17\n", "17\n", "13\n", "14\n", "17\n", "13\n", "15\n", "17\n", "15\n", "13\n", "17\n", "17\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "17\n", "15\n", "19\n", "15\n", "15\n", "17\n", "15\n", "19\n", "17\n", "17\n", "19\n", "17\n", "17\n", "17\n", "17\n", "15\n", "13\n", "18\n", "15\n", "13\n", "17\n", "15\n", "17\n", "15\n", "17\n", "13\n", "15\n", "21\n", "9\n", "14\n", "17\n", "15\n", "13\n", "15\n", "13\n", "17\n", "15\n", "17\n", "15\n", "17\n", "12\n", "17\n", "17\n", "15\n", "17\n", "17\n", "15\n", "15\n", "17\n", "15\n", "15\n", "12\n", "19\n", "15\n", "17\n", "15\n", "17\n", "17\n", "17\n", "17\n", "15\n", "17\n", "17\n", "15\n", "15\n", "19\n", "13\n", "13\n", "17\n", "15\n", "19\n", "17\n", "17\n", "17\n", "13\n", "17\n", "11\n", "21\n", "13\n", "17\n", "15\n", "15\n", "17\n", "15\n", "13\n", "15\n", "13\n", "13\n", "15\n", "19\n", "19\n", "15\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "17\n", "17\n", "17\n", "17\n", "15\n", "15\n", "15\n", "17\n", "17\n", "15\n", "17\n", "17\n", "13\n", "15\n", "15\n", "15\n", "11\n", "13\n", "15\n", "17\n", "13\n", "15\n", "19\n", "15\n", "19\n", "17\n", "19\n", "13\n", "19\n", "19\n", "17\n", "15\n", "19\n", "19\n", "17\n", "15\n", "13\n", "11\n", "19\n", "19\n", "17\n", "12\n", "18\n", "15\n", "15\n", "15\n", "13\n", "13\n", "17\n", "15\n", "17\n", "19\n", "21\n", "17\n", "21\n", "19\n", "17\n", "19\n", "15\n", "13\n", "11\n", "19\n", "17\n", "15\n", "17\n", "15\n", "19\n", "15\n", "13\n", "17\n", "17\n", "19\n", "17\n", "19\n", "13\n", "13\n", "15\n", "19\n", "17\n", "19\n", "13\n", "17\n", "15\n", "15\n", "15\n", "13\n", "17\n", "13\n", "15\n", "17\n", "19\n", "19\n", "17\n", "17\n", "15\n", "13\n", "13\n", "17\n", "11\n", "15\n", "15\n", "17\n", "17\n", "19\n", "15\n", "13\n", "11\n", "19\n", "17\n", "17\n", "15\n", "17\n", "13\n", "15\n", "17\n", "19\n", "19\n", "17\n", "13\n", "15\n", "17\n", "15\n", "15\n", "13\n", "15\n", "19\n", "15\n", "17\n", "17\n", "15\n", "15\n", "13\n", "13\n", "11\n", "15\n", "17\n", "19\n", "17\n", "17\n", "17\n", "19\n", "17\n", "15\n", "19\n", "17\n", "15\n", "17\n", "17\n", "19\n", "19\n", "15\n", "15\n", "13\n", "17\n", "19\n", "19\n", "17\n", "15\n", "17\n", "17\n", "19\n", "15\n", "19\n", "21\n", "18\n", "17\n", "19\n", "15\n", "19\n", "19\n", "19\n", "17\n", "13\n", "15\n", "15\n", "13\n", "15\n", "19\n", "13\n", "15\n", "13\n", "11\n", "17\n", "17\n", "17\n", "17\n", "12\n", "19\n", "17\n", "13\n", "19\n", "15\n", "15\n", "17\n", "17\n", "19\n", "15\n", "14\n", "21\n", "13\n", "15\n", "19\n", "15\n", "15\n", "13\n", "15\n", "15\n", "13\n", "14\n", "17\n", "19\n", "15\n", "19\n", "19\n", "19\n", "17\n", "17\n", "17\n", "15\n", "14\n", "17\n", "15\n", "19\n", "19\n", "17\n", "17\n", "15\n", "13\n", "19\n", "17\n", "17\n", "17\n", "19\n", "17\n", "15\n", "17\n", "15\n", "15\n", "19\n", "15\n", "13\n", "16\n", "17\n", "17\n", "17\n", "15\n", "17\n", "21\n", "19\n", "13\n", "19\n", "17\n", "17\n", "17\n", "17\n", "17\n", "21\n", "19\n", "19\n", "17\n", "19\n", "17\n", "17\n", "11\n", "17\n", "21\n", "21\n", "19\n", "17\n", "15\n", "21\n", "19\n", "19\n", "15\n", "15\n", "12\n", "17\n", "15\n", "17\n", "15\n", "13\n", "15\n", "13\n", "17\n", "17\n", "15\n", "18\n", "19\n", "13\n", "11\n", "17\n", "15\n", "15\n", "19\n", "19\n", "17\n", "19\n", "16\n", "17\n", "19\n", "21\n", "17\n", "19\n", "19\n", "17\n", "17\n", "17\n", "17\n", "14\n", "21\n", "19\n", "17\n", "17\n", "21\n", "19\n", "21\n", "19\n", "19\n", "21\n", "12\n", "19\n", "17\n", "17\n", "15\n", "19\n", "15\n", "19\n", "17\n", "19\n", "17\n", "10\n", "21\n", "21\n", "19\n", "17\n", "15\n", "19\n", "21\n", "19\n", "19\n", "21\n", "12\n", "19\n", "19\n", "19\n", "21\n", "19\n", "21\n", "17\n", "21\n", "17\n", "19\n", "12\n", "19\n", "21\n", "15\n", "15\n", "15\n", "15\n", "15\n", "19\n", "17\n", "17\n", "14\n", "13\n", "13\n", "15\n", "15\n", "17\n", "13\n", "17\n", "21\n", "17\n", "13\n", "13\n", "12\n", "13\n", "15\n", "13\n", "17\n", "13\n", "17\n", "17\n", "15\n", "15\n", "21\n", "17\n", "13\n", "17\n", "15\n", "17\n", "15\n", "13\n", "17\n", "15\n", "17\n", "13\n", "15\n", "19\n", "15\n", "17\n", "15\n", "19\n", "19\n", "17\n", "17\n", "15\n", "19\n", "20\n", "17\n", "15\n", "19\n", "17\n", "15\n", "19\n", "17\n", "13\n", "11\n", "15\n", "13\n", "13\n", "15\n", "21\n", "21\n", "17\n", "17\n", "15\n", "21\n", "19\n", "17\n", "16\n", "19\n", "19\n", "19\n", "17\n", "19\n", "19\n", "17\n", "15\n", "21\n", "19\n", "12\n", "17\n", "19\n", "13\n", "13\n", "13\n", "17\n", "13\n", "13\n", "15\n", "13\n", "16\n", "15\n", "17\n", "15\n", "15\n", "13\n", "17\n", "19\n", "15\n", "15\n", "15\n", "16\n", "13\n", "17\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "19\n", "17\n", "17\n", "17\n", "15\n", "19\n", "17\n", "17\n", "15\n", "17\n", "13\n", "21\n", "11\n", "4\n", "11\n", "15\n", "15\n", "13\n", "13\n", "15\n", "15\n", "15\n", "19\n", "17\n", "17\n", "19\n", "14\n", "19\n", "17\n", "17\n", "15\n", "19\n", "17\n", "17\n", "19\n", "17\n", "19\n", "12\n", "17\n", "17\n", "15\n", "15\n", "15\n", "17\n", "17\n", "17\n", "19\n", "19\n", "16\n", "19\n", "15\n", "17\n", "19\n", "13\n", "13\n", "15\n", "17\n", "17\n", "15\n", "20\n", "17\n", "21\n", "21\n", "13\n", "17\n", "15\n", "13\n", "17\n", "19\n", "17\n", "14\n", "17\n", "15\n", "17\n", "21\n", "21\n", "17\n", "15\n", "15\n", "13\n", "17\n", "12\n", "19\n", "17\n", "21\n", "19\n", "19\n", "19\n", "17\n", "17\n", "15\n", "19\n", "17\n", "19\n", "17\n", "17\n", "19\n", "17\n", "15\n", "17\n", "17\n", "15\n", "19\n", "17\n", "21\n", "19\n", "17\n", "19\n", "17\n", "19\n", "19\n", "19\n", "17\n", "19\n", "15\n", "21\n", "19\n", "19\n", "17\n", "19\n", "13\n", "15\n", "17\n", "17\n", "15\n", "11\n", "13\n", "15\n", "17\n", "15\n", "15\n", "15\n", "13\n", "15\n", "19\n", "19\n", "17\n", "17\n", "17\n", "17\n", "17\n", "19\n", "17\n", "15\n", "17\n", "17\n", "17\n", "17\n", "17\n", "15\n", "15\n", "15\n", "19\n", "19\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "19\n", "17\n", "17\n", "19\n", "19\n", "17\n", "15\n", "19\n", "19\n", "17\n", "15\n", "15\n", "17\n", "15\n", "19\n", "17\n", "17\n", "19\n", "19\n", "19\n", "15\n", "20\n", "17\n", "17\n", "17\n", "13\n", "15\n", "15\n", "17\n", "17\n", "17\n", "19\n", "13\n", "17\n", "17\n", "19\n", "17\n", "15\n", "21\n", "15\n", "15\n", "17\n", "15\n", "17\n", "13\n", "15\n", "13\n", "15\n", "15\n", "13\n", "13\n", "15\n", "13\n", "19\n", "17\n", "13\n", "11\n", "17\n", "15\n", "17\n", "15\n", "13\n", "19\n", "19\n", "17\n", "17\n", "15\n", "17\n", "15\n", "21\n", "19\n", "17\n", "15\n", "13\n", "17\n", "19\n", "9\n", "15\n", "19\n", "17\n", "17\n", "15\n", "19\n", "19\n", "17\n", "15\n", "19\n", "15\n", "13\n", "17\n", "15\n", "21\n", "19\n", "21\n", "19\n", "17\n", "19\n", "21\n", "19\n", "15\n", "13\n", "17\n", "19\n", "17\n", "19\n", "13\n", "13\n", "15\n", "17\n", "15\n", "15\n", "13\n", "11\n", "15\n", "13\n", "17\n", "13\n", "11\n", "15\n", "15\n", "19\n", "17\n", "15\n", "17\n", "19\n", "15\n", "17\n", "15\n", "19\n", "19\n", "17\n", "15\n", "13\n", "13\n", "19\n", "17\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "15\n", "20\n", "19\n", "17\n", "19\n", "17\n", "15\n", "17\n", "19\n", "17\n", "19\n", "19\n", "16\n", "11\n", "13\n", "11\n", "15\n", "13\n", "17\n", "21\n", "11\n", "15\n", "13\n", "19\n", "15\n", "13\n", "17\n", "15\n", "15\n", "13\n", "17\n", "15\n", "15\n", "17\n", "9\n", "15\n", "13\n", "17\n", "15\n", "13\n", "17\n", "15\n", "15\n", "21\n", "13\n", "10\n", "11\n", "19\n", "17\n", "15\n", "17\n", "17\n", "15\n", "17\n", "17\n", "19\n", "19\n", "11\n", "19\n", "19\n", "17\n", "17\n", "17\n", "15\n", "19\n", "17\n", "15\n", "15\n", "9\n", "17\n", "19\n", "15\n", "17\n", "19\n", "17\n", "13\n", "17\n", "15\n", "13\n", "13\n", "17\n", "19\n", "15\n", "17\n", "15\n", "17\n", "17\n", "15\n", "17\n", "15\n", "9\n", "15\n", "19\n", "21\n", "17\n", "19\n", "19\n", "17\n", "17\n", "17\n", "17\n", "7\n", "17\n", "19\n", "17\n", "19\n", "17\n", "19\n", "17\n", "15\n", "15\n", "17\n", "11\n", "17\n", "15\n", "17\n", "19\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "17\n", "19\n", "17\n", "15\n", "17\n", "15\n", "19\n", "17\n", "15\n", "17\n", "15\n", "20\n", "19\n", "17\n", "15\n", "19\n", "17\n", "19\n", "17\n", "21\n", "17\n", "21\n", "17\n", "19\n", "17\n", "19\n", "17\n", "13\n", "19\n", "17\n", "15\n", "17\n", "19\n", "10\n", "13\n", "15\n", "19\n", "21\n", "19\n", "17\n", "15\n", "13\n", "19\n", "21\n", "19\n", "17\n", "21\n", "17\n", "19\n", "17\n", "19\n", "17\n", "17\n", "15\n", "17\n", "15\n", "13\n", "15\n", "19\n", "17\n", "17\n", "15\n", "15\n", "15\n", "15\n", "19\n", "17\n", "17\n", "15\n", "19\n", "17\n", "17\n", "19\n", "17\n", "17\n", "17\n", "15\n", "17\n", "13\n", "15\n", "19\n", "19\n", "19\n", "17\n", "15\n", "13\n", "19\n", "17\n", "17\n", "13\n", "19\n", "17\n", "19\n", "17\n", "17\n", "17\n", "19\n", "15\n", "13\n", "17\n", "19\n", "17\n", "17\n", "15\n", "15\n", "13\n", "19\n", "17\n", "15\n", "17\n", "17\n", "17\n", "15\n", "15\n", "17\n", "15\n", "13\n", "15\n", "17\n", "13\n", "17\n", "15\n", "13\n", "17\n", "19\n", "17\n", "17\n", "15\n", "13\n", "13\n", "19\n", "13\n", "15\n", "14\n", "17\n", "15\n", "17\n", "15\n", "15\n", "15\n", "13\n", "15\n", "17\n", "21\n", "12\n", "19\n", "17\n", "15\n", "15\n", "13\n", "17\n", "15\n", "15\n", "15\n", "13\n", "15\n", "15\n", "21\n", "11\n", "13\n", "13\n", "17\n", "17\n", "15\n", "15\n", "17\n", "15\n", "19\n", "15\n", "19\n", "15\n", "17\n", "15\n", "15\n", "13\n", "17\n", "15\n", "13\n", "15\n", "15\n", "13\n", "17\n", "13\n", "13\n", "17\n", "15\n", "17\n", "15\n", "17\n", "11\n", "15\n", "15\n", "15\n", "21\n", "15\n", "17\n", "15\n", "13\n", "15\n", "15\n", "15\n", "13\n", "11\n", "13\n", "15\n", "19\n", "15\n", "17\n", "17\n", "11\n", "13\n", "15\n", "13\n", "15\n", "13\n", "15\n", "13\n", "21\n", "19\n", "17\n", "15\n", "15\n", "11\n", "15\n", "15\n", "15\n", "17\n", "17\n", "17\n", "21\n", "11\n", "15\n", "13\n", "17\n", "13\n", "17\n", "15\n", "13\n", "15\n", "17\n", "11\n", "19\n", "13\n", "15\n", "13\n", "11\n", "17\n", "15\n", "11\n", "13\n", "13\n", "13\n", "15\n", "21\n", "15\n", "8\n", "14\n", "11\n", "15\n", "13\n", "15\n", "13\n", "15\n", "13\n", "15\n", "13\n", "19\n", "17\n", "21\n", "15\n", "13\n", "13\n", "15\n", "15\n", "15\n", "13\n", "11\n", "13\n", "13\n", "13\n", "15\n", "13\n", "17\n", "15\n", "17\n", "13\n", "15\n", "17\n", "13\n", "19\n", "15\n", "19\n", "21\n", "17\n", "15\n", "13\n", "13\n", "13\n", "15\n", "15\n", "19\n", "17\n", "15\n", "15\n", "21\n", "15\n", "17\n", "17\n", "13\n", "11\n", "17\n", "15\n", "15\n", "13\n", "13\n", "15\n", "19\n", "15\n", "13\n", "11\n", "17\n", "15\n", "15\n", "13\n", "13\n", "15\n", "15\n", "17\n", "17\n", "13\n", "13\n", "15\n", "17\n", "11\n", "15\n", "11\n", "15\n", "13\n", "13\n", "17\n", "19\n", "15\n", "17\n", "19\n", "19\n", "17\n", "17\n", "15\n", "17\n", "15\n", "17\n", "19\n", "17\n", "17\n", "13\n", "15\n", "15\n", "13\n", "17\n", "15\n", "17\n", "17\n", "15\n", "17\n", "15\n", "15\n", "12\n", "19\n", "11\n", "13\n", "11\n", "15\n", "13\n", "15\n", "15\n", "13\n", "11\n", "17\n", "12\n", "13\n", "11\n", "11\n", "13\n", "11\n", "15\n", "17\n", "15\n", "15\n", "13\n", "19\n", "15\n", "21\n", "17\n", "15\n", "17\n", "15\n", "17\n", "15\n", "13\n", "15\n", "14\n", "13\n", "17\n", "21\n", "15\n", "17\n", "15\n", "15\n", "13\n", "19\n", "17\n", "14\n", "19\n", "13\n", "11\n", "21\n", "15\n", "15\n", "13\n", "15\n", "15\n", "15\n", "14\n", "13\n", "17\n", "15\n", "17\n", "19\n", "15\n", "15\n", "13\n", "17\n", "11\n", "14\n", "11\n", "15\n", "13\n", "15\n", "15\n", "17\n", "13\n", "17\n", "15\n", "15\n", "14\n", "13\n", "17\n", "15\n", "17\n", "17\n", "15\n", "21\n", "13\n", "15\n", "15\n", "16\n", "17\n", "11\n", "13\n", "15\n", "13\n", "17\n", "15\n", "19\n", "17\n", "15\n", "16\n", "15\n", "15\n", "15\n", "15\n", "11\n", "13\n", "13\n", "11\n", "17\n", "13\n", "12\n", "12\n", "11\n", "11\n", "9\n", "15\n", "13\n", "14\n", "14\n", "14\n", "13\n", "21\n", "12\n", "13\n", "14\n", "14\n", "12\n", "14\n", "12\n", "16\n", "16\n", "14\n", "16\n", "14\n", "21\n", "16\n", "12\n", "11\n", "16\n", "16\n", "14\n", "16\n", "16\n", "13\n", "16\n", "14\n", "19\n", "21\n", "16\n", "16\n", "16\n", "16\n", "16\n", "18\n", "15\n", "16\n", "15\n", "14\n", "16\n", "19\n", "16\n", "15\n", "14\n", "15\n", "14\n", "16\n", "16\n", "16\n", "14\n", "13\n", "16\n", "17\n", "12\n", "16\n", "11\n", "11\n", "16\n", "17\n", "16\n", "16\n", "13\n", "13\n", "12\n", "15\n", "11\n", "13\n", "12\n", "10\n", "15\n", "11\n", "10\n", "16\n", "14\n", "12\n", "13\n", "21\n", "13\n", "14\n", "13\n", "13\n", "12\n", "14\n", "13\n", "13\n", "12\n", "14\n", "16\n", "21\n", "16\n", "14\n", "17\n", "16\n", "16\n", "18\n", "16\n", "18\n", "16\n", "14\n", "14\n", "19\n", "16\n", "10\n", "19\n", "16\n", "18\n", "16\n", "14\n", "14\n", "14\n", "16\n", "18\n", "16\n", "21\n", "17\n", "14\n", "16\n", "16\n", "16\n", "16\n", "12\n", "14\n", "12\n", "14\n", "18\n", "15\n", "19\n", "16\n", "14\n", "18\n", "16\n", "14\n", "16\n", "18\n", "18\n", "14\n", "14\n", "13\n", "16\n", "13\n", "15\n", "14\n", "14\n", "13\n", "13\n", "14\n", "14\n", "19\n", "14\n", "18\n", "16\n", "21\n", "12\n", "18\n", "16\n", "18\n", "14\n", "16\n", "17\n", "18\n", "16\n", "15\n", "14\n", "16\n", "14\n", "14\n", "12\n", "14\n", "16\n", "15\n", "16\n", "15\n", "13\n", "12\n", "14\n", "15\n", "12\n", "12\n", "16\n", "18\n", "19\n", "16\n", "16\n", "15\n", "15\n", "15\n", "18\n", "16\n", "18\n", "16\n", "18\n", "17\n", "18\n", "16\n", "16\n", "18\n", "14\n", "12\n", "18\n", "15\n", "16\n", "18\n", "15\n", "18\n", "16\n", "16\n", "14\n", "18\n", "16\n", "18\n", "13\n", "16\n", "15\n", "9\n", "10\n", "19\n", "13\n", "15\n", "15\n", "14\n", "14\n", "18\n", "16\n", "13\n", "15\n", "16\n", "8\n", "13\n", "12\n", "14\n", "14\n", "13\n", "14\n", "13\n", "16\n", "13\n", "12\n", "14\n", "11\n", "13\n", "13\n", "15\n", "15\n", "13\n", "15\n", "13\n", "16\n", "14\n", "14\n", "12\n", "10\n", "12\n", "14\n", "13\n", "15\n", "16\n", "18\n", "18\n", "13\n", "16\n", "14\n", "18\n", "18\n", "14\n", "14\n", "14\n", "18\n", "16\n", "18\n", "18\n", "14\n", "16\n", "21\n", "14\n", "18\n", "18\n", "18\n", "14\n", "18\n", "13\n", "13\n", "12\n", "15\n", "15\n", "13\n", "13\n", "14\n", "14\n", "12\n", "12\n", "14\n", "14\n", "18\n", "16\n", "13\n", "16\n", "13\n", "15\n", "12\n", "12\n", "14\n", "14\n", "16\n", "16\n", "13\n", "15\n", "12\n", "15\n", "14\n", "16\n", "18\n", "18\n", "16\n", "16\n", "10\n", "15\n", "15\n", "14\n", "18\n", "15\n", "18\n", "18\n", "18\n", "16\n", "16\n", "12\n", "18\n", "18\n", "12\n", "18\n", "16\n", "18\n", "15\n", "16\n", "16\n", "13\n", "15\n", "18\n", "13\n", "18\n", "18\n", "15\n", "13\n", "13\n", "16\n", "12\n", "11\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "11\n", "16\n", "17\n", "15\n", "13\n", "13\n", "13\n", "14\n", "16\n", "15\n", "13\n", "15\n", "12\n", "12\n", "16\n", "14\n", "14\n", "12\n", "12\n", "16\n", "14\n", "15\n", "11\n", "14\n", "13\n", "12\n", "12\n", "11\n", "11\n", "15\n", "14\n", "13\n", "13\n", "18\n", "16\n", "15\n", "13\n", "11\n", "15\n", "13\n", "15\n", "13\n", "13\n", "13\n", "13\n", "14\n", "18\n", "21\n", "14\n", "14\n", "13\n", "15\n", "12\n", "14\n", "16\n", "14\n", "16\n", "13\n", "14\n", "18\n", "14\n", "12\n", "13\n", "16\n", "18\n", "18\n", "14\n", "16\n", "15\n", "15\n", "14\n", "18\n", "14\n", "18\n", "18\n", "18\n", "14\n", "16\n", "14\n", "14\n", "14\n", "18\n", "18\n", "18\n", "16\n", "18\n", "18\n", "18\n", "14\n", "10\n", "16\n", "13\n", "11\n", "17\n", "12\n", "10\n", "18\n", "16\n", "14\n", "11\n", "13\n", "16\n", "15\n", "13\n", "14\n", "12\n", "14\n", "14\n", "18\n", "16\n", "14\n", "13\n", "17\n", "15\n", "12\n", "14\n", "14\n", "14\n", "14\n", "12\n", "18\n", "10\n", "14\n", "17\n", "12\n", "16\n", "14\n", "12\n", "10\n", "14\n", "16\n", "14\n", "18\n", "16\n", "17\n", "14\n", "18\n", "16\n", "14\n", "12\n", "10\n", "18\n", "13\n", "11\n", "18\n", "17\n", "9\n", "14\n", "12\n", "10\n", "13\n", "11\n", "9\n", "14\n", "12\n", "10\n", "14\n", "18\n", "18\n", "14\n", "12\n", "14\n", "16\n", "13\n", "11\n", "9\n", "18\n", "16\n", "14\n", "18\n", "21\n", "16\n", "18\n", "14\n", "18\n", "16\n", "14\n", "12\n", "17\n", "10\n", "13\n", "11\n", "17\n", "9\n", "18\n", "13\n", "11\n", "9\n", "13\n", "17\n", "11\n", "9\n", "14\n", "12\n", "15\n", "16\n", "12\n", "10\n", "14\n", "18\n", "10\n", "15\n", "12\n", "10\n", "14\n", "18\n", "18\n", "15\n", "18\n", "12\n", "10\n", "14\n", "19\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "18\n", "16\n", "16\n", "16\n", "19\n", "16\n", "16\n", "16\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "14\n", "17\n", "16\n", "14\n", "14\n", "14\n", "14\n", "16\n", "16\n", "16\n", "18\n", "16\n", "15\n", "16\n", "18\n", "18\n", "18\n", "14\n", "14\n", "18\n", "18\n", "18\n", "14\n", "18\n", "12\n", "14\n", "14\n", "16\n", "16\n", "18\n", "18\n", "16\n", "18\n", "16\n", "18\n", "15\n", "16\n", "18\n", "20\n", "20\n", "18\n", "14\n", "16\n", "14\n", "16\n", "16\n", "16\n", "16\n", "16\n", "20\n", "18\n", "20\n", "20\n", "18\n", "15\n", "15\n", "16\n", "15\n", "17\n", "16\n", "21\n", "13\n", "17\n", "13\n", "17\n", "17\n", "18\n", "12\n", "20\n", "18\n", "12\n", "12\n", "17\n", "12\n", "12\n", "14\n", "12\n", "18\n", "6\n", "18\n", "14\n", "12\n", "18\n", "14\n", "12\n", "17\n", "14\n", "14\n", "16\n", "14\n", "16\n", "20\n", "16\n", "14\n", "16\n", "10\n", "16\n", "15\n", "12\n", "14\n", "20\n", "16\n", "16\n", "16\n", "14\n", "20\n", "16\n", "16\n", "16\n", "13\n", "16\n", "18\n", "14\n", "18\n", "14\n", "18\n", "20\n", "18\n", "18\n", "15\n", "15\n", "18\n", "17\n", "16\n", "17\n", "13\n", "17\n", "17\n", "14\n", "14\n", "16\n", "14\n", "16\n", "18\n", "16\n", "12\n", "14\n", "16\n", "16\n", "12\n", "18\n", "14\n", "18\n", "18\n", "20\n", "14\n", "18\n", "16\n", "16\n", "16\n", "16\n", "20\n", "20\n", "18\n", "18\n", "18\n", "14\n", "14\n", "16\n", "20\n", "18\n", "20\n", "16\n", "20\n", "18\n", "18\n", "18\n", "14\n", "18\n", "15\n", "16\n", "15\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "12\n", "17\n", "17\n", "13\n", "18\n", "21\n", "17\n", "17\n", "17\n", "17\n", "17\n", "10\n", "16\n", "17\n", "17\n", "17\n", "20\n", "14\n", "16\n", "16\n", "16\n", "16\n", "13\n", "14\n", "13\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "18\n", "17\n", "15\n", "12\n", "17\n", "15\n", "17\n", "17\n", "17\n", "14\n", "18\n", "14\n", "15\n", "15\n", "16\n", "15\n", "13\n", "17\n", "13\n", "17\n", "12\n", "14\n", "14\n", "14\n", "16\n", "17\n", "16\n", "16\n", "14\n", "16\n", "17\n", "14\n", "14\n", "16\n", "18\n", "18\n", "15\n", "20\n", "16\n", "18\n", "20\n", "12\n", "14\n", "12\n", "18\n", "14\n", "18\n", "13\n", "14\n", "15\n", "12\n", "20\n", "20\n", "16\n", "16\n", "20\n", "18\n", "14\n", "16\n", "16\n", "16\n", "13\n", "14\n", "20\n", "20\n", "16\n", "16\n", "16\n", "18\n", "12\n", "20\n", "15\n", "15\n", "17\n", "15\n", "15\n", "17\n", "17\n", "17\n", "17\n", "13\n", "17\n", "17\n", "15\n", "17\n", "18\n", "17\n", "17\n", "17\n", "17\n", "14\n", "8\n", "14\n", "14\n", "14\n", "14\n", "16\n", "16\n", "17\n", "21\n", "16\n", "16\n", "16\n", "17\n", "16\n", "14\n", "14\n", "16\n", "16\n", "16\n", "16\n", "18\n", "16\n", "14\n", "15\n", "16\n", "18\n", "16\n", "18\n", "20\n", "18\n", "16\n", "18\n", "17\n", "13\n", "12\n", "15\n", "15\n", "17\n", "17\n", "17\n", "15\n", "17\n", "12\n", "14\n", "15\n", "14\n", "16\n", "16\n", "16\n", "14\n", "16\n", "13\n", "13\n", "15\n", "17\n", "17\n", "12\n", "17\n", "15\n", "16\n", "12\n", "16\n", "14\n", "18\n", "16\n", "14\n", "16\n", "16\n", "16\n", "17\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "14\n", "18\n", "18\n", "16\n", "18\n", "20\n", "14\n", "20\n", "16\n", "16\n", "18\n", "17\n", "18\n", "20\n", "20\n", "17\n", "16\n", "20\n", "16\n", "20\n", "18\n", "18\n", "16\n", "18\n", "16\n", "20\n", "18\n", "18\n", "20\n", "18\n", "18\n", "15\n", "15\n", "9\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "17\n", "20\n", "14\n", "14\n", "16\n", "16\n", "13\n", "13\n", "13\n", "14\n", "21\n", "13\n", "19\n", "17\n", "19\n", "17\n", "15\n", "17\n", "15\n", "15\n", "17\n", "17\n", "16\n", "17\n", "16\n", "17\n", "12\n", "14\n", "12\n", "18\n", "16\n", "18\n", "16\n", "18\n", "13\n", "17\n", "16\n", "14\n", "18\n", "16\n", "14\n", "11\n", "11\n", "19\n", "13\n", "17\n", "17\n", "13\n", "13\n", "12\n", "12\n", "12\n", "18\n", "18\n", "16\n", "14\n", "14\n", "16\n", "16\n", "15\n", "14\n", "13\n", "17\n", "15\n", "17\n", "16\n", "15\n", "17\n", "17\n", "15\n", "13\n", "13\n", "15\n", "15\n", "15\n", "17\n", "15\n", "15\n", "15\n", "15\n", "17\n", "17\n", "17\n", "15\n", "15\n", "17\n", "17\n", "17\n", "15\n", "16\n", "19\n", "16\n", "15\n", "14\n", "18\n", "18\n", "16\n", "14\n", "17\n", "13\n", "17\n", "14\n", "17\n", "17\n", "16\n", "14\n", "14\n", "16\n", "18\n", "16\n", "17\n", "15\n", "15\n", "15\n", "18\n", "18\n", "16\n", "18\n", "18\n", "18\n", "18\n", "18\n", "16\n", "16\n", "16\n", "18\n", "18\n", "18\n", "18\n", "16\n", "16\n", "18\n", "17\n", "21\n", "20\n", "17\n", "12\n", "12\n", "14\n", "12\n", "12\n", "16\n", "10\n", "14\n", "20\n", "18\n", "19\n", "14\n", "12\n", "18\n", "14\n", "18\n", "14\n", "20\n", "20\n", "16\n", "16\n", "17\n", "19\n", "12\n", "16\n", "14\n", "18\n", "14\n", "18\n", "14\n", "20\n", "16\n", "15\n", "20\n", "15\n", "16\n", "20\n", "15\n", "15\n", "17\n", "17\n", "17\n", "15\n", "17\n", "17\n", "17\n", "16\n", "17\n", "14\n", "14\n", "14\n", "16\n", "16\n", "16\n", "15\n", "14\n", "16\n", "16\n", "17\n", "16\n", "16\n", "18\n", "18\n", "16\n", "18\n", "18\n", "16\n", "20\n", "15\n", "19\n", "16\n", "19\n", "17\n", "14\n", "18\n", "18\n", "9\n", "14\n", "16\n", "13\n", "13\n", "15\n", "15\n", "16\n", "17\n", "17\n", "15\n", "17\n", "18\n", "16\n", "18\n", "16\n", "14\n", "14\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "14\n", "16\n", "14\n", "18\n", "18\n", "16\n", "16\n", "14\n", "14\n", "17\n", "13\n", "13\n", "17\n", "13\n", "17\n", "17\n", "16\n", "17\n", "21\n", "14\n", "14\n", "14\n", "14\n", "16\n", "14\n", "16\n", "16\n", "17\n", "16\n", "15\n", "12\n", "13\n", "15\n", "14\n", "16\n", "16\n", "16\n", "18\n", "18\n", "16\n", "16\n", "18\n", "15\n", "17\n", "15\n", "14\n", "16\n", "18\n", "16\n", "16\n", "14\n", "14\n", "14\n", "14\n", "16\n", "18\n", "14\n", "18\n", "18\n", "16\n", "18\n", "13\n", "15\n", "18\n", "12\n", "13\n", "15\n", "17\n", "15\n", "13\n", "15\n", "12\n", "14\n", "14\n", "14\n", "18\n", "13\n", "15\n", "17\n", "15\n", "13\n", "15\n", "13\n", "13\n", "13\n", "7\n", "9\n", "18\n", "13\n", "13\n", "15\n", "13\n", "16\n", "13\n", "15\n", "12\n", "14\n", "15\n", "16\n", "18\n", "18\n", "16\n", "18\n", "18\n", "15\n", "18\n", "18\n", "16\n", "14\n", "14\n", "13\n", "14\n", "18\n", "18\n", "16\n", "18\n", "15\n", "13\n", "15\n", "17\n", "16\n", "15\n", "13\n", "13\n", "18\n", "16\n", "14\n", "18\n", "15\n", "16\n", "13\n", "14\n", "15\n", "13\n", "15\n", "15\n", "13\n", "18\n", "18\n", "18\n", "15\n", "21\n", "14\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "20\n", "16\n", "14\n", "18\n", "20\n", "16\n", "18\n", "18\n", "16\n", "14\n", "16\n", "16\n", "16\n", "12\n", "20\n", "15\n", "16\n", "20\n", "18\n", "20\n", "18\n", "18\n", "18\n", "16\n", "14\n", "18\n", "16\n", "15\n", "20\n", "20\n", "18\n", "16\n", "14\n", "20\n", "18\n", "14\n", "18\n", "15\n", "15\n", "18\n", "15\n", "17\n", "17\n", "17\n", "15\n", "17\n", "9\n", "10\n", "17\n", "17\n", "17\n", "17\n", "16\n", "20\n", "20\n", "18\n", "18\n", "20\n", "12\n", "16\n", "14\n", "16\n", "16\n", "17\n", "18\n", "15\n", "15\n", "17\n", "15\n", "16\n", "13\n", "17\n", "19\n", "19\n", "17\n", "17\n", "18\n", "17\n", "16\n", "14\n", "14\n", "14\n", "18\n", "16\n", "16\n", "14\n", "18\n", "16\n", "18\n", "18\n", "17\n", "12\n", "13\n", "15\n", "17\n", "13\n", "15\n", "13\n", "19\n", "15\n", "16\n", "16\n", "14\n", "14\n", "14\n", "16\n", "14\n", "18\n", "16\n", "16\n", "14\n", "18\n", "18\n", "15\n", "21\n", "16\n", "16\n", "15\n", "17\n", "15\n", "17\n", "17\n", "17\n", "16\n", "13\n", "15\n", "18\n", "17\n", "15\n", "15\n", "15\n", "15\n", "15\n", "15\n", "17\n", "16\n", "15\n", "17\n", "15\n", "17\n", "17\n", "17\n", "15\n", "17\n", "15\n", "13\n", "17\n", "15\n", "16\n", "16\n", "18\n", "15\n", "14\n", "16\n", "16\n", "18\n", "16\n", "11\n", "13\n", "14\n", "16\n", "14\n", "15\n", "18\n", "17\n", "15\n", "17\n", "13\n", "14\n", "15\n", "16\n", "16\n", "14\n", "14\n", "17\n", "17\n", "16\n", "15\n", "15\n", "17\n", "15\n", "15\n", "13\n", "13\n", "15\n", "13\n", "15\n", "15\n", "15\n", "13\n", "15\n", "14\n", "13\n", "13\n", "15\n", "15\n", "17\n", "17\n", "15\n", "18\n", "17\n", "15\n", "10\n", "15\n", "15\n", "17\n", "17\n", "17\n", "11\n", "15\n", "13\n", "18\n", "15\n", "12\n", "15\n", "13\n", "16\n", "15\n", "14\n", "16\n", "15\n", "14\n", "14\n", "16\n", "16\n", "13\n", "14\n", "15\n", "13\n", "10\n", "14\n", "12\n", "18\n", "18\n", "14\n", "12\n", "18\n", "21\n", "18\n", "18\n", "18\n", "14\n", "18\n", "16\n", "18\n", "18\n", "16\n", "14\n", "13\n", "18\n", "12\n", "14\n", "12\n", "18\n", "17\n", "16\n", "14\n", "16\n", "18\n", "18\n", "12\n", "15\n", "13\n", "13\n", "15\n", "13\n", "12\n", "12\n", "14\n", "12\n", "14\n", "15\n", "13\n", "12\n", "18\n", "15\n", "13\n", "14\n", "18\n", "18\n", "12\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "18\n", "16\n", "16\n", "18\n", "16\n", "20\n", "18\n", "18\n", "14\n", "18\n", "14\n", "15\n", "18\n", "18\n", "14\n", "17\n", "14\n", "14\n", "20\n", "18\n", "14\n", "20\n", "16\n", "16\n", "20\n", "16\n", "13\n", "12\n", "18\n", "14\n", "18\n", "14\n", "20\n", "20\n", "16\n", "15\n", "16\n", "16\n", "12\n", "20\n", "16\n", "15\n", "15\n", "15\n", "15\n", "15\n", "17\n", "15\n", "12\n", "17\n", "17\n", "17\n", "17\n", "14\n", "14\n", "14\n", "14\n", "14\n", "16\n", "16\n", "18\n", "16\n", "16\n", "16\n", "16\n", "18\n", "18\n", "18\n", "16\n", "18\n", "16\n", "16\n", "18\n", "21\n", "20\n", "15\n", "15\n", "13\n", "19\n", "19\n", "17\n", "12\n", "14\n", "14\n", "14\n", "20\n", "18\n", "18\n", "16\n", "15\n", "15\n", "17\n", "10\n", "16\n", "18\n", "16\n", "18\n", "16\n", "20\n", "16\n", "13\n", "14\n", "15\n", "15\n", "17\n", "15\n", "17\n", "17\n", "15\n", "13\n", "16\n", "12\n", "14\n", "18\n", "16\n", "13\n", "14\n", "16\n", "14\n", "16\n", "14\n", "16\n", "17\n", "14\n", "14\n", "13\n", "16\n", "13\n", "15\n", "16\n", "15\n", "14\n", "16\n", "14\n", "17\n", "16\n", "18\n", "12\n", "16\n", "14\n", "16\n", "14\n", "17\n", "17\n", "13\n", "15\n", "18\n", "17\n", "15\n", "13\n", "15\n", "17\n", "16\n", "16\n", "14\n", "16\n", "14\n", "14\n", "18\n", "13\n", "14\n", "16\n", "17\n", "16\n", "15\n", "17\n", "15\n", "15\n", "13\n", "14\n", "11\n", "20\n", "14\n", "12\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "14\n", "19\n", "14\n", "14\n", "13\n", "16\n", "16\n", "18\n", "15\n", "15\n", "16\n", "14\n", "17\n", "17\n", "21\n", "15\n", "16\n", "16\n", "14\n", "15\n", "16\n", "8\n", "15\n", "16\n", "18\n", "16\n", "14\n", "17\n", "18\n", "16\n", "16\n", "13\n", "13\n", "13\n", "18\n", "18\n", "18\n", "15\n", "13\n", "18\n", "13\n", "12\n", "11\n", "13\n", "15\n", "17\n", "15\n", "13\n", "13\n", "13\n", "14\n", "16\n", "16\n", "13\n", "17\n", "13\n", "12\n", "12\n", "16\n", "14\n", "18\n", "14\n", "12\n", "16\n", "18\n", "14\n", "13\n", "16\n", "16\n", "11\n", "13\n", "11\n", "13\n", "12\n", "13\n", "18\n", "11\n", "11\n", "15\n", "12\n", "17\n", "17\n", "15\n", "17\n", "15\n", "13\n", "13\n", "18\n", "17\n", "16\n", "14\n", "16\n", "14\n", "16\n", "14\n", "16\n", "16\n", "16\n", "16\n", "15\n", "18\n", "13\n", "17\n", "12\n", "16\n", "16\n", "16\n", "18\n", "16\n", "16\n", "18\n", "16\n", "16\n", "15\n", "13\n", "13\n", "17\n", "12\n", "16\n", "16\n", "14\n", "8\n", "15\n", "13\n", "16\n", "13\n", "11\n", "13\n", "11\n", "15\n", "13\n", "11\n", "6\n", "14\n", "13\n", "13\n", "13\n", "18\n", "23\n", "19\n", "13\n", "12\n", "18\n", "18\n", "6\n", "14\n", "10\n", "18\n", "14\n", "12\n", "12\n", "16\n", "16\n", "16\n", "13\n", "10\n", "9\n", "11\n", "15\n", "14\n", "10\n", "18\n", "14\n", "16\n", "12\n", "16\n", "16\n", "18\n", "13\n", "9\n", "15\n", "14\n", "15\n", "17\n", "15\n", "20\n", "13\n", "16\n", "9\n", "17\n", "13\n", "9\n", "16\n", "14\n", "12\n", "12\n", "16\n", "20\n", "14\n", "18\n", "16\n", "13\n", "9\n", "17\n", "16\n", "14\n", "16\n", "11\n", "13\n", "16\n", "20\n", "15\n", "17\n", "17\n", "17\n", "13\n", "9\n", "17\n", "11\n", "15\n", "12\n", "16\n", "16\n", "14\n", "17\n", "16\n", "17\n", "17\n", "16\n", "16\n", "12\n", "16\n", "18\n", "16\n", "20\n", "16\n", "14\n", "17\n", "16\n", "18\n", "18\n", "14\n", "14\n", "18\n", "14\n", "18\n", "20\n", "18\n", "14\n", "12\n", "10\n", "16\n", "14\n", "12\n", "14\n", "16\n", "16\n", "14\n", "20\n", "16\n", "14\n", "14\n", "18\n", "18\n", "16\n", "16\n", "18\n", "18\n", "16\n", "15\n", "15\n", "16\n", "23\n", "13\n", "15\n", "15\n", "14\n", "15\n", "15\n", "15\n", "13\n", "13\n", "17\n", "17\n", "20\n", "14\n", "12\n", "14\n", "14\n", "14\n", "12\n", "16\n", "15\n", "15\n", "19\n", "19\n", "16\n", "17\n", "12\n", "12\n", "14\n", "12\n", "12\n", "18\n", "16\n", "16\n", "16\n", "18\n", "18\n", "14\n", "16\n", "18\n", "16\n", "18\n", "11\n", "13\n", "11\n", "11\n", "19\n", "12\n", "12\n", "16\n", "14\n", "14\n", "12\n", "14\n", "14\n", "18\n", "18\n", "16\n", "17\n", "12\n", "17\n", "18\n", "19\n", "19\n", "13\n", "13\n", "18\n", "14\n", "18\n", "18\n", "14\n", "17\n", "17\n", "16\n", "16\n", "16\n", "18\n", "16\n", "18\n", "16\n", "18\n", "14\n", "16\n", "19\n", "11\n", "14\n", "13\n", "18\n", "12\n", "18\n", "14\n", "18\n", "12\n", "12\n", "13\n", "15\n", "15\n", "14\n", "16\n", "13\n", "13\n", "15\n", "13\n", "13\n", "12\n", "15\n", "15\n", "15\n", "15\n", "15\n", "16\n", "15\n", "13\n", "15\n", "17\n", "14\n", "15\n", "13\n", "15\n", "13\n", "13\n", "11\n", "20\n", "23\n", "15\n", "11\n", "12\n", "11\n", "13\n", "11\n", "15\n", "13\n", "15\n", "15\n", "15\n", "18\n", "13\n", "14\n", "15\n", "13\n", "14\n", "16\n", "15\n", "14\n", "15\n", "14\n", "16\n", "16\n", "14\n", "15\n", "14\n", "14\n", "12\n", "14\n", "12\n", "12\n", "10\n", "16\n", "14\n", "14\n", "20\n", "11\n", "11\n", "9\n", "13\n", "16\n", "14\n", "12\n", "14\n", "12\n", "14\n", "12\n", "18\n", "10\n", "14\n", "15\n", "12\n", "10\n", "14\n", "12\n", "14\n", "12\n", "15\n", "15\n", "18\n", "15\n", "13\n", "14\n", "14\n", "12\n", "13\n", "13\n", "14\n", "13\n", "15\n", "13\n", "20\n", "15\n", "13\n", "15\n", "13\n", "13\n", "15\n", "15\n", "16\n", "15\n", "15\n", "15\n", "17\n", "14\n", "15\n", "15\n", "13\n", "15\n", "13\n", "12\n", "15\n", "13\n", "15\n", "13\n", "15\n", "20\n", "15\n", "15\n", "15\n", "15\n", "14\n", "13\n", "15\n", "13\n", "11\n", "11\n", "11\n", "20\n", "16\n", "16\n", "16\n", "16\n", "16\n", "16\n", "14\n", "16\n", "16\n", "14\n", "16\n", "18\n", "23\n", "12\n", "14\n", "14\n", "13\n", "13\n", "12\n", "16\n", "16\n", "14\n", "16\n", "15\n", "18\n", "12\n", "14\n", "15\n", "14\n", "16\n", "14\n", "14\n", "16\n", "14\n", "13\n", "16\n", "14\n", "20\n", "14\n", "12\n", "12\n", "14\n", "14\n", "14\n", "14\n", "12\n", "16\n", "12\n", "14\n", "20\n", "12\n", "14\n", "12\n", "16\n", "14\n", "14\n", "12\n", "12\n", "14\n", "18\n", "16\n", "16\n", "11\n", "15\n", "13\n", "10\n", "12\n", "14\n", "12\n", "12\n", "12\n", "12\n", "11\n", "16\n", "16\n", "14\n", "12\n", "13\n", "15\n", "12\n", "9\n", "13\n", "14\n", "12\n", "14\n", "12\n", "18\n", "20\n", "16\n", "14\n", "11\n", "13\n", "10\n", "12\n", "12\n", "11\n", "13\n", "13\n", "15\n", "18\n", "12\n", "10\n", "10\n", "12\n", "12\n", "14\n", "16\n", "14\n", "12\n", "16\n", "14\n", "18\n", "16\n", "14\n", "11\n", "12\n", "13\n", "15\n", "13\n", "14\n", "14\n", "14\n", "15\n", "16\n", "16\n", "14\n", "16\n", "16\n", "16\n", "14\n", "14\n", "16\n", "11\n", "15\n", "10\n", "20\n", "23\n", "16\n", "14\n", "11\n", "13\n", "15\n", "15\n", "12\n", "14\n", "12\n", "12\n", "11\n", "16\n", "15\n", "13\n", "13\n", "15\n", "14\n", "12\n", "12\n", "14\n", "14\n", "13\n", "14\n", "12\n", "14\n", "12\n", "11\n", "14\n", "13\n", "13\n", "12\n", "10\n", "14\n", "16\n", "11\n", "15\n", "20\n", "13\n", "10\n", "14\n", "12\n", "11\n", "10\n", "13\n", "16\n", "13\n", "12\n", "18\n", "12\n", "12\n", "12\n", "12\n", "14\n", "18\n", "16\n", "13\n", "16\n", "12\n", "14\n", "18\n", "18\n", "16\n", "14\n", "12\n", "16\n", "14\n", "13\n", "14\n", "11\n", "15\n", "13\n", "12\n", "18\n", "10\n", "12\n", "14\n", "12\n", "10\n", "12\n", "12\n", "14\n", "15\n", "12\n", "14\n", "18\n", "15\n", "12\n", "14\n", "14\n", "16\n", "13\n", "11\n", "15\n", "13\n", "12\n", "10\n", "20\n", "11\n", "13\n", "11\n", "14\n", "13\n", "15\n", "13\n", "12\n", "10\n", "12\n", "10\n", "20\n", "16\n", "12\n", "14\n", "14\n", "12\n", "16\n", "14\n", "11\n", "13\n", "16\n", "12\n", "20\n", "23\n", "12\n", "14\n", "16\n", "12\n", "14\n", "14\n", "16\n", "13\n", "15\n", "11\n", "13\n", "14\n", "20\n", "12\n", "10\n", "13\n", "11\n", "15\n", "13\n", "12\n", "14\n", "16\n", "16\n", "18\n", "20\n", "16\n", "18\n", "16\n", "18\n", "16\n", "12\n", "14\n", "12\n", "14\n", "16\n", "14\n", "15\n", "16\n", "16\n", "14\n", "10\n", "12\n", "10\n", "10\n", "15\n", "16\n", "12\n", "10\n", "14\n", "13\n", "14\n", "12\n", "14\n", "14\n", "14\n", "12\n", "12\n", "12\n", "14\n", "14\n", "12\n", "15\n", "16\n", "14\n", "14\n", "14\n", "12\n", "16\n", "16\n", "18\n", "16\n", "12\n", "14\n", "15\n", "10\n", "14\n", "12\n", "15\n", "14\n", "15\n", "17\n", "14\n", "14\n", "14\n", "16\n", "17\n", "15\n", "17\n", "16\n", "14\n", "18\n", "16\n", "18\n", "16\n", "12\n", "14\n", "11\n", "17\n", "13\n", "14\n", "16\n", "18\n", "16\n", "13\n", "15\n", "18\n", "14\n", "16\n", "11\n", "19\n", "13\n", "10\n", "15\n", "15\n", "15\n", "12\n", "12\n", "14\n", "14\n", "16\n", "12\n", "17\n", "14\n", "23\n", "14\n", "14\n", "12\n", "11\n", "12\n", "12\n", "16\n", "14\n", "14\n", "16\n", "11\n", "17\n", "15\n", "13\n", "14\n", "11\n", "13\n", "12\n", "13\n", "12\n", "12\n", "16\n", "15\n", "15\n", "14\n", "16\n", "15\n", "14\n", "12\n", "14\n", "11\n", "15\n", "16\n", "13\n", "12\n", "13\n", "18\n", "10\n", "15\n", "15\n", "11\n", "13\n", "14\n", "14\n", "12\n", "14\n", "14\n", "14\n", "16\n", "14\n", "14\n", "14\n", "10\n", "13\n", "12\n", "13\n", "15\n", "12\n", "12\n", "14\n", "18\n", "13\n", "15\n", "13\n", "13\n", "12\n", "16\n", "12\n", "14\n", "14\n", "15\n", "13\n", "16\n", "11\n", "14\n", "12\n", "14\n", "15\n", "11\n", "14\n", "13\n", "12\n", "13\n", "12\n", "15\n", "14\n", "16\n", "16\n", "15\n", "14\n", "15\n", "14\n", "16\n", "15\n", "14\n", "14\n", "17\n", "12\n", "14\n", "10\n", "14\n", "12\n", "14\n", "12\n", "12\n", "10\n", "16\n", "14\n", "15\n", "14\n", "11\n", "9\n", "11\n", "11\n", "9\n", "13\n", "15\n", "13\n", "12\n", "12\n", "14\n", "17\n", "23\n", "12\n", "10\n", "14\n", "14\n", "12\n", "15\n", "10\n", "12\n", "12\n", "10\n", "14\n", "17\n", "12\n", "14\n", "15\n", "15\n", "15\n", "15\n", "15\n", "11\n", "12\n", "13\n", "15\n", "13\n", "17\n", "14\n", "14\n", "14\n", "14\n", "12\n", "14\n", "14\n", "12\n", "13\n", "12\n", "11\n", "18\n", "12\n", "11\n", "11\n", "11\n", "10\n", "16\n", "10\n", "15\n", "16\n", "14\n", "13\n", "14\n", "14\n", "13\n", "13\n", "13\n", "14\n", "12\n", "12\n", "12\n", "16\n", "15\n", "15\n", "14\n", "13\n", "15\n", "14\n", "12\n", "13\n", "12\n", "13\n", "15\n", "20\n", "13\n", "13\n", "12\n", "14\n", "14\n", "14\n", "12\n", "13\n", "20\n", "15\n", "14\n", "13\n", "15\n", "14\n", "14\n", "13\n", "12\n", "13\n", "13\n", "13\n", "12\n", "14\n", "13\n", "12\n", "15\n", "14\n", "13\n", "14\n", "13\n", "12\n", "15\n", "13\n", "12\n", "14\n", "14\n", "13\n", "12\n", "13\n", "12\n", "13\n", "13\n", "23\n", "13\n", "12\n", "13\n", "13\n", "13\n", "15\n", "14\n", "14\n", "13\n", "13\n", "12\n", "13\n", "12\n", "13\n", "11\n", "15\n", "19\n", "12\n", "11\n", "12\n", "10\n", "14\n", "13\n", "11\n", "15\n", "12\n", "10\n", "14\n", "12\n", "15\n", "12\n", "10\n", "14\n", "11\n", "9\n", "13\n", "12\n", "10\n", "14\n", "11\n", "9\n", "16\n", "19\n", "13\n", "12\n", "10\n", "14\n", "11\n", "9\n", "13\n", "12\n", "10\n", "14\n", "14\n", "17\n", "11\n", "9\n", "13\n", "11\n", "9\n", "13\n", "11\n", "9\n", "14\n", "13\n", "15\n", "14\n", "15\n", "17\n", "17\n", "15\n", "15\n", "17\n", "13\n", "12\n", "17\n", "14\n", "14\n", "16\n", "16\n", "12\n", "16\n", "13\n", "13\n", "15\n", "14\n", "11\n", "15\n", "17\n", "17\n", "20\n", "16\n", "13\n", "15\n", "15\n", "13\n", "16\n", "11\n", "15\n", "13\n", "17\n", "10\n", "18\n", "12\n", "11\n", "13\n", "15\n", "16\n", "16\n", "15\n", "18\n", "15\n", "12\n", "15\n", "14\n", "13\n", "12\n", "14\n", "14\n", "13\n", "18\n", "12\n", "14\n", "13\n", "14\n", "13\n", "13\n", "13\n", "13\n", "9\n", "18\n", "13\n", "13\n", "16\n", "15\n", "16\n", "16\n", "15\n", "17\n", "15\n", "14\n", "14\n", "12\n", "13\n", "12\n", "20\n", "13\n", "12\n", "12\n", "12\n", "12\n", "12\n", "12\n", "15\n", "13\n", "11\n", "15\n", "18\n", "14\n", "13\n", "15\n", "13\n", "14\n", "16\n", "12\n", "13\n", "15\n", "14\n", "14\n", "20\n", "13\n", "13\n", "12\n", "12\n", "16\n", "13\n", "12\n", "13\n", "13\n", "12\n", "13\n", "12\n", "12\n", "15\n", "10\n", "14\n", "14\n", "9\n", "13\n", "10\n", "14\n", "9\n", "13\n", "9\n", "13\n", "15\n", "12\n", "9\n", "13\n", "9\n", "13\n", "9\n", "13\n", "15\n", "15\n", "15\n", "13\n", "16\n", "15\n", "14\n", "14\n", "12\n", "13\n", "13\n", "11\n", "17\n", "15\n", "19\n", "16\n", "13\n", "10\n", "12\n", "11\n", "13\n", "10\n", "12\n", "10\n", "12\n", "10\n", "16\n", "19\n", "12\n", "10\n", "12\n", "10\n", "12\n", "9\n", "13\n", "11\n", "11\n", "13\n", "14\n", "15\n", "13\n", "13\n", "15\n", "10\n", "12\n", "14\n", "11\n", "13\n", "10\n", "12\n", "14\n", "19\n", "13\n", "12\n", "11\n", "9\n", "8\n", "13\n", "13\n", "11\n", "12\n", "13\n", "13\n", "17\n", "13\n", "15\n", "15\n", "16\n", "15\n", "15\n", "15\n", "14\n", "19\n", "17\n", "17\n", "13\n", "15\n", "13\n", "15\n", "15\n", "15\n", "13\n", "14\n", "15\n", "15\n", "17\n", "17\n", "15\n", "17\n", "18\n", "18\n", "17\n", "18\n", "16\n", "16\n", "19\n", "17\n", "17\n", "15\n", "18\n", "16\n", "20\n", "18\n", "16\n", "12\n", "20\n", "18\n", "16\n", "20\n", "17\n", "18\n", "16\n", "19\n", "19\n", "15\n", "18\n", "19\n", "19\n", "17\n", "15\n", "17\n", "17\n", "18\n", "16\n", "20\n", "16\n", "12\n", "20\n", "18\n", "19\n", "19\n", "19\n", "19\n", "17\n", "16\n", "18\n", "20\n", "12\n", "20\n", "18\n", "13\n", "15\n", "19\n", "19\n", "17\n", "15\n", "17\n", "15\n", "11\n", "10\n", "15\n", "19\n", "17\n", "13\n", "15\n", "15\n", "15\n", "15\n", "17\n", "19\n", "14\n", "17\n", "17\n", "17\n", "16\n", "15\n", "16\n", "15\n", "15\n", "13\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "17\n", "12\n", "15\n", "15\n", "17\n", "15\n", "15\n", "17\n", "18\n", "17\n", "18\n", "18\n", "16\n", "19\n", "19\n", "16\n", "19\n", "19\n", "15\n", "18\n", "15\n", "20\n", "20\n", "16\n", "18\n", "16\n", "17\n", "19\n", "19\n", "19\n", "19\n", "15\n", "18\n", "15\n", "14\n", "17\n", "20\n", "18\n", "17\n", "18\n", "19\n", "19\n", "19\n", "20\n", "16\n", "16\n", "18\n", "18\n", "18\n", "18\n", "17\n", "18\n", "13\n", "17\n", "15\n", "15\n", "14\n", "15\n", "19\n", "19\n", "15\n", "15\n", "17\n", "17\n", "13\n", "13\n", "15\n", "14\n", "15\n", "15\n", "15\n", "15\n", "13\n", "15\n", "19\n", "17\n", "15\n", "17\n", "16\n", "15\n", "15\n", "15\n", "15\n", "20\n", "14\n", "12\n", "19\n", "20\n", "16\n", "13\n", "14\n", "20\n", "20\n", "20\n", "20\n", "20\n", "20\n", "18\n", "16\n", "17\n", "20\n", "14\n", "20\n", "20\n", "14\n", "12\n", "16\n", "20\n", "20\n", "20\n", "20\n", "17\n", "14\n", "18\n", "16\n", "16\n", "14\n", "18\n", "18\n", "20\n", "20\n", "14\n", "12\n", "10\n", "17\n", "16\n", "13\n", "11\n", "15\n", "15\n", "13\n", "17\n", "20\n", "15\n", "18\n", "17\n", "17\n", "19\n", "15\n", "17\n", "20\n", "20\n", "19\n", "20\n", "20\n", "16\n", "15\n", "13\n", "15\n", "17\n", "19\n", "17\n", "15\n", "13\n", "11\n", "13\n", "14\n", "15\n", "11\n", "13\n", "15\n", "19\n", "15\n", "17\n", "13\n", "11\n", "15\n", "18\n", "20\n", "16\n", "14\n", "12\n", "20\n", "17\n", "18\n", "16\n", "19\n", "13\n", "16\n", "11\n", "15\n", "20\n", "20\n", "19\n", "19\n", "19\n", "16\n", "14\n", "20\n", "18\n", "18\n", "15\n", "13\n", "17\n", "13\n", "11\n", "15\n", "17\n", "19\n", "15\n", "9\n", "13\n", "16\n", "13\n", "13\n", "11\n", "17\n", "15\n", "20\n", "18\n", "18\n", "19\n", "20\n", "16\n", "16\n", "20\n", "18\n", "16\n", "18\n", "18\n", "20\n", "20\n", "16\n", "17\n", "14\n", "20\n", "20\n", "18\n", "20\n", "16\n", "20\n", "18\n", "16\n", "18\n", "18\n", "14\n", "19\n", "20\n", "16\n", "20\n", "18\n", "20\n", "16\n", "20\n", "20\n", "20\n", "16\n", "18\n", "17\n", "14\n", "16\n", "16\n", "14\n", "16\n", "14\n", "12\n", "18\n", "12\n", "18\n", "18\n", "17\n", "19\n", "18\n", "20\n", "18\n", "20\n", "16\n", "16\n", "12\n", "18\n", "18\n", "20\n", "16\n", "15\n", "22\n", "12\n", "14\n", "14\n", "14\n", "16\n", "12\n", "12\n", "14\n", "14\n", "12\n", "17\n", "16\n", "12\n", "10\n", "10\n", "14\n", "12\n", "10\n", "14\n", "20\n", "14\n", "20\n", "17\n", "20\n", "16\n", "12\n", "16\n", "18\n", "14\n", "18\n", "14\n", "20\n", "20\n", "16\n", "15\n", "16\n", "12\n", "13\n", "14\n", "20\n", "16\n", "20\n", "18\n", "14\n", "18\n", "14\n", "20\n", "17\n", "16\n", "18\n", "12\n", "16\n", "14\n", "12\n", "18\n", "14\n", "22\n", "20\n", "20\n", "15\n", "18\n", "16\n", "16\n", "16\n", "22\n", "18\n", "14\n", "20\n", "16\n", "20\n", "16\n", "16\n", "17\n", "22\n", "22\n", "18\n", "18\n", "14\n", "22\n", "18\n", "16\n", "14\n", "14\n", "18\n", "17\n", "16\n", "12\n", "16\n", "12\n", "18\n", "18\n", "14\n", "14\n", "14\n", "10\n", "18\n", "17\n", "14\n", "20\n", "20\n", "16\n", "20\n", "16\n", "20\n", "12\n", "20\n", "16\n", "16\n", "17\n", "19\n", "18\n", "16\n", "16\n", "13\n", "18\n", "16\n", "16\n", "18\n", "12\n", "12\n", "10\n", "14\n", "10\n", "14\n", "15\n", "18\n", "10\n", "12\n", "10\n", "14\n", "14\n", "14\n", "8\n", "12\n", "16\n", "13\n", "14\n", "16\n", "16\n", "14\n", "16\n", "14\n", "12\n", "18\n", "12\n", "16\n", "13\n", "14\n", "16\n", "10\n", "10\n", "12\n", "12\n", "12\n", "12\n", "16\n", "16\n", "11\n", "14\n", "14\n", "16\n", "14\n", "14\n", "12\n", "16\n", "14\n", "14\n", "14\n", "13\n", "14\n", "18\n", "16\n", "14\n", "14\n", "16\n", "12\n", "14\n", "12\n", "14\n", "11\n", "12\n", "16\n", "16\n", "16\n", "14\n", "16\n", "18\n", "16\n", "16\n", "14\n", "13\n", "16\n", "12\n", "14\n", "18\n", "12\n", "12\n", "16\n", "16\n", "14\n", "14\n", "11\n", "13\n", "14\n", "14\n", "16\n", "12\n", "16\n", "16\n", "14\n", "16\n", "16\n", "14\n", "11\n", "16\n", "14\n", "16\n", "14\n", "12\n", "14\n", "14\n", "12\n", "16\n", "18\n", "9\n", "16\n", "14\n", "16\n", "18\n", "16\n", "14\n", "16\n", "16\n", "14\n", "16\n", "13\n", "14\n", "12\n", "14\n", "12\n", "16\n", "14\n", "16\n", "14\n", "14\n", "14\n", "11\n", "16\n", "14\n", "16\n", "12\n", "10\n", "14\n", "10\n", "14\n", "16\n", "12\n", "10\n", "12\n", "14\n", "12\n", "16\n", "14\n", "10\n", "12\n", "12\n", "12\n", "16\n", "8\n", "14\n", "14\n", "10\n", "12\n", "10\n", "10\n", "14\n", "12\n", "12\n", "14\n", "8\n", "14\n", "12\n", "10\n", "14\n", "16\n", "14\n", "14\n", "12\n", "14\n", "12\n", "12\n", "14\n", "16\n", "18\n", "16\n", "14\n", "14\n", "12\n", "8\n", "10\n", "8\n", "12\n", "12\n", "14\n", "12\n", "14\n", "10\n", "14\n", "12\n", "14\n", "12\n", "12\n", "9\n", "12\n", "10\n", "16\n", "14\n", "16\n", "18\n", "10\n", "8\n", "12\n", "12\n", "14\n", "11\n", "12\n", "14\n", "12\n", "12\n", "10\n", "16\n", "14\n", "8\n", "10\n", "12\n", "10\n", "10\n", "14\n", "12\n", "14\n", "12\n", "12\n", "14\n", "10\n", "12\n", "10\n", "14\n", "11\n", "15\n", "13\n", "13\n", "13\n", "13\n", "11\n", "18\n", "11\n", "13\n", "12\n", "11\n", "13\n", "13\n", "15\n", "13\n", "11\n", "15\n", "11\n", "16\n", "11\n", "14\n", "15\n", "11\n", "13\n", "15\n", "13\n", "15\n", "15\n", "13\n", "11\n", "18\n", "12\n", "15\n", "13\n", "15\n", "11\n", "15\n", "15\n", "15\n", "13\n", "13\n", "13\n", "14\n", "18\n", "13\n", "13\n", "15\n", "15\n", "11\n", "11\n", "15\n", "15\n", "15\n", "12\n", "13\n", "16\n", "13\n", "13\n", "13\n", "17\n", "15\n", "17\n", "17\n", "15\n", "12\n", "15\n", "9\n", "12\n", "18\n", "9\n", "11\n", "17\n", "13\n", "13\n", "11\n" ] } ], "source": [ "for i in data['database_CMs']:\n", " print(len(i))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "\n", "[[36.8581052 5.49459062 5.49462923 5.49450051 5.49031317]\n", " [ 5.49459062 0.5 0.56071951 0.56071661 0.56064041]\n", " [ 5.49462923 0.56071951 0.5 0.56071757 0.56064092]\n", " [ 5.49450051 0.56071661 0.56071757 0.5 0.56063788]\n", " [ 5.49031317 0.56064041 0.56064092 0.56063788 0.5 ]]\n" ] } ], "source": [ "print(len(data['database_CMs'][0]))\n", "print(type(data['database_CMs'][0]))\n", "print(data['database_CMs'][0])\n" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11\n", - "[[73.51669472 39.89346607 20.19982446 16.04487707 10.27026835 11.1247558\n", - " 13.08487435 13.46303654 16.70308164 3.9209431 3.04845942]\n", - " [39.89346607 36.8581052 23.89456558 17.57071642 9.77392109 10.24375287\n", - " 11.53190416 11.22350837 14.10330898 5.42419492 2.15576668]\n", - " [20.19982446 23.89456558 36.8581052 32.57985863 15.6429449 14.05734657\n", - " 18.07048048 17.59641364 24.93636015 2.72808861 2.71408264]\n", - " [16.04487707 17.57071642 32.57985863 53.3587074 30.00047569 24.37806572\n", - " 23.29779993 17.3654536 17.48814708 2.74791573 2.07663615]\n", - " [10.27026835 9.77392109 15.6429449 30.00047569 36.8581052 40.31567507\n", - " 34.11142903 17.13485255 13.22139878 1.52037843 1.57648656]\n", - " [11.1247558 10.24375287 14.05734657 24.37806572 40.31567507 73.51669472\n", - " 28.78617413 16.01621835 12.28210341 1.68374229 1.60283862]\n", - " [13.08487435 11.53190416 18.07048048 23.29779993 34.11142903 28.78617413\n", - " 73.51669472 40.74495903 21.22931616 1.68892143 2.4664953 ]\n", - " [13.46303654 11.22350837 17.59641364 17.3654536 17.13485255 16.01621835\n", - " 40.74495903 53.3587074 32.63935146 1.52809319 3.46280972]\n", - " [16.70308164 14.10330898 24.93636015 17.48814708 13.22139878 12.28210341\n", - " 21.22931616 32.63935146 36.8581052 1.71364539 5.53930144]\n", - " [ 3.9209431 5.42419492 2.72808861 2.74791573 1.52037843 1.68374229\n", - " 1.68892143 1.52809319 1.71364539 0.5 0.25866314]\n", - " [ 3.04845942 2.15576668 2.71408264 2.07663615 1.57648656 1.60283862\n", - " 2.4664953 3.46280972 5.53930144 0.25866314 0.5 ]]\n" + "72\n", + "[[73.51669472 5.6730171 5.01906995 ... 1.45172691 1.43586937\n", + " 8.23652758]\n", + " [ 5.6730171 36.8581052 23.22387337 ... 0.88151033 1.10082282\n", + " 0.7819375 ]\n", + " [ 5.01906995 23.22387337 36.8581052 ... 0.81139936 0.95646112\n", + " 0.68863654]\n", + " ...\n", + " [ 1.45172691 0.88151033 0.81139936 ... 0.5 0.5423828\n", + " 0.19827322]\n", + " [ 1.43586937 1.10082282 0.95646112 ... 0.5423828 0.5\n", + " 0.19694058]\n", + " [ 8.23652758 0.7819375 0.68863654 ... 0.19827322 0.19694058\n", + " 0.5 ]]\n" ] } ], "source": [ - "print(len(data['target_CMs'][0]))\n", - "print(data['target_CMs'][0])" + "print(len(data['target_CMs'][2]))\n", + "print(data['target_CMs'][2])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define a function that has two parameters (Target,Molecule) and finds a placement of the molecule that is optimal w.r.t. error^2. Later we will pick the moluecule that is best w.r.t. error^2 / length (molecule). " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/gurobi.py b/gurobi.py index 66413a0..55a6df3 100644 --- a/gurobi.py +++ b/gurobi.py @@ -1,70 +1,73 @@ # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import numpy as np data = np.load("data.npz", allow_pickle=True) import gurobipy as gp from gurobipy import GRB #This function places the molecule M optimally within the target T. def OptimalPlacement(M,T): try: #Dimemsnion of the Molecule and Target m = len(M) n = len(T) print("Sizes of Matrices: ", m, n ) # Create a new model Z = gp.Model("QP") #Create Variables x = Z.addVars(m, n, name='X', vtype=GRB.BINARY) Z.addConstrs(x.sum(i, '*') == 1 for i in range(m)) Z.addConstrs(x.sum('*',j) <= 1 for j in range(n)) - - # Set objective by building a long expression - expr = x[1,1] * x[2,2] - expr.add(x[1,2]*x[2,3]) + expr = 2*x[1,1] * x[1,2] + expr.clear() for i in range(m): - for l in range(n): - expr.add(x[i,l] * (T[l,l] - M[i,i])) + for j in range(m): + for k in range(n): + for l in range(n): + expr.add(x[i,k] * x[j,l], (T[k,l]-M[i,j])**2) Z.setObjective(expr, GRB.MAXIMIZE) #print(Z) # Optimize model Z.optimize() for v in Z.getVars(): print('%s %g' % (v.varName, v.x)) print('Obj: %g' % Z.objVal) - Z.printAttr('x') + Z.printAttr('X') + # print(Z.getObjective() ) + + except gp.GurobiError as e: print('Error code ' + str(e.errno) + ': ' + str(e)) except AttributeError: print('Encountered an attribute error') -OptimalPlacement(data['database_CMs'][0],data['target_CMs'][0]) \ No newline at end of file +OptimalPlacement(data['database_CMs'][7],data['target_CMs'][2]) \ No newline at end of file