diff --git a/Untitled.ipynb b/Untitled.ipynb index ad98cb8..e7ae302 100644 --- a/Untitled.ipynb +++ b/Untitled.ipynb @@ -1,7305 +1,7328 @@ { "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", "data = np.load(\"data.npz\", allow_pickle=True)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['target_labels', 'target_CMs', 'database_labels', 'database_CMs']" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.files" ] }, { "cell_type": "code", - "execution_count": 4, + "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" + "15\n", + "13\n", + "13\n", + "16\n", + "12\n", + "11\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "13\n", - "13\n", - "16\n", - "12\n", - "11\n", "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" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "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", + "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": 27, + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "72\n" + "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, + "metadata": {}, + "outputs": [ { - "data": { - "text/plain": [ - "array([0.85818234, 2.72895384, 2.28464985, 1.94048599, 1.49415516,\n", - " 1.41355135, 5.47808531, 1.8502615 , 1.56989642, 1.76850553,\n", - " 2.81855982, 1.74241267, 1.37481274, 2.19828103, 1.16337321,\n", - " 1.37251889, 1.02152459, 0.97806403, 0.93490301, 0.80637255,\n", - " 0.70122531, 0.96510609, 0.95781823, 0.74293018, 0.62272041,\n", - " 0.65151111, 0.58960769, 0.75333139, 0.43145473, 0.34464524,\n", - " 0.22113563, 0.20943423, 0.20338041, 0.20095266, 0.5 ,\n", - " 0.56891735, 0.25107704, 0.26037466, 0.23372254, 0.28552189,\n", - " 0.4392965 , 0.38329927, 0.25620714, 0.23811073, 0.1967777 ,\n", - " 0.19824238, 0.37669829, 0.26758376, 0.45349592, 0.17681551,\n", - " 0.24790207, 0.249142 , 0.15659645, 0.15587907, 0.16701097,\n", - " 0.13330325, 0.12080549, 0.10975704, 0.18953193, 0.14254608,\n", - " 0.15285228, 0.18795454, 0.14208697, 0.15031591, 0.0951266 ,\n", - " 0.11222302, 0.10140643, 0.09122929, 0.09320497, 0.11511454,\n", - " 0.13536308, 0.11719581])" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" + "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" + ] } ], "source": [ - "print(len(data['target_CMs'][2]))\n", - "data['target_CMs'][2][34]" + "print(len(data['target_CMs'][0]))\n", + "print(data['target_CMs'][0])" ] }, { "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.7.6" + "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/gurobi.py b/gurobi.py index c235c16..66413a0 100644 --- a/gurobi.py +++ b/gurobi.py @@ -1,54 +1,70 @@ # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ -# - -# Copyright 2021, Gurobi Optimization, LLC - -# This example formulates and solves the following simple MIP model: -# maximize -# x + y + 2 z -# subject to -# x + 2 y + 3 z <= 4 -# x + y >= 1 -# x, y, z binary +import numpy as np +data = np.load("data.npz", allow_pickle=True) import gurobipy as gp from gurobipy import GRB -try: - - # Create a new model - m = gp.Model("mip1") - - # Create variables - x = m.addVar(vtype=GRB.BINARY, name="x") - y = m.addVar(vtype=GRB.BINARY, name="y") - z = m.addVar(vtype=GRB.BINARY, name="z") - - # Set objective - m.setObjective(x + y + 2 * z, GRB.MAXIMIZE) - - # Add constraint: x + 2 y + 3 z <= 4 - m.addConstr(x + 2 * y + 3 * z <= 4, "c0") - - # Add constraint: x + y >= 1 - m.addConstr(x + y >= 1, "c1") - - # Optimize model - m.optimize() - - for v in m.getVars(): - print('%s %g' % (v.varName, v.x)) - - print('Obj: %g' % m.objVal) - -except gp.GurobiError as e: - print('Error code ' + str(e.errno) + ': ' + str(e)) - -except AttributeError: - print('Encountered an attribute error') \ No newline at end of file +#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]) + + + for i in range(m): + for l in range(n): + expr.add(x[i,l] * (T[l,l] - M[i,i])) + + + 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') + + 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