{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "(ch3)=\n", "# Gradient Descent: Part I" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One cannot overstate the importance of 'Gradient descent' in the field of machine learning. It's an optimization technique that lies in the heart of machine learning algorithms ranging from regression to deep learning. This chapter aims to provide intuition behind the gradient descent algorithm and its variant. Similar to previous chapters, I work through examples and code to build a concrete understanding of the concept. \n", "\n", "## Finding Minimum Using Brute Force\n", "Assume a two dimensional function $f(X)=x_0^2 + x_1^2$. Now let's assume we want to find the value of $X=(x_0, x_1)$ at which f(X) is minimum. The natural instinct would be to plot the function for some random range of X and observe the behavior of $f(X)$. Using plotly, below code snippet renders the above function. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-05-19T23:26:32.026408Z", "start_time": "2020-05-19T23:26:31.206213Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x0x1fx
0-50.0-49.04901.0
1-49.0-50.04901.0
2-50.0-48.04804.0
3-48.0-50.04804.0
\n", "
" ], "text/plain": [ " x0 x1 fx\n", "0 -50.0 -49.0 4901.0\n", "1 -49.0 -50.0 4901.0\n", "2 -50.0 -48.0 4804.0\n", "3 -48.0 -50.0 4804.0" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "linkText": "Export to plot.ly", "plotlyServerURL": "https://plot.ly", "showLink": false }, "data": [ { "mode": "markers", "opacity": 0.5, "type": "scatter3d", "x": [ -50, -49, -50, -48, -50, -47, -50, -46, -50, -45, -50, -44, -50, -43, -50, -42, -50, -41, -50, -40, -50, -39, -50, -38, -50, -37, -50, -36, -50, -35, -50, -34, -50, -33, -50, -32, -50, -31, -50, -30, -50, -29, -50, -28, -50, -27, -50, -26, -50, -25, -50, -24, -50, -23, -50, -22, -50, -21, -50, -20, -50, -19, -50, -18, -50, -17, -50, -16, -50, -15, -50, -14, -50, -13, -50, -12, -50, -11, -50, -10, -50, -9, -50, -8, -50, -7, -50, -6, -50, -5, -50, -4, -50, -3, -50, -2, -50, -1, -50, 0, -50, 1, -50, 2, -50, 3, -50, 4, -50, 5, -50, 6, -50, 7, -50, 8, -50, 9, -50, 10, -50, 11, -50, 12, -50, 13, -50, 14, -50, 15, -50, 16, -50, 17, -50, 18, -50, 19, -50, 20, -50, 21, -50, 22, -50, 23, -50, 24, -50, 25, -50, 26, -50, 27, -50, 28, -50, 29, -50, 30, -50, 31, -50, 32, -50, 33, -50, 34, -50, 35, -50, 36, -50, 37, -50, 38, -50, 39, -50, 40, -50, 41, -50, 42, -50, 43, -50, 44, -50, 45, -50, 46, -50, 47, -50, 48, -50, 49, -49, -48, -49, -47, -49, -46, -49, -45, -49, -44, -49, -43, -49, -42, -49, -41, -49, -40, -49, -39, -49, -38, -49, -37, -49, -36, -49, -35, -49, -34, -49, -33, -49, -32, -49, -31, -49, -30, -49, -29, -49, -28, -49, -27, -49, -26, -49, -25, -49, -24, -49, -23, -49, -22, -49, -21, -49, -20, -49, -19, -49, -18, -49, -17, -49, -16, -49, -15, -49, -14, -49, -13, -49, -12, -49, -11, -49, -10, -49, -9, -49, -8, -49, -7, -49, -6, -49, -5, -49, -4, -49, -3, -49, -2, -49, -1, -49, 0, -49, 1, -49, 2, -49, 3, -49, 4, -49, 5, -49, 6, -49, 7, -49, 8, -49, 9, -49, 10, -49, 11, -49, 12, -49, 13, -49, 14, -49, 15, -49, 16, -49, 17, -49, 18, -49, 19, -49, 20, -49, 21, -49, 22, -49, 23, -49, 24, -49, 25, -49, 26, -49, 27, -49, 28, -49, 29, -49, 30, -49, 31, -49, 32, -49, 33, -49, 34, -49, 35, -49, 36, -49, 37, -49, 38, -49, 39, -49, 40, -49, 41, -49, 42, -49, 43, -49, 44, -49, 45, -49, 46, -49, 47, -49, 48, -49, 49, -48, -47, -48, -46, -48, -45, -48, -44, -48, -43, -48, -42, -48, -41, -48, -40, -48, -39, -48, -38, -48, -37, -48, -36, -48, -35, -48, -34, -48, -33, -48, -32, -48, -31, -48, -30, -48, -29, -48, -28, -48, -27, -48, -26, -48, -25, -48, -24, -48, -23, -48, -22, -48, -21, -48, -20, -48, -19, -48, -18, -48, -17, -48, -16, -48, -15, -48, -14, -48, -13, -48, -12, -48, -11, -48, -10, -48, -9, -48, -8, -48, -7, -48, -6, -48, -5, -48, -4, -48, -3, -48, -2, -48, -1, -48, 0, -48, 1, -48, 2, -48, 3, -48, 4, -48, 5, -48, 6, -48, 7, -48, 8, -48, 9, -48, 10, -48, 11, -48, 12, -48, 13, -48, 14, -48, 15, -48, 16, -48, 17, -48, 18, -48, 19, -48, 20, -48, 21, -48, 22, -48, 23, -48, 24, -48, 25, -48, 26, -48, 27, -48, 28, -48, 29, -48, 30, -48, 31, -48, 32, -48, 33, -48, 34, -48, 35, -48, 36, -48, 37, -48, 38, -48, 39, -48, 40, -48, 41, -48, 42, -48, 43, -48, 44, -48, 45, -48, 46, -48, 47, -48, 48, -48, 49, -47, -46, -47, -45, -47, -44, -47, -43, -47, -42, -47, -41, -47, -40, -47, -39, -47, -38, -47, -37, -47, -36, -47, -35, -47, -34, -47, -33, -47, -32, -47, -31, -47, -30, -47, -29, -47, -28, -47, -27, -47, -26, -47, -25, -47, -24, -47, -23, -47, -22, -47, -21, -47, -20, -47, -19, -47, -18, -47, -17, -47, -16, -47, -15, -47, -14, -47, -13, -47, -12, -47, -11, -47, -10, -47, -9, -47, -8, -47, -7, -47, -6, -47, -5, -47, -4, -47, -3, -47, -2, -47, -1, -47, 0, -47, 1, -47, 2, -47, 3, -47, 4, -47, 5, -47, 6, -47, 7, -47, 8, -47, 9, -47, 10, -47, 11, -47, 12, -47, 13, -47, 14, -47, 15, -47, 16, -47, 17, -47, 18, -47, 19, -47, 20, -47, 21, -47, 22, -47, 23, -47, 24, -47, 25, -47, 26, -47, 27, -47, 28, -47, 29, -47, 30, -47, 31, -47, 32, -47, 33, -47, 34, -47, 35, -47, 36, -47, 37, -47, 38, -47, 39, -47, 40, -47, 41, -47, 42, -47, 43, -47, 44, -47, 45, -47, 46, -47, 47, -47, 48, -47, 49, -46, -45, -46, -44, -46, -43, -46, -42, -46, -41, -46, -40, -46, -39, -46, -38, -46, -37, -46, -36, -46, -35, -46, -34, -46, -33, -46, -32, -46, -31, -46, -30, -46, -29, -46, -28, -46, -27, -46, -26, -46, -25, -46, -24, -46, -23, -46, -22, -46, -21, -46, -20, -46, -19, -46, -18, -46, -17, -46, -16, -46, -15, -46, -14, -46, -13, -46, -12, -46, -11, -46, -10, -46, -9, -46, -8, -46, -7, -46, -6, -46, -5, -46, -4, -46, -3, -46, -2, -46, -1, -46, 0, -46, 1, -46, 2, -46, 3, -46, 4, -46, 5, -46, 6, -46, 7, -46, 8, -46, 9, -46, 10, -46, 11, -46, 12, -46, 13, -46, 14, -46, 15, -46, 16, -46, 17, -46, 18, -46, 19, -46, 20, -46, 21, -46, 22, -46, 23, -46, 24, -46, 25, -46, 26, -46, 27, -46, 28, -46, 29, -46, 30, -46, 31, -46, 32, -46, 33, -46, 34, -46, 35, -46, 36, -46, 37, -46, 38, -46, 39, -46, 40, -46, 41, -46, 42, -46, 43, -46, 44, -46, 45, -46, 46, -46, 47, -46, 48, -46, 49, -45, -44, -45, -43, -45, -42, -45, -41, -45, -40, -45, -39, -45, -38, -45, -37, -45, -36, -45, -35, -45, -34, -45, -33, -45, -32, -45, -31, -45, -30, -45, -29, -45, -28, -45, -27, -45, -26, -45, -25, -45, -24, -45, -23, -45, -22, -45, -21, -45, -20, -45, -19, -45, -18, -45, -17, -45, -16, -45, -15, -45, -14, -45, -13, -45, -12, -45, -11, -45, -10, -45, -9, -45, -8, -45, -7, -45, -6, -45, -5, -45, -4, -45, -3, -45, -2, -45, -1, -45, 0, -45, 1, -45, 2, -45, 3, -45, 4, -45, 5, -45, 6, -45, 7, -45, 8, -45, 9, -45, 10, -45, 11, -45, 12, -45, 13, -45, 14, -45, 15, -45, 16, -45, 17, -45, 18, -45, 19, -45, 20, -45, 21, -45, 22, -45, 23, -45, 24, -45, 25, -45, 26, -45, 27, -45, 28, -45, 29, -45, 30, -45, 31, -45, 32, -45, 33, -45, 34, -45, 35, -45, 36, -45, 37, -45, 38, -45, 39, -45, 40, -45, 41, -45, 42, -45, 43, -45, 44, -45, 45, -45, 46, -45, 47, -45, 48, -45, 49, -44, -43, -44, -42, -44, -41, -44, -40, -44, -39, -44, -38, -44, -37, -44, -36, -44, -35, -44, -34, -44, -33, -44, -32, -44, -31, -44, -30, -44, -29, -44, -28, -44, -27, -44, -26, -44, -25, -44, -24, -44, -23, -44, -22, -44, -21, -44, -20, -44, -19, -44, -18, -44, -17, -44, -16, -44, -15, -44, -14, -44, -13, -44, -12, -44, -11, -44, -10, -44, -9, -44, -8, -44, -7, -44, -6, -44, -5, -44, -4, -44, -3, -44, -2, -44, -1, -44, 0, -44, 1, -44, 2, -44, 3, -44, 4, -44, 5, -44, 6, -44, 7, -44, 8, -44, 9, -44, 10, -44, 11, -44, 12, -44, 13, -44, 14, -44, 15, -44, 16, -44, 17, -44, 18, -44, 19, -44, 20, -44, 21, -44, 22, -44, 23, -44, 24, -44, 25, -44, 26, -44, 27, -44, 28, -44, 29, -44, 30, -44, 31, -44, 32, -44, 33, -44, 34, -44, 35, -44, 36, -44, 37, -44, 38, -44, 39, -44, 40, -44, 41, -44, 42, -44, 43, -44, 44, -44, 45, -44, 46, -44, 47, -44, 48, -44, 49, -43, -42, -43, -41, -43, -40, -43, -39, -43, -38, -43, -37, -43, -36, -43, -35, -43, -34, -43, -33, -43, -32, -43, -31, -43, -30, -43, -29, -43, -28, -43, -27, -43, -26, -43, -25, -43, -24, -43, -23, -43, -22, -43, -21, -43, -20, -43, -19, -43, -18, -43, -17, -43, -16, -43, -15, -43, -14, -43, -13, -43, -12, -43, -11, -43, -10, -43, -9, -43, -8, -43, -7, -43, -6, -43, -5, -43, -4, -43, -3, -43, -2, -43, -1, -43, 0, -43, 1, -43, 2, -43, 3, -43, 4, -43, 5, -43, 6, -43, 7, -43, 8, -43, 9, -43, 10, -43, 11, -43, 12, -43, 13, -43, 14, -43, 15, -43, 16, -43, 17, -43, 18, -43, 19, -43, 20, -43, 21, -43, 22, -43, 23, -43, 24, -43, 25, -43, 26, -43, 27, -43, 28, -43, 29, -43, 30, -43, 31, -43, 32, -43, 33, -43, 34, -43, 35, -43, 36, -43, 37, -43, 38, -43, 39, -43, 40, -43, 41, -43, 42, -43, 43, -43, 44, -43, 45, -43, 46, -43, 47, -43, 48, -43, 49, -42, -41, -42, -40, -42, -39, -42, -38, -42, -37, -42, -36, -42, -35, -42, -34, -42, -33, -42, -32, -42, -31, -42, -30, -42, -29, -42, -28, -42, -27, -42, -26, -42, -25, -42, -24, -42, -23, -42, -22, -42, -21, -42, -20, -42, -19, -42, -18, -42, -17, -42, -16, -42, -15, -42, -14, -42, -13, -42, -12, -42, -11, -42, -10, -42, -9, -42, -8, -42, -7, -42, -6, -42, -5, -42, -4, -42, -3, -42, -2, -42, -1, -42, 0, -42, 1, -42, 2, -42, 3, -42, 4, -42, 5, -42, 6, -42, 7, -42, 8, -42, 9, -42, 10, -42, 11, -42, 12, -42, 13, -42, 14, -42, 15, -42, 16, -42, 17, -42, 18, -42, 19, -42, 20, -42, 21, -42, 22, -42, 23, -42, 24, -42, 25, -42, 26, -42, 27, -42, 28, -42, 29, -42, 30, -42, 31, -42, 32, -42, 33, -42, 34, -42, 35, -42, 36, -42, 37, -42, 38, -42, 39, -42, 40, -42, 41, -42, 42, -42, 43, -42, 44, -42, 45, -42, 46, -42, 47, -42, 48, -42, 49, -41, -40, -41, -39, -41, -38, -41, -37, -41, -36, -41, -35, -41, -34, -41, -33, -41, -32, -41, -31, -41, -30, -41, -29, -41, -28, -41, -27, -41, -26, -41, -25, -41, -24, -41, -23, -41, -22, -41, -21, -41, -20, -41, -19, -41, -18, -41, -17, -41, -16, -41, -15, -41, -14, -41, -13, -41, -12, -41, -11, -41, -10, -41, -9, -41, -8, -41, -7, -41, -6, -41, -5, -41, -4, -41, -3, -41, -2, -41, -1, -41, 0, -41, 1, -41, 2, -41, 3, -41, 4, -41, 5, -41, 6, -41, 7, -41, 8, -41, 9, -41, 10, -41, 11, -41, 12, -41, 13, -41, 14, -41, 15, -41, 16, -41, 17, -41, 18, -41, 19, -41, 20, -41, 21, -41, 22, -41, 23, -41, 24, -41, 25, -41, 26, -41, 27, -41, 28, -41, 29, -41, 30, -41, 31, -41, 32, -41, 33, -41, 34, -41, 35, -41, 36, -41, 37, -41, 38, -41, 39, -41, 40, -41, 41, -41, 42, -41, 43, -41, 44, -41, 45, -41, 46, -41, 47, -41, 48, -41, 49, -40, -39, -40, -38, -40, -37, -40, -36, -40, -35, -40, -34, -40, -33, -40, -32, -40, -31, -40, -30, -40, -29, -40, -28, -40, -27, -40, -26, -40, -25, -40, -24, -40, -23, -40, -22, -40, -21, -40, -20, -40, -19, -40, -18, -40, -17, -40, -16, -40, -15, -40, -14, -40, -13, -40, -12, -40, -11, -40, -10, -40, -9, -40, -8, -40, -7, -40, -6, -40, -5, -40, -4, -40, -3, -40, -2, -40, -1, -40, 0, -40, 1, -40, 2, -40, 3, -40, 4, -40, 5, -40, 6, -40, 7, -40, 8, -40, 9, -40, 10, -40, 11, -40, 12, -40, 13, -40, 14, -40, 15, -40, 16, -40, 17, -40, 18, -40, 19, -40, 20, -40, 21, -40, 22, -40, 23, -40, 24, -40, 25, -40, 26, -40, 27, -40, 28, -40, 29, -40, 30, -40, 31, -40, 32, -40, 33, -40, 34, -40, 35, -40, 36, -40, 37, -40, 38, -40, 39, -40, 40, -40, 41, -40, 42, -40, 43, -40, 44, -40, 45, -40, 46, -40, 47, -40, 48, -40, 49, -39, -38, -39, -37, -39, -36, -39, -35, -39, -34, -39, -33, -39, -32, -39, -31, -39, -30, -39, -29, -39, -28, -39, -27, -39, -26, -39, -25, -39, -24, -39, -23, -39, -22, -39, -21, -39, -20, -39, -19, -39, -18, -39, -17, -39, -16, -39, -15, -39, -14, -39, -13, -39, -12, -39, -11, -39, -10, -39, -9, -39, -8, -39, -7, -39, -6, -39, -5, -39, -4, -39, -3, -39, -2, -39, -1, -39, 0, -39, 1, -39, 2, -39, 3, -39, 4, -39, 5, -39, 6, -39, 7, -39, 8, -39, 9, -39, 10, -39, 11, -39, 12, -39, 13, -39, 14, -39, 15, -39, 16, -39, 17, -39, 18, -39, 19, -39, 20, -39, 21, -39, 22, -39, 23, -39, 24, -39, 25, -39, 26, -39, 27, -39, 28, -39, 29, -39, 30, -39, 31, -39, 32, -39, 33, -39, 34, -39, 35, -39, 36, -39, 37, -39, 38, -39, 39, -39, 40, -39, 41, -39, 42, -39, 43, -39, 44, -39, 45, -39, 46, -39, 47, -39, 48, -39, 49, -38, -37, -38, -36, -38, -35, -38, -34, -38, -33, -38, -32, -38, -31, -38, -30, -38, -29, -38, -28, -38, -27, -38, -26, -38, -25, -38, -24, -38, -23, -38, -22, -38, -21, -38, -20, -38, -19, -38, -18, -38, -17, -38, -16, -38, -15, -38, -14, -38, -13, -38, -12, -38, -11, -38, -10, -38, -9, -38, -8, -38, -7, -38, -6, -38, -5, -38, -4, -38, -3, -38, -2, -38, -1, -38, 0, -38, 1, -38, 2, -38, 3, -38, 4, -38, 5, -38, 6, -38, 7, -38, 8, -38, 9, -38, 10, -38, 11, -38, 12, -38, 13, -38, 14, -38, 15, -38, 16, -38, 17, -38, 18, -38, 19, -38, 20, -38, 21, -38, 22, -38, 23, -38, 24, -38, 25, -38, 26, -38, 27, -38, 28, -38, 29, -38, 30, -38, 31, -38, 32, -38, 33, -38, 34, -38, 35, -38, 36, -38, 37, -38, 38, -38, 39, -38, 40, -38, 41, -38, 42, -38, 43, -38, 44, -38, 45, -38, 46, -38, 47, -38, 48, -38, 49, -37, -36, -37, -35, -37, -34, -37, -33, -37, -32, -37, -31, -37, -30, -37, -29, -37, -28, -37, -27, -37, -26, -37, -25, -37, -24, -37, -23, -37, -22, -37, -21, -37, -20, -37, -19, -37, -18, -37, -17, -37, -16, -37, -15, -37, -14, -37, -13, -37, -12, -37, -11, -37, -10, -37, -9, -37, -8, -37, -7, -37, -6, -37, -5, -37, -4, -37, -3, -37, -2, -37, -1, -37, 0, -37, 1, -37, 2, -37, 3, -37, 4, -37, 5, -37, 6, -37, 7, -37, 8, -37, 9, -37, 10, -37, 11, -37, 12, -37, 13, -37, 14, -37, 15, -37, 16, -37, 17, -37, 18, -37, 19, -37, 20, -37, 21, -37, 22, -37, 23, -37, 24, -37, 25, -37, 26, -37, 27, -37, 28, -37, 29, -37, 30, -37, 31, -37, 32, -37, 33, -37, 34, -37, 35, -37, 36, -37, 37, -37, 38, -37, 39, -37, 40, -37, 41, -37, 42, -37, 43, -37, 44, -37, 45, -37, 46, -37, 47, -37, 48, -37, 49, -36, -35, -36, -34, -36, -33, -36, -32, -36, -31, -36, -30, -36, -29, -36, -28, -36, -27, -36, -26, -36, -25, -36, -24, -36, -23, -36, -22, -36, -21, -36, -20, -36, -19, -36, -18, -36, -17, -36, -16, -36, -15, -36, -14, -36, -13, -36, -12, -36, -11, -36, -10, -36, -9, -36, -8, -36, -7, -36, -6, -36, -5, -36, -4, -36, -3, -36, -2, -36, -1, -36, 0, -36, 1, -36, 2, -36, 3, -36, 4, -36, 5, -36, 6, -36, 7, -36, 8, -36, 9, -36, 10, -36, 11, -36, 12, -36, 13, -36, 14, -36, 15, -36, 16, -36, 17, -36, 18, -36, 19, -36, 20, -36, 21, -36, 22, -36, 23, -36, 24, -36, 25, -36, 26, -36, 27, -36, 28, -36, 29, -36, 30, -36, 31, -36, 32, -36, 33, -36, 34, -36, 35, -36, 36, -36, 37, -36, 38, -36, 39, -36, 40, -36, 41, -36, 42, -36, 43, -36, 44, -36, 45, -36, 46, -36, 47, -36, 48, -36, 49, -35, -34, -35, -33, -35, -32, -35, -31, -35, -30, -35, -29, -35, -28, -35, -27, -35, -26, -35, -25, -35, -24, -35, -23, -35, -22, -35, -21, -35, -20, -35, -19, -35, -18, -35, -17, -35, -16, -35, -15, -35, -14, -35, -13, -35, -12, -35, -11, -35, -10, -35, -9, -35, -8, -35, -7, -35, -6, -35, -5, -35, -4, -35, -3, -35, -2, -35, -1, -35, 0, -35, 1, -35, 2, -35, 3, -35, 4, -35, 5, -35, 6, -35, 7, -35, 8, -35, 9, -35, 10, -35, 11, -35, 12, -35, 13, -35, 14, -35, 15, -35, 16, -35, 17, -35, 18, -35, 19, -35, 20, -35, 21, -35, 22, -35, 23, -35, 24, -35, 25, -35, 26, -35, 27, -35, 28, -35, 29, -35, 30, -35, 31, -35, 32, -35, 33, -35, 34, -35, 35, -35, 36, -35, 37, -35, 38, -35, 39, -35, 40, -35, 41, -35, 42, -35, 43, -35, 44, -35, 45, -35, 46, -35, 47, -35, 48, -35, 49, -34, -33, -34, -32, -34, -31, -34, -30, -34, -29, -34, -28, -34, -27, -34, -26, -34, -25, -34, -24, -34, -23, -34, -22, -34, -21, -34, -20, -34, -19, -34, -18, -34, -17, -34, -16, -34, -15, -34, -14, -34, -13, -34, -12, -34, -11, -34, -10, -34, -9, -34, -8, -34, -7, -34, -6, -34, -5, -34, -4, -34, -3, -34, -2, -34, -1, -34, 0, -34, 1, -34, 2, -34, 3, -34, 4, -34, 5, -34, 6, -34, 7, -34, 8, -34, 9, -34, 10, -34, 11, -34, 12, -34, 13, -34, 14, -34, 15, -34, 16, -34, 17, -34, 18, -34, 19, -34, 20, -34, 21, -34, 22, -34, 23, -34, 24, -34, 25, -34, 26, -34, 27, -34, 28, -34, 29, -34, 30, -34, 31, -34, 32, -34, 33, -34, 34, -34, 35, -34, 36, -34, 37, -34, 38, -34, 39, -34, 40, -34, 41, -34, 42, -34, 43, -34, 44, -34, 45, -34, 46, -34, 47, -34, 48, -34, 49, -33, -32, -33, -31, -33, -30, -33, -29, -33, -28, -33, -27, -33, -26, -33, -25, -33, -24, -33, -23, -33, -22, -33, -21, -33, -20, -33, -19, -33, -18, -33, -17, -33, -16, -33, -15, -33, -14, -33, -13, -33, -12, -33, -11, -33, -10, -33, -9, -33, -8, -33, -7, -33, -6, -33, -5, -33, -4, -33, -3, -33, -2, -33, -1, -33, 0, -33, 1, -33, 2, -33, 3, -33, 4, -33, 5, -33, 6, -33, 7, -33, 8, -33, 9, -33, 10, -33, 11, -33, 12, -33, 13, -33, 14, -33, 15, -33, 16, -33, 17, -33, 18, -33, 19, -33, 20, -33, 21, -33, 22, -33, 23, -33, 24, -33, 25, -33, 26, -33, 27, -33, 28, -33, 29, -33, 30, -33, 31, -33, 32, -33, 33, -33, 34, -33, 35, -33, 36, -33, 37, -33, 38, -33, 39, -33, 40, -33, 41, -33, 42, -33, 43, -33, 44, -33, 45, -33, 46, -33, 47, -33, 48, -33, 49, -32, -31, -32, -30, -32, -29, -32, -28, -32, -27, -32, -26, -32, -25, -32, -24, -32, -23, -32, -22, -32, -21, -32, -20, -32, -19, -32, -18, -32, -17, -32, -16, -32, -15, -32, -14, -32, -13, -32, -12, -32, -11, -32, -10, -32, -9, -32, -8, -32, -7, -32, -6, -32, -5, -32, -4, -32, -3, -32, -2, -32, -1, -32, 0, -32, 1, -32, 2, -32, 3, -32, 4, -32, 5, -32, 6, -32, 7, -32, 8, -32, 9, -32, 10, -32, 11, -32, 12, -32, 13, -32, 14, -32, 15, -32, 16, -32, 17, -32, 18, -32, 19, -32, 20, -32, 21, -32, 22, -32, 23, -32, 24, -32, 25, -32, 26, -32, 27, -32, 28, -32, 29, -32, 30, -32, 31, -32, 32, -32, 33, -32, 34, -32, 35, -32, 36, -32, 37, -32, 38, -32, 39, -32, 40, -32, 41, -32, 42, -32, 43, -32, 44, -32, 45, -32, 46, -32, 47, -32, 48, -32, 49, -31, -30, -31, -29, -31, -28, -31, -27, -31, -26, -31, -25, -31, -24, -31, -23, -31, -22, -31, -21, -31, -20, -31, -19, -31, -18, -31, -17, -31, -16, -31, -15, -31, -14, -31, -13, -31, -12, -31, -11, -31, -10, -31, -9, -31, -8, -31, -7, -31, -6, -31, -5, -31, -4, -31, -3, -31, -2, -31, -1, -31, 0, -31, 1, -31, 2, -31, 3, -31, 4, -31, 5, -31, 6, -31, 7, -31, 8, -31, 9, -31, 10, -31, 11, -31, 12, -31, 13, -31, 14, -31, 15, -31, 16, -31, 17, -31, 18, -31, 19, -31, 20, -31, 21, -31, 22, -31, 23, -31, 24, -31, 25, -31, 26, -31, 27, -31, 28, -31, 29, -31, 30, -31, 31, -31, 32, -31, 33, -31, 34, -31, 35, -31, 36, -31, 37, -31, 38, -31, 39, -31, 40, -31, 41, -31, 42, -31, 43, -31, 44, -31, 45, -31, 46, -31, 47, -31, 48, -31, 49, -30, -29, -30, -28, -30, -27, -30, -26, -30, -25, -30, -24, -30, -23, -30, -22, -30, -21, -30, -20, -30, -19, -30, -18, -30, -17, -30, -16, -30, -15, -30, -14, -30, -13, -30, -12, -30, -11, -30, -10, -30, -9, -30, -8, -30, -7, -30, -6, -30, -5, -30, -4, -30, -3, -30, -2, -30, -1, -30, 0, -30, 1, -30, 2, -30, 3, -30, 4, -30, 5, -30, 6, -30, 7, -30, 8, -30, 9, -30, 10, -30, 11, -30, 12, -30, 13, -30, 14, -30, 15, -30, 16, -30, 17, -30, 18, -30, 19, -30, 20, -30, 21, -30, 22, -30, 23, -30, 24, -30, 25, -30, 26, -30, 27, -30, 28, -30, 29, -30, 30, -30, 31, -30, 32, -30, 33, -30, 34, -30, 35, -30, 36, -30, 37, -30, 38, -30, 39, -30, 40, -30, 41, -30, 42, -30, 43, -30, 44, -30, 45, -30, 46, -30, 47, -30, 48, -30, 49, -29, -28, -29, -27, -29, -26, -29, -25, -29, -24, -29, -23, -29, -22, -29, -21, -29, -20, -29, -19, -29, -18, -29, -17, -29, -16, -29, -15, -29, -14, -29, -13, -29, -12, -29, -11, -29, -10, -29, -9, -29, -8, -29, -7, -29, -6, -29, -5, -29, -4, -29, -3, -29, -2, -29, -1, -29, 0, -29, 1, -29, 2, -29, 3, -29, 4, -29, 5, -29, 6, -29, 7, -29, 8, -29, 9, -29, 10, -29, 11, -29, 12, -29, 13, -29, 14, -29, 15, -29, 16, -29, 17, -29, 18, -29, 19, -29, 20, -29, 21, -29, 22, -29, 23, -29, 24, -29, 25, -29, 26, -29, 27, -29, 28, -29, 29, -29, 30, -29, 31, -29, 32, -29, 33, -29, 34, -29, 35, -29, 36, -29, 37, -29, 38, -29, 39, -29, 40, -29, 41, -29, 42, -29, 43, -29, 44, -29, 45, -29, 46, -29, 47, -29, 48, -29, 49, -28, -27, -28, -26, -28, -25, -28, -24, -28, -23, -28, -22, -28, -21, -28, -20, -28, -19, -28, -18, -28, -17, -28, -16, -28, -15, -28, -14, -28, -13, -28, -12, -28, -11, -28, -10, -28, -9, -28, -8, -28, -7, -28, -6, -28, -5, -28, -4, -28, -3, -28, -2, -28, -1, -28, 0, -28, 1, -28, 2, -28, 3, -28, 4, -28, 5, -28, 6, -28, 7, -28, 8, -28, 9, -28, 10, -28, 11, -28, 12, -28, 13, -28, 14, -28, 15, -28, 16, -28, 17, -28, 18, -28, 19, -28, 20, -28, 21, -28, 22, -28, 23, -28, 24, -28, 25, -28, 26, -28, 27, -28, 28, -28, 29, -28, 30, -28, 31, -28, 32, -28, 33, -28, 34, -28, 35, -28, 36, -28, 37, -28, 38, -28, 39, -28, 40, -28, 41, -28, 42, -28, 43, -28, 44, -28, 45, -28, 46, -28, 47, -28, 48, -28, 49, -27, -26, -27, -25, -27, -24, -27, -23, -27, -22, -27, -21, -27, -20, -27, -19, -27, -18, -27, -17, -27, -16, -27, -15, -27, -14, -27, -13, -27, -12, -27, -11, -27, -10, -27, -9, -27, -8, -27, -7, -27, -6, -27, -5, -27, -4, -27, -3, -27, -2, -27, -1, -27, 0, -27, 1, -27, 2, -27, 3, -27, 4, -27, 5, -27, 6, -27, 7, -27, 8, -27, 9, -27, 10, -27, 11, -27, 12, -27, 13, -27, 14, -27, 15, -27, 16, -27, 17, -27, 18, -27, 19, -27, 20, -27, 21, -27, 22, -27, 23, -27, 24, -27, 25, -27, 26, -27, 27, -27, 28, -27, 29, -27, 30, -27, 31, -27, 32, -27, 33, -27, 34, -27, 35, -27, 36, -27, 37, -27, 38, -27, 39, -27, 40, -27, 41, -27, 42, -27, 43, -27, 44, -27, 45, -27, 46, -27, 47, -27, 48, -27, 49, -26, -25, -26, -24, -26, -23, -26, -22, -26, -21, -26, -20, -26, -19, -26, -18, -26, -17, -26, -16, -26, -15, -26, -14, -26, -13, -26, -12, -26, -11, -26, -10, -26, -9, -26, -8, -26, -7, -26, -6, -26, -5, -26, -4, -26, -3, -26, -2, -26, -1, -26, 0, -26, 1, -26, 2, -26, 3, -26, 4, -26, 5, -26, 6, -26, 7, -26, 8, -26, 9, -26, 10, -26, 11, -26, 12, -26, 13, -26, 14, -26, 15, -26, 16, -26, 17, -26, 18, -26, 19, -26, 20, -26, 21, -26, 22, -26, 23, -26, 24, -26, 25, -26, 26, -26, 27, -26, 28, -26, 29, -26, 30, -26, 31, -26, 32, -26, 33, -26, 34, -26, 35, -26, 36, -26, 37, -26, 38, -26, 39, -26, 40, -26, 41, -26, 42, -26, 43, -26, 44, -26, 45, -26, 46, -26, 47, -26, 48, -26, 49, -25, -24, -25, -23, -25, -22, -25, -21, -25, -20, -25, -19, -25, -18, -25, -17, -25, -16, -25, -15, -25, -14, -25, -13, -25, -12, -25, -11, -25, -10, -25, -9, -25, -8, -25, -7, -25, -6, -25, -5, -25, -4, -25, -3, -25, -2, -25, -1, -25, 0, -25, 1, -25, 2, -25, 3, -25, 4, -25, 5, -25, 6, -25, 7, -25, 8, -25, 9, -25, 10, -25, 11, -25, 12, -25, 13, -25, 14, -25, 15, -25, 16, -25, 17, -25, 18, -25, 19, -25, 20, -25, 21, -25, 22, -25, 23, -25, 24, -25, 25, -25, 26, -25, 27, -25, 28, -25, 29, -25, 30, -25, 31, -25, 32, -25, 33, -25, 34, -25, 35, -25, 36, -25, 37, -25, 38, -25, 39, -25, 40, -25, 41, -25, 42, -25, 43, -25, 44, -25, 45, -25, 46, -25, 47, -25, 48, -25, 49, -24, -23, -24, -22, -24, -21, -24, -20, -24, -19, -24, -18, -24, -17, -24, -16, -24, -15, -24, -14, -24, -13, -24, -12, -24, -11, -24, -10, -24, -9, -24, -8, -24, -7, -24, -6, -24, -5, -24, -4, -24, -3, -24, -2, -24, -1, -24, 0, -24, 1, -24, 2, -24, 3, -24, 4, -24, 5, -24, 6, -24, 7, -24, 8, -24, 9, -24, 10, -24, 11, -24, 12, -24, 13, -24, 14, -24, 15, -24, 16, -24, 17, -24, 18, -24, 19, -24, 20, -24, 21, -24, 22, -24, 23, -24, 24, -24, 25, -24, 26, -24, 27, -24, 28, -24, 29, -24, 30, -24, 31, -24, 32, -24, 33, -24, 34, -24, 35, -24, 36, -24, 37, -24, 38, -24, 39, -24, 40, -24, 41, -24, 42, -24, 43, -24, 44, -24, 45, -24, 46, -24, 47, -24, 48, -24, 49, -23, -22, -23, -21, -23, -20, -23, -19, -23, -18, -23, -17, -23, -16, -23, -15, -23, -14, -23, -13, -23, -12, -23, -11, -23, -10, -23, -9, -23, -8, -23, -7, -23, -6, -23, -5, -23, -4, -23, -3, -23, -2, -23, -1, -23, 0, -23, 1, -23, 2, -23, 3, -23, 4, -23, 5, -23, 6, -23, 7, -23, 8, -23, 9, -23, 10, -23, 11, -23, 12, -23, 13, -23, 14, -23, 15, -23, 16, -23, 17, -23, 18, -23, 19, -23, 20, -23, 21, -23, 22, -23, 23, -23, 24, -23, 25, -23, 26, -23, 27, -23, 28, -23, 29, -23, 30, -23, 31, -23, 32, -23, 33, -23, 34, -23, 35, -23, 36, -23, 37, -23, 38, -23, 39, -23, 40, -23, 41, -23, 42, -23, 43, -23, 44, -23, 45, -23, 46, -23, 47, -23, 48, -23, 49, -22, -21, -22, -20, -22, -19, -22, -18, -22, -17, -22, -16, -22, -15, -22, -14, -22, -13, -22, -12, -22, -11, -22, -10, -22, -9, -22, -8, -22, -7, -22, -6, -22, -5, -22, -4, -22, -3, -22, -2, -22, -1, -22, 0, -22, 1, -22, 2, -22, 3, -22, 4, -22, 5, -22, 6, -22, 7, -22, 8, -22, 9, -22, 10, -22, 11, -22, 12, -22, 13, -22, 14, -22, 15, -22, 16, -22, 17, -22, 18, -22, 19, -22, 20, -22, 21, -22, 22, -22, 23, -22, 24, -22, 25, -22, 26, -22, 27, -22, 28, -22, 29, -22, 30, -22, 31, -22, 32, -22, 33, -22, 34, -22, 35, -22, 36, -22, 37, -22, 38, -22, 39, -22, 40, -22, 41, -22, 42, -22, 43, -22, 44, -22, 45, -22, 46, -22, 47, -22, 48, -22, 49, -21, -20, -21, -19, -21, -18, -21, -17, -21, -16, -21, -15, -21, -14, -21, -13, -21, -12, -21, -11, -21, -10, -21, -9, -21, -8, -21, -7, -21, -6, -21, -5, -21, -4, -21, -3, -21, -2, -21, -1, -21, 0, -21, 1, -21, 2, -21, 3, -21, 4, -21, 5, -21, 6, -21, 7, -21, 8, -21, 9, -21, 10, -21, 11, -21, 12, -21, 13, -21, 14, -21, 15, -21, 16, -21, 17, -21, 18, -21, 19, -21, 20, -21, 21, -21, 22, -21, 23, -21, 24, -21, 25, -21, 26, -21, 27, -21, 28, -21, 29, -21, 30, -21, 31, -21, 32, -21, 33, -21, 34, -21, 35, -21, 36, -21, 37, -21, 38, -21, 39, -21, 40, -21, 41, -21, 42, -21, 43, -21, 44, -21, 45, -21, 46, -21, 47, -21, 48, -21, 49, -20, -19, -20, -18, -20, -17, -20, -16, -20, -15, -20, -14, -20, -13, -20, -12, -20, -11, -20, -10, -20, -9, -20, -8, -20, -7, -20, -6, -20, -5, -20, -4, -20, -3, -20, -2, -20, -1, -20, 0, -20, 1, -20, 2, -20, 3, -20, 4, -20, 5, -20, 6, -20, 7, -20, 8, -20, 9, -20, 10, -20, 11, -20, 12, -20, 13, -20, 14, -20, 15, -20, 16, -20, 17, -20, 18, -20, 19, -20, 20, -20, 21, -20, 22, -20, 23, -20, 24, -20, 25, -20, 26, -20, 27, -20, 28, -20, 29, -20, 30, -20, 31, -20, 32, -20, 33, -20, 34, -20, 35, -20, 36, -20, 37, -20, 38, -20, 39, -20, 40, -20, 41, -20, 42, -20, 43, -20, 44, -20, 45, -20, 46, -20, 47, -20, 48, -20, 49, -19, -18, -19, -17, -19, -16, -19, -15, -19, -14, -19, -13, -19, -12, -19, -11, -19, -10, -19, -9, -19, -8, -19, -7, -19, -6, -19, -5, -19, -4, -19, -3, -19, -2, -19, -1, -19, 0, -19, 1, -19, 2, -19, 3, -19, 4, -19, 5, -19, 6, -19, 7, -19, 8, -19, 9, -19, 10, -19, 11, -19, 12, -19, 13, -19, 14, -19, 15, -19, 16, -19, 17, -19, 18, -19, 19, -19, 20, -19, 21, -19, 22, -19, 23, -19, 24, -19, 25, -19, 26, -19, 27, -19, 28, -19, 29, -19, 30, -19, 31, -19, 32, -19, 33, -19, 34, -19, 35, -19, 36, -19, 37, -19, 38, -19, 39, -19, 40, -19, 41, -19, 42, -19, 43, -19, 44, -19, 45, -19, 46, -19, 47, -19, 48, -19, 49, -18, -17, -18, -16, -18, -15, -18, -14, -18, -13, -18, -12, -18, -11, -18, -10, -18, -9, -18, -8, -18, -7, -18, -6, -18, -5, -18, -4, -18, -3, -18, -2, -18, -1, -18, 0, -18, 1, -18, 2, -18, 3, -18, 4, -18, 5, -18, 6, -18, 7, -18, 8, -18, 9, -18, 10, -18, 11, -18, 12, -18, 13, -18, 14, -18, 15, -18, 16, -18, 17, -18, 18, -18, 19, -18, 20, -18, 21, -18, 22, -18, 23, -18, 24, -18, 25, -18, 26, -18, 27, -18, 28, -18, 29, -18, 30, -18, 31, -18, 32, -18, 33, -18, 34, -18, 35, -18, 36, -18, 37, -18, 38, -18, 39, -18, 40, -18, 41, -18, 42, -18, 43, -18, 44, -18, 45, -18, 46, -18, 47, -18, 48, -18, 49, -17, -16, -17, -15, -17, -14, -17, -13, -17, -12, -17, -11, -17, -10, -17, -9, -17, -8, -17, -7, -17, -6, -17, -5, -17, -4, -17, -3, -17, -2, -17, -1, -17, 0, -17, 1, -17, 2, -17, 3, -17, 4, -17, 5, -17, 6, -17, 7, -17, 8, -17, 9, -17, 10, -17, 11, -17, 12, -17, 13, -17, 14, -17, 15, -17, 16, -17, 17, -17, 18, -17, 19, -17, 20, -17, 21, -17, 22, -17, 23, -17, 24, -17, 25, -17, 26, -17, 27, -17, 28, -17, 29, -17, 30, -17, 31, -17, 32, -17, 33, -17, 34, -17, 35, -17, 36, -17, 37, -17, 38, -17, 39, -17, 40, -17, 41, -17, 42, -17, 43, -17, 44, -17, 45, -17, 46, -17, 47, -17, 48, -17, 49, -16, -15, -16, -14, -16, -13, -16, -12, -16, -11, -16, -10, -16, -9, -16, -8, -16, -7, -16, -6, -16, -5, -16, -4, -16, -3, -16, -2, -16, -1, -16, 0, -16, 1, -16, 2, -16, 3, -16, 4, -16, 5, -16, 6, -16, 7, -16, 8, -16, 9, -16, 10, -16, 11, -16, 12, -16, 13, -16, 14, -16, 15, -16, 16, -16, 17, -16, 18, -16, 19, -16, 20, -16, 21, -16, 22, -16, 23, -16, 24, -16, 25, -16, 26, -16, 27, -16, 28, -16, 29, -16, 30, -16, 31, -16, 32, -16, 33, -16, 34, -16, 35, -16, 36, -16, 37, -16, 38, -16, 39, -16, 40, -16, 41, -16, 42, -16, 43, -16, 44, -16, 45, -16, 46, -16, 47, -16, 48, -16, 49, -15, -14, -15, -13, -15, -12, -15, -11, -15, -10, -15, -9, -15, -8, -15, -7, -15, -6, -15, -5, -15, -4, -15, -3, -15, -2, -15, -1, -15, 0, -15, 1, -15, 2, -15, 3, -15, 4, -15, 5, -15, 6, -15, 7, -15, 8, -15, 9, -15, 10, -15, 11, -15, 12, -15, 13, -15, 14, -15, 15, -15, 16, -15, 17, -15, 18, -15, 19, -15, 20, -15, 21, -15, 22, -15, 23, -15, 24, -15, 25, -15, 26, -15, 27, -15, 28, -15, 29, -15, 30, -15, 31, -15, 32, -15, 33, -15, 34, -15, 35, -15, 36, -15, 37, -15, 38, -15, 39, -15, 40, -15, 41, -15, 42, -15, 43, -15, 44, -15, 45, -15, 46, -15, 47, -15, 48, -15, 49, -14, -13, -14, -12, -14, -11, -14, -10, -14, -9, -14, -8, -14, -7, -14, -6, -14, -5, -14, -4, -14, -3, -14, -2, -14, -1, -14, 0, -14, 1, -14, 2, -14, 3, -14, 4, -14, 5, -14, 6, -14, 7, -14, 8, -14, 9, -14, 10, -14, 11, -14, 12, -14, 13, -14, 14, -14, 15, -14, 16, -14, 17, -14, 18, -14, 19, -14, 20, -14, 21, -14, 22, -14, 23, -14, 24, -14, 25, -14, 26, -14, 27, -14, 28, -14, 29, -14, 30, -14, 31, -14, 32, -14, 33, -14, 34, -14, 35, -14, 36, -14, 37, -14, 38, -14, 39, -14, 40, -14, 41, -14, 42, -14, 43, -14, 44, -14, 45, -14, 46, -14, 47, -14, 48, -14, 49, -13, -12, -13, -11, -13, -10, -13, -9, -13, -8, -13, -7, -13, -6, -13, -5, -13, -4, -13, -3, -13, -2, -13, -1, -13, 0, -13, 1, -13, 2, -13, 3, -13, 4, -13, 5, -13, 6, -13, 7, -13, 8, -13, 9, -13, 10, -13, 11, -13, 12, -13, 13, -13, 14, -13, 15, -13, 16, -13, 17, -13, 18, -13, 19, -13, 20, -13, 21, -13, 22, -13, 23, -13, 24, -13, 25, -13, 26, -13, 27, -13, 28, -13, 29, -13, 30, -13, 31, -13, 32, -13, 33, -13, 34, -13, 35, -13, 36, -13, 37, -13, 38, -13, 39, -13, 40, -13, 41, -13, 42, -13, 43, -13, 44, -13, 45, -13, 46, -13, 47, -13, 48, -13, 49, -12, -11, -12, -10, -12, -9, -12, -8, -12, -7, -12, -6, -12, -5, -12, -4, -12, -3, -12, -2, -12, -1, -12, 0, -12, 1, -12, 2, -12, 3, -12, 4, -12, 5, -12, 6, -12, 7, -12, 8, -12, 9, -12, 10, -12, 11, -12, 12, -12, 13, -12, 14, -12, 15, -12, 16, -12, 17, -12, 18, -12, 19, -12, 20, -12, 21, -12, 22, -12, 23, -12, 24, -12, 25, -12, 26, -12, 27, -12, 28, -12, 29, -12, 30, -12, 31, -12, 32, -12, 33, -12, 34, -12, 35, -12, 36, -12, 37, -12, 38, -12, 39, -12, 40, -12, 41, -12, 42, -12, 43, -12, 44, -12, 45, -12, 46, -12, 47, -12, 48, -12, 49, -11, -10, -11, -9, -11, -8, -11, -7, -11, -6, -11, -5, -11, -4, -11, -3, -11, -2, -11, -1, -11, 0, -11, 1, -11, 2, -11, 3, -11, 4, -11, 5, -11, 6, -11, 7, -11, 8, -11, 9, -11, 10, -11, 11, -11, 12, -11, 13, -11, 14, -11, 15, -11, 16, -11, 17, -11, 18, -11, 19, -11, 20, -11, 21, -11, 22, -11, 23, -11, 24, -11, 25, -11, 26, -11, 27, -11, 28, -11, 29, -11, 30, -11, 31, -11, 32, -11, 33, -11, 34, -11, 35, -11, 36, -11, 37, -11, 38, -11, 39, -11, 40, -11, 41, -11, 42, -11, 43, -11, 44, -11, 45, -11, 46, -11, 47, -11, 48, -11, 49, -10, -9, -10, -8, -10, -7, -10, -6, -10, -5, -10, -4, -10, -3, -10, -2, -10, -1, -10, 0, -10, 1, -10, 2, -10, 3, -10, 4, -10, 5, -10, 6, -10, 7, -10, 8, -10, 9, -10, 10, -10, 11, -10, 12, -10, 13, -10, 14, -10, 15, -10, 16, -10, 17, -10, 18, -10, 19, -10, 20, -10, 21, -10, 22, -10, 23, -10, 24, -10, 25, -10, 26, -10, 27, -10, 28, -10, 29, -10, 30, -10, 31, -10, 32, -10, 33, -10, 34, -10, 35, -10, 36, -10, 37, -10, 38, -10, 39, -10, 40, -10, 41, -10, 42, -10, 43, -10, 44, -10, 45, -10, 46, -10, 47, -10, 48, -10, 49, -9, -8, -9, -7, -9, -6, -9, -5, -9, -4, -9, -3, -9, -2, -9, -1, -9, 0, -9, 1, -9, 2, -9, 3, -9, 4, -9, 5, -9, 6, -9, 7, -9, 8, -9, 9, -9, 10, -9, 11, -9, 12, -9, 13, -9, 14, -9, 15, -9, 16, -9, 17, -9, 18, -9, 19, -9, 20, -9, 21, -9, 22, -9, 23, -9, 24, -9, 25, -9, 26, -9, 27, -9, 28, -9, 29, -9, 30, -9, 31, -9, 32, -9, 33, -9, 34, -9, 35, -9, 36, -9, 37, -9, 38, -9, 39, -9, 40, -9, 41, -9, 42, -9, 43, -9, 44, -9, 45, -9, 46, -9, 47, -9, 48, -9, 49, -8, -7, -8, -6, -8, -5, -8, -4, -8, -3, -8, -2, -8, -1, -8, 0, -8, 1, -8, 2, -8, 3, -8, 4, -8, 5, -8, 6, -8, 7, -8, 8, -8, 9, -8, 10, -8, 11, -8, 12, -8, 13, -8, 14, -8, 15, -8, 16, -8, 17, -8, 18, -8, 19, -8, 20, -8, 21, -8, 22, -8, 23, -8, 24, -8, 25, -8, 26, -8, 27, -8, 28, -8, 29, -8, 30, -8, 31, -8, 32, -8, 33, -8, 34, -8, 35, -8, 36, -8, 37, -8, 38, -8, 39, -8, 40, -8, 41, -8, 42, -8, 43, -8, 44, -8, 45, -8, 46, -8, 47, -8, 48, -8, 49, -7, -6, -7, -5, -7, -4, -7, -3, -7, -2, -7, -1, -7, 0, -7, 1, -7, 2, -7, 3, -7, 4, -7, 5, -7, 6, -7, 7, -7, 8, -7, 9, -7, 10, -7, 11, -7, 12, -7, 13, -7, 14, -7, 15, -7, 16, -7, 17, -7, 18, -7, 19, -7, 20, -7, 21, -7, 22, -7, 23, -7, 24, -7, 25, -7, 26, -7, 27, -7, 28, -7, 29, -7, 30, -7, 31, -7, 32, -7, 33, -7, 34, -7, 35, -7, 36, -7, 37, -7, 38, -7, 39, -7, 40, -7, 41, -7, 42, -7, 43, -7, 44, -7, 45, -7, 46, -7, 47, -7, 48, -7, 49, -6, -5, -6, -4, -6, -3, -6, -2, -6, -1, -6, 0, -6, 1, -6, 2, -6, 3, -6, 4, -6, 5, -6, 6, -6, 7, -6, 8, -6, 9, -6, 10, -6, 11, -6, 12, -6, 13, -6, 14, -6, 15, -6, 16, -6, 17, -6, 18, -6, 19, -6, 20, -6, 21, -6, 22, -6, 23, -6, 24, -6, 25, -6, 26, -6, 27, -6, 28, -6, 29, -6, 30, -6, 31, -6, 32, -6, 33, -6, 34, -6, 35, -6, 36, -6, 37, -6, 38, -6, 39, -6, 40, -6, 41, -6, 42, -6, 43, -6, 44, -6, 45, -6, 46, -6, 47, -6, 48, -6, 49, -5, -4, -5, -3, -5, -2, -5, -1, -5, 0, -5, 1, -5, 2, -5, 3, -5, 4, -5, 5, -5, 6, -5, 7, -5, 8, -5, 9, -5, 10, -5, 11, -5, 12, -5, 13, -5, 14, -5, 15, -5, 16, -5, 17, -5, 18, -5, 19, -5, 20, -5, 21, -5, 22, -5, 23, -5, 24, -5, 25, -5, 26, -5, 27, -5, 28, -5, 29, -5, 30, -5, 31, -5, 32, -5, 33, -5, 34, -5, 35, -5, 36, -5, 37, -5, 38, -5, 39, -5, 40, -5, 41, -5, 42, -5, 43, -5, 44, -5, 45, -5, 46, -5, 47, -5, 48, -5, 49, -4, -3, -4, -2, -4, -1, -4, 0, -4, 1, -4, 2, -4, 3, -4, 4, -4, 5, -4, 6, -4, 7, -4, 8, -4, 9, -4, 10, -4, 11, -4, 12, -4, 13, -4, 14, -4, 15, -4, 16, -4, 17, -4, 18, -4, 19, -4, 20, -4, 21, -4, 22, -4, 23, -4, 24, -4, 25, -4, 26, -4, 27, -4, 28, -4, 29, -4, 30, -4, 31, -4, 32, -4, 33, -4, 34, -4, 35, -4, 36, -4, 37, -4, 38, -4, 39, -4, 40, -4, 41, -4, 42, -4, 43, -4, 44, -4, 45, -4, 46, -4, 47, -4, 48, -4, 49, -3, -2, -3, -1, -3, 0, -3, 1, -3, 2, -3, 3, -3, 4, -3, 5, -3, 6, -3, 7, -3, 8, -3, 9, -3, 10, -3, 11, -3, 12, -3, 13, -3, 14, -3, 15, -3, 16, -3, 17, -3, 18, -3, 19, -3, 20, -3, 21, -3, 22, -3, 23, -3, 24, -3, 25, -3, 26, -3, 27, -3, 28, -3, 29, -3, 30, -3, 31, -3, 32, -3, 33, -3, 34, -3, 35, -3, 36, -3, 37, -3, 38, -3, 39, -3, 40, -3, 41, -3, 42, -3, 43, -3, 44, -3, 45, -3, 46, -3, 47, -3, 48, -3, 49, -2, -1, -2, 0, -2, 1, -2, 2, -2, 3, -2, 4, -2, 5, -2, 6, -2, 7, -2, 8, -2, 9, -2, 10, -2, 11, -2, 12, -2, 13, -2, 14, -2, 15, -2, 16, -2, 17, -2, 18, -2, 19, -2, 20, -2, 21, -2, 22, -2, 23, -2, 24, -2, 25, -2, 26, -2, 27, -2, 28, -2, 29, -2, 30, -2, 31, -2, 32, -2, 33, -2, 34, -2, 35, -2, 36, -2, 37, -2, 38, -2, 39, -2, 40, -2, 41, -2, 42, -2, 43, -2, 44, -2, 45, -2, 46, -2, 47, -2, 48, -2, 49, -1, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1, 5, -1, 6, -1, 7, -1, 8, -1, 9, -1, 10, -1, 11, -1, 12, -1, 13, -1, 14, -1, 15, -1, 16, -1, 17, -1, 18, -1, 19, -1, 20, -1, 21, -1, 22, -1, 23, -1, 24, -1, 25, -1, 26, -1, 27, -1, 28, -1, 29, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 38, -1, 39, -1, 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, 49, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1, 40, 1, 41, 1, 42, 1, 43, 1, 44, 1, 45, 1, 46, 1, 47, 1, 48, 1, 49, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23, 2, 24, 2, 25, 2, 26, 2, 27, 2, 28, 2, 29, 2, 30, 2, 31, 2, 32, 2, 33, 2, 34, 2, 35, 2, 36, 2, 37, 2, 38, 2, 39, 2, 40, 2, 41, 2, 42, 2, 43, 2, 44, 2, 45, 2, 46, 2, 47, 2, 48, 2, 49, 3, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 3, 11, 3, 12, 3, 13, 3, 14, 3, 15, 3, 16, 3, 17, 3, 18, 3, 19, 3, 20, 3, 21, 3, 22, 3, 23, 3, 24, 3, 25, 3, 26, 3, 27, 3, 28, 3, 29, 3, 30, 3, 31, 3, 32, 3, 33, 3, 34, 3, 35, 3, 36, 3, 37, 3, 38, 3, 39, 3, 40, 3, 41, 3, 42, 3, 43, 3, 44, 3, 45, 3, 46, 3, 47, 3, 48, 3, 49, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 4, 12, 4, 13, 4, 14, 4, 15, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 22, 4, 23, 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, 29, 4, 30, 4, 31, 4, 32, 4, 33, 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, 4, 44, 4, 45, 4, 46, 4, 47, 4, 48, 4, 49, 5, 6, 5, 7, 5, 8, 5, 9, 5, 10, 5, 11, 5, 12, 5, 13, 5, 14, 5, 15, 5, 16, 5, 17, 5, 18, 5, 19, 5, 20, 5, 21, 5, 22, 5, 23, 5, 24, 5, 25, 5, 26, 5, 27, 5, 28, 5, 29, 5, 30, 5, 31, 5, 32, 5, 33, 5, 34, 5, 35, 5, 36, 5, 37, 5, 38, 5, 39, 5, 40, 5, 41, 5, 42, 5, 43, 5, 44, 5, 45, 5, 46, 5, 47, 5, 48, 5, 49, 6, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 6, 16, 6, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6, 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6, 48, 6, 49, 7, 8, 7, 9, 7, 10, 7, 11, 7, 12, 7, 13, 7, 14, 7, 15, 7, 16, 7, 17, 7, 18, 7, 19, 7, 20, 7, 21, 7, 22, 7, 23, 7, 24, 7, 25, 7, 26, 7, 27, 7, 28, 7, 29, 7, 30, 7, 31, 7, 32, 7, 33, 7, 34, 7, 35, 7, 36, 7, 37, 7, 38, 7, 39, 7, 40, 7, 41, 7, 42, 7, 43, 7, 44, 7, 45, 7, 46, 7, 47, 7, 48, 7, 49, 8, 9, 8, 10, 8, 11, 8, 12, 8, 13, 8, 14, 8, 15, 8, 16, 8, 17, 8, 18, 8, 19, 8, 20, 8, 21, 8, 22, 8, 23, 8, 24, 8, 25, 8, 26, 8, 27, 8, 28, 8, 29, 8, 30, 8, 31, 8, 32, 8, 33, 8, 34, 8, 35, 8, 36, 8, 37, 8, 38, 8, 39, 8, 40, 8, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 9, 10, 9, 11, 9, 12, 9, 13, 9, 14, 9, 15, 9, 16, 9, 17, 9, 18, 9, 19, 9, 20, 9, 21, 9, 22, 9, 23, 9, 24, 9, 25, 9, 26, 9, 27, 9, 28, 9, 29, 9, 30, 9, 31, 9, 32, 9, 33, 9, 34, 9, 35, 9, 36, 9, 37, 9, 38, 9, 39, 9, 40, 9, 41, 9, 42, 9, 43, 9, 44, 9, 45, 9, 46, 9, 47, 9, 48, 9, 49, 10, 11, 10, 12, 10, 13, 10, 14, 10, 15, 10, 16, 10, 17, 10, 18, 10, 19, 10, 20, 10, 21, 10, 22, 10, 23, 10, 24, 10, 25, 10, 26, 10, 27, 10, 28, 10, 29, 10, 30, 10, 31, 10, 32, 10, 33, 10, 34, 10, 35, 10, 36, 10, 37, 10, 38, 10, 39, 10, 40, 10, 41, 10, 42, 10, 43, 10, 44, 10, 45, 10, 46, 10, 47, 10, 48, 10, 49, 11, 12, 11, 13, 11, 14, 11, 15, 11, 16, 11, 17, 11, 18, 11, 19, 11, 20, 11, 21, 11, 22, 11, 23, 11, 24, 11, 25, 11, 26, 11, 27, 11, 28, 11, 29, 11, 30, 11, 31, 11, 32, 11, 33, 11, 34, 11, 35, 11, 36, 11, 37, 11, 38, 11, 39, 11, 40, 11, 41, 11, 42, 11, 43, 11, 44, 11, 45, 11, 46, 11, 47, 11, 48, 11, 49, 12, 13, 12, 14, 12, 15, 12, 16, 12, 17, 12, 18, 12, 19, 12, 20, 12, 21, 12, 22, 12, 23, 12, 24, 12, 25, 12, 26, 12, 27, 12, 28, 12, 29, 12, 30, 12, 31, 12, 32, 12, 33, 12, 34, 12, 35, 12, 36, 12, 37, 12, 38, 12, 39, 12, 40, 12, 41, 12, 42, 12, 43, 12, 44, 12, 45, 12, 46, 12, 47, 12, 48, 12, 49, 13, 14, 13, 15, 13, 16, 13, 17, 13, 18, 13, 19, 13, 20, 13, 21, 13, 22, 13, 23, 13, 24, 13, 25, 13, 26, 13, 27, 13, 28, 13, 29, 13, 30, 13, 31, 13, 32, 13, 33, 13, 34, 13, 35, 13, 36, 13, 37, 13, 38, 13, 39, 13, 40, 13, 41, 13, 42, 13, 43, 13, 44, 13, 45, 13, 46, 13, 47, 13, 48, 13, 49, 14, 15, 14, 16, 14, 17, 14, 18, 14, 19, 14, 20, 14, 21, 14, 22, 14, 23, 14, 24, 14, 25, 14, 26, 14, 27, 14, 28, 14, 29, 14, 30, 14, 31, 14, 32, 14, 33, 14, 34, 14, 35, 14, 36, 14, 37, 14, 38, 14, 39, 14, 40, 14, 41, 14, 42, 14, 43, 14, 44, 14, 45, 14, 46, 14, 47, 14, 48, 14, 49, 15, 16, 15, 17, 15, 18, 15, 19, 15, 20, 15, 21, 15, 22, 15, 23, 15, 24, 15, 25, 15, 26, 15, 27, 15, 28, 15, 29, 15, 30, 15, 31, 15, 32, 15, 33, 15, 34, 15, 35, 15, 36, 15, 37, 15, 38, 15, 39, 15, 40, 15, 41, 15, 42, 15, 43, 15, 44, 15, 45, 15, 46, 15, 47, 15, 48, 15, 49, 16, 17, 16, 18, 16, 19, 16, 20, 16, 21, 16, 22, 16, 23, 16, 24, 16, 25, 16, 26, 16, 27, 16, 28, 16, 29, 16, 30, 16, 31, 16, 32, 16, 33, 16, 34, 16, 35, 16, 36, 16, 37, 16, 38, 16, 39, 16, 40, 16, 41, 16, 42, 16, 43, 16, 44, 16, 45, 16, 46, 16, 47, 16, 48, 16, 49, 17, 18, 17, 19, 17, 20, 17, 21, 17, 22, 17, 23, 17, 24, 17, 25, 17, 26, 17, 27, 17, 28, 17, 29, 17, 30, 17, 31, 17, 32, 17, 33, 17, 34, 17, 35, 17, 36, 17, 37, 17, 38, 17, 39, 17, 40, 17, 41, 17, 42, 17, 43, 17, 44, 17, 45, 17, 46, 17, 47, 17, 48, 17, 49, 18, 19, 18, 20, 18, 21, 18, 22, 18, 23, 18, 24, 18, 25, 18, 26, 18, 27, 18, 28, 18, 29, 18, 30, 18, 31, 18, 32, 18, 33, 18, 34, 18, 35, 18, 36, 18, 37, 18, 38, 18, 39, 18, 40, 18, 41, 18, 42, 18, 43, 18, 44, 18, 45, 18, 46, 18, 47, 18, 48, 18, 49, 19, 20, 19, 21, 19, 22, 19, 23, 19, 24, 19, 25, 19, 26, 19, 27, 19, 28, 19, 29, 19, 30, 19, 31, 19, 32, 19, 33, 19, 34, 19, 35, 19, 36, 19, 37, 19, 38, 19, 39, 19, 40, 19, 41, 19, 42, 19, 43, 19, 44, 19, 45, 19, 46, 19, 47, 19, 48, 19, 49, 20, 21, 20, 22, 20, 23, 20, 24, 20, 25, 20, 26, 20, 27, 20, 28, 20, 29, 20, 30, 20, 31, 20, 32, 20, 33, 20, 34, 20, 35, 20, 36, 20, 37, 20, 38, 20, 39, 20, 40, 20, 41, 20, 42, 20, 43, 20, 44, 20, 45, 20, 46, 20, 47, 20, 48, 20, 49, 21, 22, 21, 23, 21, 24, 21, 25, 21, 26, 21, 27, 21, 28, 21, 29, 21, 30, 21, 31, 21, 32, 21, 33, 21, 34, 21, 35, 21, 36, 21, 37, 21, 38, 21, 39, 21, 40, 21, 41, 21, 42, 21, 43, 21, 44, 21, 45, 21, 46, 21, 47, 21, 48, 21, 49, 22, 23, 22, 24, 22, 25, 22, 26, 22, 27, 22, 28, 22, 29, 22, 30, 22, 31, 22, 32, 22, 33, 22, 34, 22, 35, 22, 36, 22, 37, 22, 38, 22, 39, 22, 40, 22, 41, 22, 42, 22, 43, 22, 44, 22, 45, 22, 46, 22, 47, 22, 48, 22, 49, 23, 24, 23, 25, 23, 26, 23, 27, 23, 28, 23, 29, 23, 30, 23, 31, 23, 32, 23, 33, 23, 34, 23, 35, 23, 36, 23, 37, 23, 38, 23, 39, 23, 40, 23, 41, 23, 42, 23, 43, 23, 44, 23, 45, 23, 46, 23, 47, 23, 48, 23, 49, 24, 25, 24, 26, 24, 27, 24, 28, 24, 29, 24, 30, 24, 31, 24, 32, 24, 33, 24, 34, 24, 35, 24, 36, 24, 37, 24, 38, 24, 39, 24, 40, 24, 41, 24, 42, 24, 43, 24, 44, 24, 45, 24, 46, 24, 47, 24, 48, 24, 49, 25, 26, 25, 27, 25, 28, 25, 29, 25, 30, 25, 31, 25, 32, 25, 33, 25, 34, 25, 35, 25, 36, 25, 37, 25, 38, 25, 39, 25, 40, 25, 41, 25, 42, 25, 43, 25, 44, 25, 45, 25, 46, 25, 47, 25, 48, 25, 49, 26, 27, 26, 28, 26, 29, 26, 30, 26, 31, 26, 32, 26, 33, 26, 34, 26, 35, 26, 36, 26, 37, 26, 38, 26, 39, 26, 40, 26, 41, 26, 42, 26, 43, 26, 44, 26, 45, 26, 46, 26, 47, 26, 48, 26, 49, 27, 28, 27, 29, 27, 30, 27, 31, 27, 32, 27, 33, 27, 34, 27, 35, 27, 36, 27, 37, 27, 38, 27, 39, 27, 40, 27, 41, 27, 42, 27, 43, 27, 44, 27, 45, 27, 46, 27, 47, 27, 48, 27, 49, 28, 29, 28, 30, 28, 31, 28, 32, 28, 33, 28, 34, 28, 35, 28, 36, 28, 37, 28, 38, 28, 39, 28, 40, 28, 41, 28, 42, 28, 43, 28, 44, 28, 45, 28, 46, 28, 47, 28, 48, 28, 49, 29, 30, 29, 31, 29, 32, 29, 33, 29, 34, 29, 35, 29, 36, 29, 37, 29, 38, 29, 39, 29, 40, 29, 41, 29, 42, 29, 43, 29, 44, 29, 45, 29, 46, 29, 47, 29, 48, 29, 49, 30, 31, 30, 32, 30, 33, 30, 34, 30, 35, 30, 36, 30, 37, 30, 38, 30, 39, 30, 40, 30, 41, 30, 42, 30, 43, 30, 44, 30, 45, 30, 46, 30, 47, 30, 48, 30, 49, 31, 32, 31, 33, 31, 34, 31, 35, 31, 36, 31, 37, 31, 38, 31, 39, 31, 40, 31, 41, 31, 42, 31, 43, 31, 44, 31, 45, 31, 46, 31, 47, 31, 48, 31, 49, 32, 33, 32, 34, 32, 35, 32, 36, 32, 37, 32, 38, 32, 39, 32, 40, 32, 41, 32, 42, 32, 43, 32, 44, 32, 45, 32, 46, 32, 47, 32, 48, 32, 49, 33, 34, 33, 35, 33, 36, 33, 37, 33, 38, 33, 39, 33, 40, 33, 41, 33, 42, 33, 43, 33, 44, 33, 45, 33, 46, 33, 47, 33, 48, 33, 49, 34, 35, 34, 36, 34, 37, 34, 38, 34, 39, 34, 40, 34, 41, 34, 42, 34, 43, 34, 44, 34, 45, 34, 46, 34, 47, 34, 48, 34, 49, 35, 36, 35, 37, 35, 38, 35, 39, 35, 40, 35, 41, 35, 42, 35, 43, 35, 44, 35, 45, 35, 46, 35, 47, 35, 48, 35, 49, 36, 37, 36, 38, 36, 39, 36, 40, 36, 41, 36, 42, 36, 43, 36, 44, 36, 45, 36, 46, 36, 47, 36, 48, 36, 49, 37, 38, 37, 39, 37, 40, 37, 41, 37, 42, 37, 43, 37, 44, 37, 45, 37, 46, 37, 47, 37, 48, 37, 49, 38, 39, 38, 40, 38, 41, 38, 42, 38, 43, 38, 44, 38, 45, 38, 46, 38, 47, 38, 48, 38, 49, 39, 40, 39, 41, 39, 42, 39, 43, 39, 44, 39, 45, 39, 46, 39, 47, 39, 48, 39, 49, 40, 41, 40, 42, 40, 43, 40, 44, 40, 45, 40, 46, 40, 47, 40, 48, 40, 49, 41, 42, 41, 43, 41, 44, 41, 45, 41, 46, 41, 47, 41, 48, 41, 49, 42, 43, 42, 44, 42, 45, 42, 46, 42, 47, 42, 48, 42, 49, 43, 44, 43, 45, 43, 46, 43, 47, 43, 48, 43, 49, 44, 45, 44, 46, 44, 47, 44, 48, 44, 49, 45, 46, 45, 47, 45, 48, 45, 49, 46, 47, 46, 48, 46, 49, 47, 48, 47, 49, 48, 49, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 ], "y": [ -49, -50, -48, -50, -47, -50, -46, -50, -45, -50, -44, -50, -43, -50, -42, -50, -41, -50, -40, -50, -39, -50, -38, -50, -37, -50, -36, -50, -35, -50, -34, -50, -33, -50, -32, -50, -31, -50, -30, -50, -29, -50, -28, -50, -27, -50, -26, -50, -25, -50, -24, -50, -23, -50, -22, -50, -21, -50, -20, -50, -19, -50, -18, -50, -17, -50, -16, -50, -15, -50, -14, -50, -13, -50, -12, -50, -11, -50, -10, -50, -9, -50, -8, -50, -7, -50, -6, -50, -5, -50, -4, -50, -3, -50, -2, -50, -1, -50, 0, -50, 1, -50, 2, -50, 3, -50, 4, -50, 5, -50, 6, -50, 7, -50, 8, -50, 9, -50, 10, -50, 11, -50, 12, -50, 13, -50, 14, -50, 15, -50, 16, -50, 17, -50, 18, -50, 19, -50, 20, -50, 21, -50, 22, -50, 23, -50, 24, -50, 25, -50, 26, -50, 27, -50, 28, -50, 29, -50, 30, -50, 31, -50, 32, -50, 33, -50, 34, -50, 35, -50, 36, -50, 37, -50, 38, -50, 39, -50, 40, -50, 41, -50, 42, -50, 43, -50, 44, -50, 45, -50, 46, -50, 47, -50, 48, -50, 49, -50, -48, -49, -47, -49, -46, -49, -45, -49, -44, -49, -43, -49, -42, -49, -41, -49, -40, -49, -39, -49, -38, -49, -37, -49, -36, -49, -35, -49, -34, -49, -33, -49, -32, -49, -31, -49, -30, -49, -29, -49, -28, -49, -27, -49, -26, -49, -25, -49, -24, -49, -23, -49, -22, -49, -21, -49, -20, -49, -19, -49, -18, -49, -17, -49, -16, -49, -15, -49, -14, -49, -13, -49, -12, -49, -11, -49, -10, -49, -9, -49, -8, -49, -7, -49, -6, -49, -5, -49, -4, -49, -3, -49, -2, -49, -1, -49, 0, -49, 1, -49, 2, -49, 3, -49, 4, -49, 5, -49, 6, -49, 7, -49, 8, -49, 9, -49, 10, -49, 11, -49, 12, -49, 13, -49, 14, -49, 15, -49, 16, -49, 17, -49, 18, -49, 19, -49, 20, -49, 21, -49, 22, -49, 23, -49, 24, -49, 25, -49, 26, -49, 27, -49, 28, -49, 29, -49, 30, -49, 31, -49, 32, -49, 33, -49, 34, -49, 35, -49, 36, -49, 37, -49, 38, -49, 39, -49, 40, -49, 41, -49, 42, -49, 43, -49, 44, -49, 45, -49, 46, -49, 47, -49, 48, -49, 49, -49, -47, -48, -46, -48, -45, -48, -44, -48, -43, -48, -42, -48, -41, -48, -40, -48, -39, -48, -38, -48, -37, -48, -36, -48, -35, -48, -34, -48, -33, -48, -32, -48, -31, -48, -30, -48, -29, -48, -28, -48, -27, -48, -26, -48, -25, -48, -24, -48, -23, -48, -22, -48, -21, -48, -20, -48, -19, -48, -18, -48, -17, -48, -16, -48, -15, -48, -14, -48, -13, -48, -12, -48, -11, -48, -10, -48, -9, -48, -8, -48, -7, -48, -6, -48, -5, -48, -4, -48, -3, -48, -2, -48, -1, -48, 0, -48, 1, -48, 2, -48, 3, -48, 4, -48, 5, -48, 6, -48, 7, -48, 8, -48, 9, -48, 10, -48, 11, -48, 12, -48, 13, -48, 14, -48, 15, -48, 16, -48, 17, -48, 18, -48, 19, -48, 20, -48, 21, -48, 22, -48, 23, -48, 24, -48, 25, -48, 26, -48, 27, -48, 28, -48, 29, -48, 30, -48, 31, -48, 32, -48, 33, -48, 34, -48, 35, -48, 36, -48, 37, -48, 38, -48, 39, -48, 40, -48, 41, -48, 42, -48, 43, -48, 44, -48, 45, -48, 46, -48, 47, -48, 48, -48, 49, -48, -46, -47, -45, -47, -44, -47, -43, -47, -42, -47, -41, -47, -40, -47, -39, -47, -38, -47, -37, -47, -36, -47, -35, -47, -34, -47, -33, -47, -32, -47, -31, -47, -30, -47, -29, -47, -28, -47, -27, -47, -26, -47, -25, -47, -24, -47, -23, -47, -22, -47, -21, -47, -20, -47, -19, -47, -18, -47, -17, -47, -16, -47, -15, -47, -14, -47, -13, -47, -12, -47, -11, -47, -10, -47, -9, -47, -8, -47, -7, -47, -6, -47, -5, -47, -4, -47, -3, -47, -2, -47, -1, -47, 0, -47, 1, -47, 2, -47, 3, -47, 4, -47, 5, -47, 6, -47, 7, -47, 8, -47, 9, -47, 10, -47, 11, -47, 12, -47, 13, -47, 14, -47, 15, -47, 16, -47, 17, -47, 18, -47, 19, -47, 20, -47, 21, -47, 22, -47, 23, -47, 24, -47, 25, -47, 26, -47, 27, -47, 28, -47, 29, -47, 30, -47, 31, -47, 32, -47, 33, -47, 34, -47, 35, -47, 36, -47, 37, -47, 38, -47, 39, -47, 40, -47, 41, -47, 42, -47, 43, -47, 44, -47, 45, -47, 46, -47, 47, -47, 48, -47, 49, -47, -45, -46, -44, -46, -43, -46, -42, -46, -41, -46, -40, -46, -39, -46, -38, -46, -37, -46, -36, -46, -35, -46, -34, -46, -33, -46, -32, -46, -31, -46, -30, -46, -29, -46, -28, -46, -27, -46, -26, -46, -25, -46, -24, -46, -23, -46, -22, -46, -21, -46, -20, -46, -19, -46, -18, -46, -17, -46, -16, -46, -15, -46, -14, -46, -13, -46, -12, -46, -11, -46, -10, -46, -9, -46, -8, -46, -7, -46, -6, -46, -5, -46, -4, -46, -3, -46, -2, -46, -1, -46, 0, -46, 1, -46, 2, -46, 3, -46, 4, -46, 5, -46, 6, -46, 7, -46, 8, -46, 9, -46, 10, -46, 11, -46, 12, -46, 13, -46, 14, -46, 15, -46, 16, -46, 17, -46, 18, -46, 19, -46, 20, -46, 21, -46, 22, -46, 23, -46, 24, -46, 25, -46, 26, -46, 27, -46, 28, -46, 29, -46, 30, -46, 31, -46, 32, -46, 33, -46, 34, -46, 35, -46, 36, -46, 37, -46, 38, -46, 39, -46, 40, -46, 41, -46, 42, -46, 43, -46, 44, -46, 45, -46, 46, -46, 47, -46, 48, -46, 49, -46, -44, -45, -43, -45, -42, -45, -41, -45, -40, -45, -39, -45, -38, -45, -37, -45, -36, -45, -35, -45, -34, -45, -33, -45, -32, -45, -31, -45, -30, -45, -29, -45, -28, -45, -27, -45, -26, -45, -25, -45, -24, -45, -23, -45, -22, -45, -21, -45, -20, -45, -19, -45, -18, -45, -17, -45, -16, -45, -15, -45, -14, -45, -13, -45, -12, -45, -11, -45, -10, -45, -9, -45, -8, -45, -7, -45, -6, -45, -5, -45, -4, -45, -3, -45, -2, -45, -1, -45, 0, -45, 1, -45, 2, -45, 3, -45, 4, -45, 5, -45, 6, -45, 7, -45, 8, -45, 9, -45, 10, -45, 11, -45, 12, -45, 13, -45, 14, -45, 15, -45, 16, -45, 17, -45, 18, -45, 19, -45, 20, -45, 21, -45, 22, -45, 23, -45, 24, -45, 25, -45, 26, -45, 27, -45, 28, -45, 29, -45, 30, -45, 31, -45, 32, -45, 33, -45, 34, -45, 35, -45, 36, -45, 37, -45, 38, -45, 39, -45, 40, -45, 41, -45, 42, -45, 43, -45, 44, -45, 45, -45, 46, -45, 47, -45, 48, -45, 49, -45, -43, -44, -42, -44, -41, -44, -40, -44, -39, -44, -38, -44, -37, -44, -36, -44, -35, -44, -34, -44, -33, -44, -32, -44, -31, -44, -30, -44, -29, -44, -28, -44, -27, -44, -26, -44, -25, -44, -24, -44, -23, -44, -22, -44, -21, -44, -20, -44, -19, -44, -18, -44, -17, -44, -16, -44, -15, -44, -14, -44, -13, -44, -12, -44, -11, -44, -10, -44, -9, -44, -8, -44, -7, -44, -6, -44, -5, -44, -4, -44, -3, -44, -2, -44, -1, -44, 0, -44, 1, -44, 2, -44, 3, -44, 4, -44, 5, -44, 6, -44, 7, -44, 8, -44, 9, -44, 10, -44, 11, -44, 12, -44, 13, -44, 14, -44, 15, -44, 16, -44, 17, -44, 18, -44, 19, -44, 20, -44, 21, -44, 22, -44, 23, -44, 24, -44, 25, -44, 26, -44, 27, -44, 28, -44, 29, -44, 30, -44, 31, -44, 32, -44, 33, -44, 34, -44, 35, -44, 36, -44, 37, -44, 38, -44, 39, -44, 40, -44, 41, -44, 42, -44, 43, -44, 44, -44, 45, -44, 46, -44, 47, -44, 48, -44, 49, -44, -42, -43, -41, -43, -40, -43, -39, -43, -38, -43, -37, -43, -36, -43, -35, -43, -34, -43, -33, -43, -32, -43, -31, -43, -30, -43, -29, -43, -28, -43, -27, -43, -26, -43, -25, -43, -24, -43, -23, -43, -22, -43, -21, -43, -20, -43, -19, -43, -18, -43, -17, -43, -16, -43, -15, -43, -14, -43, -13, -43, -12, -43, -11, -43, -10, -43, -9, -43, -8, -43, -7, -43, -6, -43, -5, -43, -4, -43, -3, -43, -2, -43, -1, -43, 0, -43, 1, -43, 2, -43, 3, -43, 4, -43, 5, -43, 6, -43, 7, -43, 8, -43, 9, -43, 10, -43, 11, -43, 12, -43, 13, -43, 14, -43, 15, -43, 16, -43, 17, -43, 18, -43, 19, -43, 20, -43, 21, -43, 22, -43, 23, -43, 24, -43, 25, -43, 26, -43, 27, -43, 28, -43, 29, -43, 30, -43, 31, -43, 32, -43, 33, -43, 34, -43, 35, -43, 36, -43, 37, -43, 38, -43, 39, -43, 40, -43, 41, -43, 42, -43, 43, -43, 44, -43, 45, -43, 46, -43, 47, -43, 48, -43, 49, -43, -41, -42, -40, -42, -39, -42, -38, -42, -37, -42, -36, -42, -35, -42, -34, -42, -33, -42, -32, -42, -31, -42, -30, -42, -29, -42, -28, -42, -27, -42, -26, -42, -25, -42, -24, -42, -23, -42, -22, -42, -21, -42, -20, -42, -19, -42, -18, -42, -17, -42, -16, -42, -15, -42, -14, -42, -13, -42, -12, -42, -11, -42, -10, -42, -9, -42, -8, -42, -7, -42, -6, -42, -5, -42, -4, -42, -3, -42, -2, -42, -1, -42, 0, -42, 1, -42, 2, -42, 3, -42, 4, -42, 5, -42, 6, -42, 7, -42, 8, -42, 9, -42, 10, -42, 11, -42, 12, -42, 13, -42, 14, -42, 15, -42, 16, -42, 17, -42, 18, -42, 19, -42, 20, -42, 21, -42, 22, -42, 23, -42, 24, -42, 25, -42, 26, -42, 27, -42, 28, -42, 29, -42, 30, -42, 31, -42, 32, -42, 33, -42, 34, -42, 35, -42, 36, -42, 37, -42, 38, -42, 39, -42, 40, -42, 41, -42, 42, -42, 43, -42, 44, -42, 45, -42, 46, -42, 47, -42, 48, -42, 49, -42, -40, -41, -39, -41, -38, -41, -37, -41, -36, -41, -35, -41, -34, -41, -33, -41, -32, -41, -31, -41, -30, -41, -29, -41, -28, -41, -27, -41, -26, -41, -25, -41, -24, -41, -23, -41, -22, -41, -21, -41, -20, -41, -19, -41, -18, -41, -17, -41, -16, -41, -15, -41, -14, -41, -13, -41, -12, -41, -11, -41, -10, -41, -9, -41, -8, -41, -7, -41, -6, -41, -5, -41, -4, -41, -3, -41, -2, -41, -1, -41, 0, -41, 1, -41, 2, -41, 3, -41, 4, -41, 5, -41, 6, -41, 7, -41, 8, -41, 9, -41, 10, -41, 11, -41, 12, -41, 13, -41, 14, -41, 15, -41, 16, -41, 17, -41, 18, -41, 19, -41, 20, -41, 21, -41, 22, -41, 23, -41, 24, -41, 25, -41, 26, -41, 27, -41, 28, -41, 29, -41, 30, -41, 31, -41, 32, -41, 33, -41, 34, -41, 35, -41, 36, -41, 37, -41, 38, -41, 39, -41, 40, -41, 41, -41, 42, -41, 43, -41, 44, -41, 45, -41, 46, -41, 47, -41, 48, -41, 49, -41, -39, -40, -38, -40, -37, -40, -36, -40, -35, -40, -34, -40, -33, -40, -32, -40, -31, -40, -30, -40, -29, -40, -28, -40, -27, -40, -26, -40, -25, -40, -24, -40, -23, -40, -22, -40, -21, -40, -20, -40, -19, -40, -18, -40, -17, -40, -16, -40, -15, -40, -14, -40, -13, -40, -12, -40, -11, -40, -10, -40, -9, -40, -8, -40, -7, -40, -6, -40, -5, -40, -4, -40, -3, -40, -2, -40, -1, -40, 0, -40, 1, -40, 2, -40, 3, -40, 4, -40, 5, -40, 6, -40, 7, -40, 8, -40, 9, -40, 10, -40, 11, -40, 12, -40, 13, -40, 14, -40, 15, -40, 16, -40, 17, -40, 18, -40, 19, -40, 20, -40, 21, -40, 22, -40, 23, -40, 24, -40, 25, -40, 26, -40, 27, -40, 28, -40, 29, -40, 30, -40, 31, -40, 32, -40, 33, -40, 34, -40, 35, -40, 36, -40, 37, -40, 38, -40, 39, -40, 40, -40, 41, -40, 42, -40, 43, -40, 44, -40, 45, -40, 46, -40, 47, -40, 48, -40, 49, -40, -38, -39, -37, -39, -36, -39, -35, -39, -34, -39, -33, -39, -32, -39, -31, -39, -30, -39, -29, -39, -28, -39, -27, -39, -26, -39, -25, -39, -24, -39, -23, -39, -22, -39, -21, -39, -20, -39, -19, -39, -18, -39, -17, -39, -16, -39, -15, -39, -14, -39, -13, -39, -12, -39, -11, -39, -10, -39, -9, -39, -8, -39, -7, -39, -6, -39, -5, -39, -4, -39, -3, -39, -2, -39, -1, -39, 0, -39, 1, -39, 2, -39, 3, -39, 4, -39, 5, -39, 6, -39, 7, -39, 8, -39, 9, -39, 10, -39, 11, -39, 12, -39, 13, -39, 14, -39, 15, -39, 16, -39, 17, -39, 18, -39, 19, -39, 20, -39, 21, -39, 22, -39, 23, -39, 24, -39, 25, -39, 26, -39, 27, -39, 28, -39, 29, -39, 30, -39, 31, -39, 32, -39, 33, -39, 34, -39, 35, -39, 36, -39, 37, -39, 38, -39, 39, -39, 40, -39, 41, -39, 42, -39, 43, -39, 44, -39, 45, -39, 46, -39, 47, -39, 48, -39, 49, -39, -37, -38, -36, -38, -35, -38, -34, -38, -33, -38, -32, -38, -31, -38, -30, -38, -29, -38, -28, -38, -27, -38, -26, -38, -25, -38, -24, -38, -23, -38, -22, -38, -21, -38, -20, -38, -19, -38, -18, -38, -17, -38, -16, -38, -15, -38, -14, -38, -13, -38, -12, -38, -11, -38, -10, -38, -9, -38, -8, -38, -7, -38, -6, -38, -5, -38, -4, -38, -3, -38, -2, -38, -1, -38, 0, -38, 1, -38, 2, -38, 3, -38, 4, -38, 5, -38, 6, -38, 7, -38, 8, -38, 9, -38, 10, -38, 11, -38, 12, -38, 13, -38, 14, -38, 15, -38, 16, -38, 17, -38, 18, -38, 19, -38, 20, -38, 21, -38, 22, -38, 23, -38, 24, -38, 25, -38, 26, -38, 27, -38, 28, -38, 29, -38, 30, -38, 31, -38, 32, -38, 33, -38, 34, -38, 35, -38, 36, -38, 37, -38, 38, -38, 39, -38, 40, -38, 41, -38, 42, -38, 43, -38, 44, -38, 45, -38, 46, -38, 47, -38, 48, -38, 49, -38, -36, -37, -35, -37, -34, -37, -33, -37, -32, -37, -31, -37, -30, -37, -29, -37, -28, -37, -27, -37, -26, -37, -25, -37, -24, -37, -23, -37, -22, -37, -21, -37, -20, -37, -19, -37, -18, -37, -17, -37, -16, -37, -15, -37, -14, -37, -13, -37, -12, -37, -11, -37, -10, -37, -9, -37, -8, -37, -7, -37, -6, -37, -5, -37, -4, -37, -3, -37, -2, -37, -1, -37, 0, -37, 1, -37, 2, -37, 3, -37, 4, -37, 5, -37, 6, -37, 7, -37, 8, -37, 9, -37, 10, -37, 11, -37, 12, -37, 13, -37, 14, -37, 15, -37, 16, -37, 17, -37, 18, -37, 19, -37, 20, -37, 21, -37, 22, -37, 23, -37, 24, -37, 25, -37, 26, -37, 27, -37, 28, -37, 29, -37, 30, -37, 31, -37, 32, -37, 33, -37, 34, -37, 35, -37, 36, -37, 37, -37, 38, -37, 39, -37, 40, -37, 41, -37, 42, -37, 43, -37, 44, -37, 45, -37, 46, -37, 47, -37, 48, -37, 49, -37, -35, -36, -34, -36, -33, -36, -32, -36, -31, -36, -30, -36, -29, -36, -28, -36, -27, -36, -26, -36, -25, -36, -24, -36, -23, -36, -22, -36, -21, -36, -20, -36, -19, -36, -18, -36, -17, -36, -16, -36, -15, -36, -14, -36, -13, -36, -12, -36, -11, -36, -10, -36, -9, -36, -8, -36, -7, -36, -6, -36, -5, -36, -4, -36, -3, -36, -2, -36, -1, -36, 0, -36, 1, -36, 2, -36, 3, -36, 4, -36, 5, -36, 6, -36, 7, -36, 8, -36, 9, -36, 10, -36, 11, -36, 12, -36, 13, -36, 14, -36, 15, -36, 16, -36, 17, -36, 18, -36, 19, -36, 20, -36, 21, -36, 22, -36, 23, -36, 24, -36, 25, -36, 26, -36, 27, -36, 28, -36, 29, -36, 30, -36, 31, -36, 32, -36, 33, -36, 34, -36, 35, -36, 36, -36, 37, -36, 38, -36, 39, -36, 40, -36, 41, -36, 42, -36, 43, -36, 44, -36, 45, -36, 46, -36, 47, -36, 48, -36, 49, -36, -34, -35, -33, -35, -32, -35, -31, -35, -30, -35, -29, -35, -28, -35, -27, -35, -26, -35, -25, -35, -24, -35, -23, -35, -22, -35, -21, -35, -20, -35, -19, -35, -18, -35, -17, -35, -16, -35, -15, -35, -14, -35, -13, -35, -12, -35, -11, -35, -10, -35, -9, -35, -8, -35, -7, -35, -6, -35, -5, -35, -4, -35, -3, -35, -2, -35, -1, -35, 0, -35, 1, -35, 2, -35, 3, -35, 4, -35, 5, -35, 6, -35, 7, -35, 8, -35, 9, -35, 10, -35, 11, -35, 12, -35, 13, -35, 14, -35, 15, -35, 16, -35, 17, -35, 18, -35, 19, -35, 20, -35, 21, -35, 22, -35, 23, -35, 24, -35, 25, -35, 26, -35, 27, -35, 28, -35, 29, -35, 30, -35, 31, -35, 32, -35, 33, -35, 34, -35, 35, -35, 36, -35, 37, -35, 38, -35, 39, -35, 40, -35, 41, -35, 42, -35, 43, -35, 44, -35, 45, -35, 46, -35, 47, -35, 48, -35, 49, -35, -33, -34, -32, -34, -31, -34, -30, -34, -29, -34, -28, -34, -27, -34, -26, -34, -25, -34, -24, -34, -23, -34, -22, -34, -21, -34, -20, -34, -19, -34, -18, -34, -17, -34, -16, -34, -15, -34, -14, -34, -13, -34, -12, -34, -11, -34, -10, -34, -9, -34, -8, -34, -7, -34, -6, -34, -5, -34, -4, -34, -3, -34, -2, -34, -1, -34, 0, -34, 1, -34, 2, -34, 3, -34, 4, -34, 5, -34, 6, -34, 7, -34, 8, -34, 9, -34, 10, -34, 11, -34, 12, -34, 13, -34, 14, -34, 15, -34, 16, -34, 17, -34, 18, -34, 19, -34, 20, -34, 21, -34, 22, -34, 23, -34, 24, -34, 25, -34, 26, -34, 27, -34, 28, -34, 29, -34, 30, -34, 31, -34, 32, -34, 33, -34, 34, -34, 35, -34, 36, -34, 37, -34, 38, -34, 39, -34, 40, -34, 41, -34, 42, -34, 43, -34, 44, -34, 45, -34, 46, -34, 47, -34, 48, -34, 49, -34, -32, -33, -31, -33, -30, -33, -29, -33, -28, -33, -27, -33, -26, -33, -25, -33, -24, -33, -23, -33, -22, -33, -21, -33, -20, -33, -19, -33, -18, -33, -17, -33, -16, -33, -15, -33, -14, -33, -13, -33, -12, -33, -11, -33, -10, -33, -9, -33, -8, -33, -7, -33, -6, -33, -5, -33, -4, -33, -3, -33, -2, -33, -1, -33, 0, -33, 1, -33, 2, -33, 3, -33, 4, -33, 5, -33, 6, -33, 7, -33, 8, -33, 9, -33, 10, -33, 11, -33, 12, -33, 13, -33, 14, -33, 15, -33, 16, -33, 17, -33, 18, -33, 19, -33, 20, -33, 21, -33, 22, -33, 23, -33, 24, -33, 25, -33, 26, -33, 27, -33, 28, -33, 29, -33, 30, -33, 31, -33, 32, -33, 33, -33, 34, -33, 35, -33, 36, -33, 37, -33, 38, -33, 39, -33, 40, -33, 41, -33, 42, -33, 43, -33, 44, -33, 45, -33, 46, -33, 47, -33, 48, -33, 49, -33, -31, -32, -30, -32, -29, -32, -28, -32, -27, -32, -26, -32, -25, -32, -24, -32, -23, -32, -22, -32, -21, -32, -20, -32, -19, -32, -18, -32, -17, -32, -16, -32, -15, -32, -14, -32, -13, -32, -12, -32, -11, -32, -10, -32, -9, -32, -8, -32, -7, -32, -6, -32, -5, -32, -4, -32, -3, -32, -2, -32, -1, -32, 0, -32, 1, -32, 2, -32, 3, -32, 4, -32, 5, -32, 6, -32, 7, -32, 8, -32, 9, -32, 10, -32, 11, -32, 12, -32, 13, -32, 14, -32, 15, -32, 16, -32, 17, -32, 18, -32, 19, -32, 20, -32, 21, -32, 22, -32, 23, -32, 24, -32, 25, -32, 26, -32, 27, -32, 28, -32, 29, -32, 30, -32, 31, -32, 32, -32, 33, -32, 34, -32, 35, -32, 36, -32, 37, -32, 38, -32, 39, -32, 40, -32, 41, -32, 42, -32, 43, -32, 44, -32, 45, -32, 46, -32, 47, -32, 48, -32, 49, -32, -30, -31, -29, -31, -28, -31, -27, -31, -26, -31, -25, -31, -24, -31, -23, -31, -22, -31, -21, -31, -20, -31, -19, -31, -18, -31, -17, -31, -16, -31, -15, -31, -14, -31, -13, -31, -12, -31, -11, -31, -10, -31, -9, -31, -8, -31, -7, -31, -6, -31, -5, -31, -4, -31, -3, -31, -2, -31, -1, -31, 0, -31, 1, -31, 2, -31, 3, -31, 4, -31, 5, -31, 6, -31, 7, -31, 8, -31, 9, -31, 10, -31, 11, -31, 12, -31, 13, -31, 14, -31, 15, -31, 16, -31, 17, -31, 18, -31, 19, -31, 20, -31, 21, -31, 22, -31, 23, -31, 24, -31, 25, -31, 26, -31, 27, -31, 28, -31, 29, -31, 30, -31, 31, -31, 32, -31, 33, -31, 34, -31, 35, -31, 36, -31, 37, -31, 38, -31, 39, -31, 40, -31, 41, -31, 42, -31, 43, -31, 44, -31, 45, -31, 46, -31, 47, -31, 48, -31, 49, -31, -29, -30, -28, -30, -27, -30, -26, -30, -25, -30, -24, -30, -23, -30, -22, -30, -21, -30, -20, -30, -19, -30, -18, -30, -17, -30, -16, -30, -15, -30, -14, -30, -13, -30, -12, -30, -11, -30, -10, -30, -9, -30, -8, -30, -7, -30, -6, -30, -5, -30, -4, -30, -3, -30, -2, -30, -1, -30, 0, -30, 1, -30, 2, -30, 3, -30, 4, -30, 5, -30, 6, -30, 7, -30, 8, -30, 9, -30, 10, -30, 11, -30, 12, -30, 13, -30, 14, -30, 15, -30, 16, -30, 17, -30, 18, -30, 19, -30, 20, -30, 21, -30, 22, -30, 23, -30, 24, -30, 25, -30, 26, -30, 27, -30, 28, -30, 29, -30, 30, -30, 31, -30, 32, -30, 33, -30, 34, -30, 35, -30, 36, -30, 37, -30, 38, -30, 39, -30, 40, -30, 41, -30, 42, -30, 43, -30, 44, -30, 45, -30, 46, -30, 47, -30, 48, -30, 49, -30, -28, -29, -27, -29, -26, -29, -25, -29, -24, -29, -23, -29, -22, -29, -21, -29, -20, -29, -19, -29, -18, -29, -17, -29, -16, -29, -15, -29, -14, -29, -13, -29, -12, -29, -11, -29, -10, -29, -9, -29, -8, -29, -7, -29, -6, -29, -5, -29, -4, -29, -3, -29, -2, -29, -1, -29, 0, -29, 1, -29, 2, -29, 3, -29, 4, -29, 5, -29, 6, -29, 7, -29, 8, -29, 9, -29, 10, -29, 11, -29, 12, -29, 13, -29, 14, -29, 15, -29, 16, -29, 17, -29, 18, -29, 19, -29, 20, -29, 21, -29, 22, -29, 23, -29, 24, -29, 25, -29, 26, -29, 27, -29, 28, -29, 29, -29, 30, -29, 31, -29, 32, -29, 33, -29, 34, -29, 35, -29, 36, -29, 37, -29, 38, -29, 39, -29, 40, -29, 41, -29, 42, -29, 43, -29, 44, -29, 45, -29, 46, -29, 47, -29, 48, -29, 49, -29, -27, -28, -26, -28, -25, -28, -24, -28, -23, -28, -22, -28, -21, -28, -20, -28, -19, -28, -18, -28, -17, -28, -16, -28, -15, -28, -14, -28, -13, -28, -12, -28, -11, -28, -10, -28, -9, -28, -8, -28, -7, -28, -6, -28, -5, -28, -4, -28, -3, -28, -2, -28, -1, -28, 0, -28, 1, -28, 2, -28, 3, -28, 4, -28, 5, -28, 6, -28, 7, -28, 8, -28, 9, -28, 10, -28, 11, -28, 12, -28, 13, -28, 14, -28, 15, -28, 16, -28, 17, -28, 18, -28, 19, -28, 20, -28, 21, -28, 22, -28, 23, -28, 24, -28, 25, -28, 26, -28, 27, -28, 28, -28, 29, -28, 30, -28, 31, -28, 32, -28, 33, -28, 34, -28, 35, -28, 36, -28, 37, -28, 38, -28, 39, -28, 40, -28, 41, -28, 42, -28, 43, -28, 44, -28, 45, -28, 46, -28, 47, -28, 48, -28, 49, -28, -26, -27, -25, -27, -24, -27, -23, -27, -22, -27, -21, -27, -20, -27, -19, -27, -18, -27, -17, -27, -16, -27, -15, -27, -14, -27, -13, -27, -12, -27, -11, -27, -10, -27, -9, -27, -8, -27, -7, -27, -6, -27, -5, -27, -4, -27, -3, -27, -2, -27, -1, -27, 0, -27, 1, -27, 2, -27, 3, -27, 4, -27, 5, -27, 6, -27, 7, -27, 8, -27, 9, -27, 10, -27, 11, -27, 12, -27, 13, -27, 14, -27, 15, -27, 16, -27, 17, -27, 18, -27, 19, -27, 20, -27, 21, -27, 22, -27, 23, -27, 24, -27, 25, -27, 26, -27, 27, -27, 28, -27, 29, -27, 30, -27, 31, -27, 32, -27, 33, -27, 34, -27, 35, -27, 36, -27, 37, -27, 38, -27, 39, -27, 40, -27, 41, -27, 42, -27, 43, -27, 44, -27, 45, -27, 46, -27, 47, -27, 48, -27, 49, -27, -25, -26, -24, -26, -23, -26, -22, -26, -21, -26, -20, -26, -19, -26, -18, -26, -17, -26, -16, -26, -15, -26, -14, -26, -13, -26, -12, -26, -11, -26, -10, -26, -9, -26, -8, -26, -7, -26, -6, -26, -5, -26, -4, -26, -3, -26, -2, -26, -1, -26, 0, -26, 1, -26, 2, -26, 3, -26, 4, -26, 5, -26, 6, -26, 7, -26, 8, -26, 9, -26, 10, -26, 11, -26, 12, -26, 13, -26, 14, -26, 15, -26, 16, -26, 17, -26, 18, -26, 19, -26, 20, -26, 21, -26, 22, -26, 23, -26, 24, -26, 25, -26, 26, -26, 27, -26, 28, -26, 29, -26, 30, -26, 31, -26, 32, -26, 33, -26, 34, -26, 35, -26, 36, -26, 37, -26, 38, -26, 39, -26, 40, -26, 41, -26, 42, -26, 43, -26, 44, -26, 45, -26, 46, -26, 47, -26, 48, -26, 49, -26, -24, -25, -23, -25, -22, -25, -21, -25, -20, -25, -19, -25, -18, -25, -17, -25, -16, -25, -15, -25, -14, -25, -13, -25, -12, -25, -11, -25, -10, -25, -9, -25, -8, -25, -7, -25, -6, -25, -5, -25, -4, -25, -3, -25, -2, -25, -1, -25, 0, -25, 1, -25, 2, -25, 3, -25, 4, -25, 5, -25, 6, -25, 7, -25, 8, -25, 9, -25, 10, -25, 11, -25, 12, -25, 13, -25, 14, -25, 15, -25, 16, -25, 17, -25, 18, -25, 19, -25, 20, -25, 21, -25, 22, -25, 23, -25, 24, -25, 25, -25, 26, -25, 27, -25, 28, -25, 29, -25, 30, -25, 31, -25, 32, -25, 33, -25, 34, -25, 35, -25, 36, -25, 37, -25, 38, -25, 39, -25, 40, -25, 41, -25, 42, -25, 43, -25, 44, -25, 45, -25, 46, -25, 47, -25, 48, -25, 49, -25, -23, -24, -22, -24, -21, -24, -20, -24, -19, -24, -18, -24, -17, -24, -16, -24, -15, -24, -14, -24, -13, -24, -12, -24, -11, -24, -10, -24, -9, -24, -8, -24, -7, -24, -6, -24, -5, -24, -4, -24, -3, -24, -2, -24, -1, -24, 0, -24, 1, -24, 2, -24, 3, -24, 4, -24, 5, -24, 6, -24, 7, -24, 8, -24, 9, -24, 10, -24, 11, -24, 12, -24, 13, -24, 14, -24, 15, -24, 16, -24, 17, -24, 18, -24, 19, -24, 20, -24, 21, -24, 22, -24, 23, -24, 24, -24, 25, -24, 26, -24, 27, -24, 28, -24, 29, -24, 30, -24, 31, -24, 32, -24, 33, -24, 34, -24, 35, -24, 36, -24, 37, -24, 38, -24, 39, -24, 40, -24, 41, -24, 42, -24, 43, -24, 44, -24, 45, -24, 46, -24, 47, -24, 48, -24, 49, -24, -22, -23, -21, -23, -20, -23, -19, -23, -18, -23, -17, -23, -16, -23, -15, -23, -14, -23, -13, -23, -12, -23, -11, -23, -10, -23, -9, -23, -8, -23, -7, -23, -6, -23, -5, -23, -4, -23, -3, -23, -2, -23, -1, -23, 0, -23, 1, -23, 2, -23, 3, -23, 4, -23, 5, -23, 6, -23, 7, -23, 8, -23, 9, -23, 10, -23, 11, -23, 12, -23, 13, -23, 14, -23, 15, -23, 16, -23, 17, -23, 18, -23, 19, -23, 20, -23, 21, -23, 22, -23, 23, -23, 24, -23, 25, -23, 26, -23, 27, -23, 28, -23, 29, -23, 30, -23, 31, -23, 32, -23, 33, -23, 34, -23, 35, -23, 36, -23, 37, -23, 38, -23, 39, -23, 40, -23, 41, -23, 42, -23, 43, -23, 44, -23, 45, -23, 46, -23, 47, -23, 48, -23, 49, -23, -21, -22, -20, -22, -19, -22, -18, -22, -17, -22, -16, -22, -15, -22, -14, -22, -13, -22, -12, -22, -11, -22, -10, -22, -9, -22, -8, -22, -7, -22, -6, -22, -5, -22, -4, -22, -3, -22, -2, -22, -1, -22, 0, -22, 1, -22, 2, -22, 3, -22, 4, -22, 5, -22, 6, -22, 7, -22, 8, -22, 9, -22, 10, -22, 11, -22, 12, -22, 13, -22, 14, -22, 15, -22, 16, -22, 17, -22, 18, -22, 19, -22, 20, -22, 21, -22, 22, -22, 23, -22, 24, -22, 25, -22, 26, -22, 27, -22, 28, -22, 29, -22, 30, -22, 31, -22, 32, -22, 33, -22, 34, -22, 35, -22, 36, -22, 37, -22, 38, -22, 39, -22, 40, -22, 41, -22, 42, -22, 43, -22, 44, -22, 45, -22, 46, -22, 47, -22, 48, -22, 49, -22, -20, -21, -19, -21, -18, -21, -17, -21, -16, -21, -15, -21, -14, -21, -13, -21, -12, -21, -11, -21, -10, -21, -9, -21, -8, -21, -7, -21, -6, -21, -5, -21, -4, -21, -3, -21, -2, -21, -1, -21, 0, -21, 1, -21, 2, -21, 3, -21, 4, -21, 5, -21, 6, -21, 7, -21, 8, -21, 9, -21, 10, -21, 11, -21, 12, -21, 13, -21, 14, -21, 15, -21, 16, -21, 17, -21, 18, -21, 19, -21, 20, -21, 21, -21, 22, -21, 23, -21, 24, -21, 25, -21, 26, -21, 27, -21, 28, -21, 29, -21, 30, -21, 31, -21, 32, -21, 33, -21, 34, -21, 35, -21, 36, -21, 37, -21, 38, -21, 39, -21, 40, -21, 41, -21, 42, -21, 43, -21, 44, -21, 45, -21, 46, -21, 47, -21, 48, -21, 49, -21, -19, -20, -18, -20, -17, -20, -16, -20, -15, -20, -14, -20, -13, -20, -12, -20, -11, -20, -10, -20, -9, -20, -8, -20, -7, -20, -6, -20, -5, -20, -4, -20, -3, -20, -2, -20, -1, -20, 0, -20, 1, -20, 2, -20, 3, -20, 4, -20, 5, -20, 6, -20, 7, -20, 8, -20, 9, -20, 10, -20, 11, -20, 12, -20, 13, -20, 14, -20, 15, -20, 16, -20, 17, -20, 18, -20, 19, -20, 20, -20, 21, -20, 22, -20, 23, -20, 24, -20, 25, -20, 26, -20, 27, -20, 28, -20, 29, -20, 30, -20, 31, -20, 32, -20, 33, -20, 34, -20, 35, -20, 36, -20, 37, -20, 38, -20, 39, -20, 40, -20, 41, -20, 42, -20, 43, -20, 44, -20, 45, -20, 46, -20, 47, -20, 48, -20, 49, -20, -18, -19, -17, -19, -16, -19, -15, -19, -14, -19, -13, -19, -12, -19, -11, -19, -10, -19, -9, -19, -8, -19, -7, -19, -6, -19, -5, -19, -4, -19, -3, -19, -2, -19, -1, -19, 0, -19, 1, -19, 2, -19, 3, -19, 4, -19, 5, -19, 6, -19, 7, -19, 8, -19, 9, -19, 10, -19, 11, -19, 12, -19, 13, -19, 14, -19, 15, -19, 16, -19, 17, -19, 18, -19, 19, -19, 20, -19, 21, -19, 22, -19, 23, -19, 24, -19, 25, -19, 26, -19, 27, -19, 28, -19, 29, -19, 30, -19, 31, -19, 32, -19, 33, -19, 34, -19, 35, -19, 36, -19, 37, -19, 38, -19, 39, -19, 40, -19, 41, -19, 42, -19, 43, -19, 44, -19, 45, -19, 46, -19, 47, -19, 48, -19, 49, -19, -17, -18, -16, -18, -15, -18, -14, -18, -13, -18, -12, -18, -11, -18, -10, -18, -9, -18, -8, -18, -7, -18, -6, -18, -5, -18, -4, -18, -3, -18, -2, -18, -1, -18, 0, -18, 1, -18, 2, -18, 3, -18, 4, -18, 5, -18, 6, -18, 7, -18, 8, -18, 9, -18, 10, -18, 11, -18, 12, -18, 13, -18, 14, -18, 15, -18, 16, -18, 17, -18, 18, -18, 19, -18, 20, -18, 21, -18, 22, -18, 23, -18, 24, -18, 25, -18, 26, -18, 27, -18, 28, -18, 29, -18, 30, -18, 31, -18, 32, -18, 33, -18, 34, -18, 35, -18, 36, -18, 37, -18, 38, -18, 39, -18, 40, -18, 41, -18, 42, -18, 43, -18, 44, -18, 45, -18, 46, -18, 47, -18, 48, -18, 49, -18, -16, -17, -15, -17, -14, -17, -13, -17, -12, -17, -11, -17, -10, -17, -9, -17, -8, -17, -7, -17, -6, -17, -5, -17, -4, -17, -3, -17, -2, -17, -1, -17, 0, -17, 1, -17, 2, -17, 3, -17, 4, -17, 5, -17, 6, -17, 7, -17, 8, -17, 9, -17, 10, -17, 11, -17, 12, -17, 13, -17, 14, -17, 15, -17, 16, -17, 17, -17, 18, -17, 19, -17, 20, -17, 21, -17, 22, -17, 23, -17, 24, -17, 25, -17, 26, -17, 27, -17, 28, -17, 29, -17, 30, -17, 31, -17, 32, -17, 33, -17, 34, -17, 35, -17, 36, -17, 37, -17, 38, -17, 39, -17, 40, -17, 41, -17, 42, -17, 43, -17, 44, -17, 45, -17, 46, -17, 47, -17, 48, -17, 49, -17, -15, -16, -14, -16, -13, -16, -12, -16, -11, -16, -10, -16, -9, -16, -8, -16, -7, -16, -6, -16, -5, -16, -4, -16, -3, -16, -2, -16, -1, -16, 0, -16, 1, -16, 2, -16, 3, -16, 4, -16, 5, -16, 6, -16, 7, -16, 8, -16, 9, -16, 10, -16, 11, -16, 12, -16, 13, -16, 14, -16, 15, -16, 16, -16, 17, -16, 18, -16, 19, -16, 20, -16, 21, -16, 22, -16, 23, -16, 24, -16, 25, -16, 26, -16, 27, -16, 28, -16, 29, -16, 30, -16, 31, -16, 32, -16, 33, -16, 34, -16, 35, -16, 36, -16, 37, -16, 38, -16, 39, -16, 40, -16, 41, -16, 42, -16, 43, -16, 44, -16, 45, -16, 46, -16, 47, -16, 48, -16, 49, -16, -14, -15, -13, -15, -12, -15, -11, -15, -10, -15, -9, -15, -8, -15, -7, -15, -6, -15, -5, -15, -4, -15, -3, -15, -2, -15, -1, -15, 0, -15, 1, -15, 2, -15, 3, -15, 4, -15, 5, -15, 6, -15, 7, -15, 8, -15, 9, -15, 10, -15, 11, -15, 12, -15, 13, -15, 14, -15, 15, -15, 16, -15, 17, -15, 18, -15, 19, -15, 20, -15, 21, -15, 22, -15, 23, -15, 24, -15, 25, -15, 26, -15, 27, -15, 28, -15, 29, -15, 30, -15, 31, -15, 32, -15, 33, -15, 34, -15, 35, -15, 36, -15, 37, -15, 38, -15, 39, -15, 40, -15, 41, -15, 42, -15, 43, -15, 44, -15, 45, -15, 46, -15, 47, -15, 48, -15, 49, -15, -13, -14, -12, -14, -11, -14, -10, -14, -9, -14, -8, -14, -7, -14, -6, -14, -5, -14, -4, -14, -3, -14, -2, -14, -1, -14, 0, -14, 1, -14, 2, -14, 3, -14, 4, -14, 5, -14, 6, -14, 7, -14, 8, -14, 9, -14, 10, -14, 11, -14, 12, -14, 13, -14, 14, -14, 15, -14, 16, -14, 17, -14, 18, -14, 19, -14, 20, -14, 21, -14, 22, -14, 23, -14, 24, -14, 25, -14, 26, -14, 27, -14, 28, -14, 29, -14, 30, -14, 31, -14, 32, -14, 33, -14, 34, -14, 35, -14, 36, -14, 37, -14, 38, -14, 39, -14, 40, -14, 41, -14, 42, -14, 43, -14, 44, -14, 45, -14, 46, -14, 47, -14, 48, -14, 49, -14, -12, -13, -11, -13, -10, -13, -9, -13, -8, -13, -7, -13, -6, -13, -5, -13, -4, -13, -3, -13, -2, -13, -1, -13, 0, -13, 1, -13, 2, -13, 3, -13, 4, -13, 5, -13, 6, -13, 7, -13, 8, -13, 9, -13, 10, -13, 11, -13, 12, -13, 13, -13, 14, -13, 15, -13, 16, -13, 17, -13, 18, -13, 19, -13, 20, -13, 21, -13, 22, -13, 23, -13, 24, -13, 25, -13, 26, -13, 27, -13, 28, -13, 29, -13, 30, -13, 31, -13, 32, -13, 33, -13, 34, -13, 35, -13, 36, -13, 37, -13, 38, -13, 39, -13, 40, -13, 41, -13, 42, -13, 43, -13, 44, -13, 45, -13, 46, -13, 47, -13, 48, -13, 49, -13, -11, -12, -10, -12, -9, -12, -8, -12, -7, -12, -6, -12, -5, -12, -4, -12, -3, -12, -2, -12, -1, -12, 0, -12, 1, -12, 2, -12, 3, -12, 4, -12, 5, -12, 6, -12, 7, -12, 8, -12, 9, -12, 10, -12, 11, -12, 12, -12, 13, -12, 14, -12, 15, -12, 16, -12, 17, -12, 18, -12, 19, -12, 20, -12, 21, -12, 22, -12, 23, -12, 24, -12, 25, -12, 26, -12, 27, -12, 28, -12, 29, -12, 30, -12, 31, -12, 32, -12, 33, -12, 34, -12, 35, -12, 36, -12, 37, -12, 38, -12, 39, -12, 40, -12, 41, -12, 42, -12, 43, -12, 44, -12, 45, -12, 46, -12, 47, -12, 48, -12, 49, -12, -10, -11, -9, -11, -8, -11, -7, -11, -6, -11, -5, -11, -4, -11, -3, -11, -2, -11, -1, -11, 0, -11, 1, -11, 2, -11, 3, -11, 4, -11, 5, -11, 6, -11, 7, -11, 8, -11, 9, -11, 10, -11, 11, -11, 12, -11, 13, -11, 14, -11, 15, -11, 16, -11, 17, -11, 18, -11, 19, -11, 20, -11, 21, -11, 22, -11, 23, -11, 24, -11, 25, -11, 26, -11, 27, -11, 28, -11, 29, -11, 30, -11, 31, -11, 32, -11, 33, -11, 34, -11, 35, -11, 36, -11, 37, -11, 38, -11, 39, -11, 40, -11, 41, -11, 42, -11, 43, -11, 44, -11, 45, -11, 46, -11, 47, -11, 48, -11, 49, -11, -9, -10, -8, -10, -7, -10, -6, -10, -5, -10, -4, -10, -3, -10, -2, -10, -1, -10, 0, -10, 1, -10, 2, -10, 3, -10, 4, -10, 5, -10, 6, -10, 7, -10, 8, -10, 9, -10, 10, -10, 11, -10, 12, -10, 13, -10, 14, -10, 15, -10, 16, -10, 17, -10, 18, -10, 19, -10, 20, -10, 21, -10, 22, -10, 23, -10, 24, -10, 25, -10, 26, -10, 27, -10, 28, -10, 29, -10, 30, -10, 31, -10, 32, -10, 33, -10, 34, -10, 35, -10, 36, -10, 37, -10, 38, -10, 39, -10, 40, -10, 41, -10, 42, -10, 43, -10, 44, -10, 45, -10, 46, -10, 47, -10, 48, -10, 49, -10, -8, -9, -7, -9, -6, -9, -5, -9, -4, -9, -3, -9, -2, -9, -1, -9, 0, -9, 1, -9, 2, -9, 3, -9, 4, -9, 5, -9, 6, -9, 7, -9, 8, -9, 9, -9, 10, -9, 11, -9, 12, -9, 13, -9, 14, -9, 15, -9, 16, -9, 17, -9, 18, -9, 19, -9, 20, -9, 21, -9, 22, -9, 23, -9, 24, -9, 25, -9, 26, -9, 27, -9, 28, -9, 29, -9, 30, -9, 31, -9, 32, -9, 33, -9, 34, -9, 35, -9, 36, -9, 37, -9, 38, -9, 39, -9, 40, -9, 41, -9, 42, -9, 43, -9, 44, -9, 45, -9, 46, -9, 47, -9, 48, -9, 49, -9, -7, -8, -6, -8, -5, -8, -4, -8, -3, -8, -2, -8, -1, -8, 0, -8, 1, -8, 2, -8, 3, -8, 4, -8, 5, -8, 6, -8, 7, -8, 8, -8, 9, -8, 10, -8, 11, -8, 12, -8, 13, -8, 14, -8, 15, -8, 16, -8, 17, -8, 18, -8, 19, -8, 20, -8, 21, -8, 22, -8, 23, -8, 24, -8, 25, -8, 26, -8, 27, -8, 28, -8, 29, -8, 30, -8, 31, -8, 32, -8, 33, -8, 34, -8, 35, -8, 36, -8, 37, -8, 38, -8, 39, -8, 40, -8, 41, -8, 42, -8, 43, -8, 44, -8, 45, -8, 46, -8, 47, -8, 48, -8, 49, -8, -6, -7, -5, -7, -4, -7, -3, -7, -2, -7, -1, -7, 0, -7, 1, -7, 2, -7, 3, -7, 4, -7, 5, -7, 6, -7, 7, -7, 8, -7, 9, -7, 10, -7, 11, -7, 12, -7, 13, -7, 14, -7, 15, -7, 16, -7, 17, -7, 18, -7, 19, -7, 20, -7, 21, -7, 22, -7, 23, -7, 24, -7, 25, -7, 26, -7, 27, -7, 28, -7, 29, -7, 30, -7, 31, -7, 32, -7, 33, -7, 34, -7, 35, -7, 36, -7, 37, -7, 38, -7, 39, -7, 40, -7, 41, -7, 42, -7, 43, -7, 44, -7, 45, -7, 46, -7, 47, -7, 48, -7, 49, -7, -5, -6, -4, -6, -3, -6, -2, -6, -1, -6, 0, -6, 1, -6, 2, -6, 3, -6, 4, -6, 5, -6, 6, -6, 7, -6, 8, -6, 9, -6, 10, -6, 11, -6, 12, -6, 13, -6, 14, -6, 15, -6, 16, -6, 17, -6, 18, -6, 19, -6, 20, -6, 21, -6, 22, -6, 23, -6, 24, -6, 25, -6, 26, -6, 27, -6, 28, -6, 29, -6, 30, -6, 31, -6, 32, -6, 33, -6, 34, -6, 35, -6, 36, -6, 37, -6, 38, -6, 39, -6, 40, -6, 41, -6, 42, -6, 43, -6, 44, -6, 45, -6, 46, -6, 47, -6, 48, -6, 49, -6, -4, -5, -3, -5, -2, -5, -1, -5, 0, -5, 1, -5, 2, -5, 3, -5, 4, -5, 5, -5, 6, -5, 7, -5, 8, -5, 9, -5, 10, -5, 11, -5, 12, -5, 13, -5, 14, -5, 15, -5, 16, -5, 17, -5, 18, -5, 19, -5, 20, -5, 21, -5, 22, -5, 23, -5, 24, -5, 25, -5, 26, -5, 27, -5, 28, -5, 29, -5, 30, -5, 31, -5, 32, -5, 33, -5, 34, -5, 35, -5, 36, -5, 37, -5, 38, -5, 39, -5, 40, -5, 41, -5, 42, -5, 43, -5, 44, -5, 45, -5, 46, -5, 47, -5, 48, -5, 49, -5, -3, -4, -2, -4, -1, -4, 0, -4, 1, -4, 2, -4, 3, -4, 4, -4, 5, -4, 6, -4, 7, -4, 8, -4, 9, -4, 10, -4, 11, -4, 12, -4, 13, -4, 14, -4, 15, -4, 16, -4, 17, -4, 18, -4, 19, -4, 20, -4, 21, -4, 22, -4, 23, -4, 24, -4, 25, -4, 26, -4, 27, -4, 28, -4, 29, -4, 30, -4, 31, -4, 32, -4, 33, -4, 34, -4, 35, -4, 36, -4, 37, -4, 38, -4, 39, -4, 40, -4, 41, -4, 42, -4, 43, -4, 44, -4, 45, -4, 46, -4, 47, -4, 48, -4, 49, -4, -2, -3, -1, -3, 0, -3, 1, -3, 2, -3, 3, -3, 4, -3, 5, -3, 6, -3, 7, -3, 8, -3, 9, -3, 10, -3, 11, -3, 12, -3, 13, -3, 14, -3, 15, -3, 16, -3, 17, -3, 18, -3, 19, -3, 20, -3, 21, -3, 22, -3, 23, -3, 24, -3, 25, -3, 26, -3, 27, -3, 28, -3, 29, -3, 30, -3, 31, -3, 32, -3, 33, -3, 34, -3, 35, -3, 36, -3, 37, -3, 38, -3, 39, -3, 40, -3, 41, -3, 42, -3, 43, -3, 44, -3, 45, -3, 46, -3, 47, -3, 48, -3, 49, -3, -1, -2, 0, -2, 1, -2, 2, -2, 3, -2, 4, -2, 5, -2, 6, -2, 7, -2, 8, -2, 9, -2, 10, -2, 11, -2, 12, -2, 13, -2, 14, -2, 15, -2, 16, -2, 17, -2, 18, -2, 19, -2, 20, -2, 21, -2, 22, -2, 23, -2, 24, -2, 25, -2, 26, -2, 27, -2, 28, -2, 29, -2, 30, -2, 31, -2, 32, -2, 33, -2, 34, -2, 35, -2, 36, -2, 37, -2, 38, -2, 39, -2, 40, -2, 41, -2, 42, -2, 43, -2, 44, -2, 45, -2, 46, -2, 47, -2, 48, -2, 49, -2, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1, 5, -1, 6, -1, 7, -1, 8, -1, 9, -1, 10, -1, 11, -1, 12, -1, 13, -1, 14, -1, 15, -1, 16, -1, 17, -1, 18, -1, 19, -1, 20, -1, 21, -1, 22, -1, 23, -1, 24, -1, 25, -1, 26, -1, 27, -1, 28, -1, 29, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 38, -1, 39, -1, 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, 49, -1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1, 40, 1, 41, 1, 42, 1, 43, 1, 44, 1, 45, 1, 46, 1, 47, 1, 48, 1, 49, 1, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23, 2, 24, 2, 25, 2, 26, 2, 27, 2, 28, 2, 29, 2, 30, 2, 31, 2, 32, 2, 33, 2, 34, 2, 35, 2, 36, 2, 37, 2, 38, 2, 39, 2, 40, 2, 41, 2, 42, 2, 43, 2, 44, 2, 45, 2, 46, 2, 47, 2, 48, 2, 49, 2, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 3, 11, 3, 12, 3, 13, 3, 14, 3, 15, 3, 16, 3, 17, 3, 18, 3, 19, 3, 20, 3, 21, 3, 22, 3, 23, 3, 24, 3, 25, 3, 26, 3, 27, 3, 28, 3, 29, 3, 30, 3, 31, 3, 32, 3, 33, 3, 34, 3, 35, 3, 36, 3, 37, 3, 38, 3, 39, 3, 40, 3, 41, 3, 42, 3, 43, 3, 44, 3, 45, 3, 46, 3, 47, 3, 48, 3, 49, 3, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 4, 12, 4, 13, 4, 14, 4, 15, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 22, 4, 23, 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, 29, 4, 30, 4, 31, 4, 32, 4, 33, 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, 4, 44, 4, 45, 4, 46, 4, 47, 4, 48, 4, 49, 4, 6, 5, 7, 5, 8, 5, 9, 5, 10, 5, 11, 5, 12, 5, 13, 5, 14, 5, 15, 5, 16, 5, 17, 5, 18, 5, 19, 5, 20, 5, 21, 5, 22, 5, 23, 5, 24, 5, 25, 5, 26, 5, 27, 5, 28, 5, 29, 5, 30, 5, 31, 5, 32, 5, 33, 5, 34, 5, 35, 5, 36, 5, 37, 5, 38, 5, 39, 5, 40, 5, 41, 5, 42, 5, 43, 5, 44, 5, 45, 5, 46, 5, 47, 5, 48, 5, 49, 5, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 6, 16, 6, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6, 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6, 48, 6, 49, 6, 8, 7, 9, 7, 10, 7, 11, 7, 12, 7, 13, 7, 14, 7, 15, 7, 16, 7, 17, 7, 18, 7, 19, 7, 20, 7, 21, 7, 22, 7, 23, 7, 24, 7, 25, 7, 26, 7, 27, 7, 28, 7, 29, 7, 30, 7, 31, 7, 32, 7, 33, 7, 34, 7, 35, 7, 36, 7, 37, 7, 38, 7, 39, 7, 40, 7, 41, 7, 42, 7, 43, 7, 44, 7, 45, 7, 46, 7, 47, 7, 48, 7, 49, 7, 9, 8, 10, 8, 11, 8, 12, 8, 13, 8, 14, 8, 15, 8, 16, 8, 17, 8, 18, 8, 19, 8, 20, 8, 21, 8, 22, 8, 23, 8, 24, 8, 25, 8, 26, 8, 27, 8, 28, 8, 29, 8, 30, 8, 31, 8, 32, 8, 33, 8, 34, 8, 35, 8, 36, 8, 37, 8, 38, 8, 39, 8, 40, 8, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 10, 9, 11, 9, 12, 9, 13, 9, 14, 9, 15, 9, 16, 9, 17, 9, 18, 9, 19, 9, 20, 9, 21, 9, 22, 9, 23, 9, 24, 9, 25, 9, 26, 9, 27, 9, 28, 9, 29, 9, 30, 9, 31, 9, 32, 9, 33, 9, 34, 9, 35, 9, 36, 9, 37, 9, 38, 9, 39, 9, 40, 9, 41, 9, 42, 9, 43, 9, 44, 9, 45, 9, 46, 9, 47, 9, 48, 9, 49, 9, 11, 10, 12, 10, 13, 10, 14, 10, 15, 10, 16, 10, 17, 10, 18, 10, 19, 10, 20, 10, 21, 10, 22, 10, 23, 10, 24, 10, 25, 10, 26, 10, 27, 10, 28, 10, 29, 10, 30, 10, 31, 10, 32, 10, 33, 10, 34, 10, 35, 10, 36, 10, 37, 10, 38, 10, 39, 10, 40, 10, 41, 10, 42, 10, 43, 10, 44, 10, 45, 10, 46, 10, 47, 10, 48, 10, 49, 10, 12, 11, 13, 11, 14, 11, 15, 11, 16, 11, 17, 11, 18, 11, 19, 11, 20, 11, 21, 11, 22, 11, 23, 11, 24, 11, 25, 11, 26, 11, 27, 11, 28, 11, 29, 11, 30, 11, 31, 11, 32, 11, 33, 11, 34, 11, 35, 11, 36, 11, 37, 11, 38, 11, 39, 11, 40, 11, 41, 11, 42, 11, 43, 11, 44, 11, 45, 11, 46, 11, 47, 11, 48, 11, 49, 11, 13, 12, 14, 12, 15, 12, 16, 12, 17, 12, 18, 12, 19, 12, 20, 12, 21, 12, 22, 12, 23, 12, 24, 12, 25, 12, 26, 12, 27, 12, 28, 12, 29, 12, 30, 12, 31, 12, 32, 12, 33, 12, 34, 12, 35, 12, 36, 12, 37, 12, 38, 12, 39, 12, 40, 12, 41, 12, 42, 12, 43, 12, 44, 12, 45, 12, 46, 12, 47, 12, 48, 12, 49, 12, 14, 13, 15, 13, 16, 13, 17, 13, 18, 13, 19, 13, 20, 13, 21, 13, 22, 13, 23, 13, 24, 13, 25, 13, 26, 13, 27, 13, 28, 13, 29, 13, 30, 13, 31, 13, 32, 13, 33, 13, 34, 13, 35, 13, 36, 13, 37, 13, 38, 13, 39, 13, 40, 13, 41, 13, 42, 13, 43, 13, 44, 13, 45, 13, 46, 13, 47, 13, 48, 13, 49, 13, 15, 14, 16, 14, 17, 14, 18, 14, 19, 14, 20, 14, 21, 14, 22, 14, 23, 14, 24, 14, 25, 14, 26, 14, 27, 14, 28, 14, 29, 14, 30, 14, 31, 14, 32, 14, 33, 14, 34, 14, 35, 14, 36, 14, 37, 14, 38, 14, 39, 14, 40, 14, 41, 14, 42, 14, 43, 14, 44, 14, 45, 14, 46, 14, 47, 14, 48, 14, 49, 14, 16, 15, 17, 15, 18, 15, 19, 15, 20, 15, 21, 15, 22, 15, 23, 15, 24, 15, 25, 15, 26, 15, 27, 15, 28, 15, 29, 15, 30, 15, 31, 15, 32, 15, 33, 15, 34, 15, 35, 15, 36, 15, 37, 15, 38, 15, 39, 15, 40, 15, 41, 15, 42, 15, 43, 15, 44, 15, 45, 15, 46, 15, 47, 15, 48, 15, 49, 15, 17, 16, 18, 16, 19, 16, 20, 16, 21, 16, 22, 16, 23, 16, 24, 16, 25, 16, 26, 16, 27, 16, 28, 16, 29, 16, 30, 16, 31, 16, 32, 16, 33, 16, 34, 16, 35, 16, 36, 16, 37, 16, 38, 16, 39, 16, 40, 16, 41, 16, 42, 16, 43, 16, 44, 16, 45, 16, 46, 16, 47, 16, 48, 16, 49, 16, 18, 17, 19, 17, 20, 17, 21, 17, 22, 17, 23, 17, 24, 17, 25, 17, 26, 17, 27, 17, 28, 17, 29, 17, 30, 17, 31, 17, 32, 17, 33, 17, 34, 17, 35, 17, 36, 17, 37, 17, 38, 17, 39, 17, 40, 17, 41, 17, 42, 17, 43, 17, 44, 17, 45, 17, 46, 17, 47, 17, 48, 17, 49, 17, 19, 18, 20, 18, 21, 18, 22, 18, 23, 18, 24, 18, 25, 18, 26, 18, 27, 18, 28, 18, 29, 18, 30, 18, 31, 18, 32, 18, 33, 18, 34, 18, 35, 18, 36, 18, 37, 18, 38, 18, 39, 18, 40, 18, 41, 18, 42, 18, 43, 18, 44, 18, 45, 18, 46, 18, 47, 18, 48, 18, 49, 18, 20, 19, 21, 19, 22, 19, 23, 19, 24, 19, 25, 19, 26, 19, 27, 19, 28, 19, 29, 19, 30, 19, 31, 19, 32, 19, 33, 19, 34, 19, 35, 19, 36, 19, 37, 19, 38, 19, 39, 19, 40, 19, 41, 19, 42, 19, 43, 19, 44, 19, 45, 19, 46, 19, 47, 19, 48, 19, 49, 19, 21, 20, 22, 20, 23, 20, 24, 20, 25, 20, 26, 20, 27, 20, 28, 20, 29, 20, 30, 20, 31, 20, 32, 20, 33, 20, 34, 20, 35, 20, 36, 20, 37, 20, 38, 20, 39, 20, 40, 20, 41, 20, 42, 20, 43, 20, 44, 20, 45, 20, 46, 20, 47, 20, 48, 20, 49, 20, 22, 21, 23, 21, 24, 21, 25, 21, 26, 21, 27, 21, 28, 21, 29, 21, 30, 21, 31, 21, 32, 21, 33, 21, 34, 21, 35, 21, 36, 21, 37, 21, 38, 21, 39, 21, 40, 21, 41, 21, 42, 21, 43, 21, 44, 21, 45, 21, 46, 21, 47, 21, 48, 21, 49, 21, 23, 22, 24, 22, 25, 22, 26, 22, 27, 22, 28, 22, 29, 22, 30, 22, 31, 22, 32, 22, 33, 22, 34, 22, 35, 22, 36, 22, 37, 22, 38, 22, 39, 22, 40, 22, 41, 22, 42, 22, 43, 22, 44, 22, 45, 22, 46, 22, 47, 22, 48, 22, 49, 22, 24, 23, 25, 23, 26, 23, 27, 23, 28, 23, 29, 23, 30, 23, 31, 23, 32, 23, 33, 23, 34, 23, 35, 23, 36, 23, 37, 23, 38, 23, 39, 23, 40, 23, 41, 23, 42, 23, 43, 23, 44, 23, 45, 23, 46, 23, 47, 23, 48, 23, 49, 23, 25, 24, 26, 24, 27, 24, 28, 24, 29, 24, 30, 24, 31, 24, 32, 24, 33, 24, 34, 24, 35, 24, 36, 24, 37, 24, 38, 24, 39, 24, 40, 24, 41, 24, 42, 24, 43, 24, 44, 24, 45, 24, 46, 24, 47, 24, 48, 24, 49, 24, 26, 25, 27, 25, 28, 25, 29, 25, 30, 25, 31, 25, 32, 25, 33, 25, 34, 25, 35, 25, 36, 25, 37, 25, 38, 25, 39, 25, 40, 25, 41, 25, 42, 25, 43, 25, 44, 25, 45, 25, 46, 25, 47, 25, 48, 25, 49, 25, 27, 26, 28, 26, 29, 26, 30, 26, 31, 26, 32, 26, 33, 26, 34, 26, 35, 26, 36, 26, 37, 26, 38, 26, 39, 26, 40, 26, 41, 26, 42, 26, 43, 26, 44, 26, 45, 26, 46, 26, 47, 26, 48, 26, 49, 26, 28, 27, 29, 27, 30, 27, 31, 27, 32, 27, 33, 27, 34, 27, 35, 27, 36, 27, 37, 27, 38, 27, 39, 27, 40, 27, 41, 27, 42, 27, 43, 27, 44, 27, 45, 27, 46, 27, 47, 27, 48, 27, 49, 27, 29, 28, 30, 28, 31, 28, 32, 28, 33, 28, 34, 28, 35, 28, 36, 28, 37, 28, 38, 28, 39, 28, 40, 28, 41, 28, 42, 28, 43, 28, 44, 28, 45, 28, 46, 28, 47, 28, 48, 28, 49, 28, 30, 29, 31, 29, 32, 29, 33, 29, 34, 29, 35, 29, 36, 29, 37, 29, 38, 29, 39, 29, 40, 29, 41, 29, 42, 29, 43, 29, 44, 29, 45, 29, 46, 29, 47, 29, 48, 29, 49, 29, 31, 30, 32, 30, 33, 30, 34, 30, 35, 30, 36, 30, 37, 30, 38, 30, 39, 30, 40, 30, 41, 30, 42, 30, 43, 30, 44, 30, 45, 30, 46, 30, 47, 30, 48, 30, 49, 30, 32, 31, 33, 31, 34, 31, 35, 31, 36, 31, 37, 31, 38, 31, 39, 31, 40, 31, 41, 31, 42, 31, 43, 31, 44, 31, 45, 31, 46, 31, 47, 31, 48, 31, 49, 31, 33, 32, 34, 32, 35, 32, 36, 32, 37, 32, 38, 32, 39, 32, 40, 32, 41, 32, 42, 32, 43, 32, 44, 32, 45, 32, 46, 32, 47, 32, 48, 32, 49, 32, 34, 33, 35, 33, 36, 33, 37, 33, 38, 33, 39, 33, 40, 33, 41, 33, 42, 33, 43, 33, 44, 33, 45, 33, 46, 33, 47, 33, 48, 33, 49, 33, 35, 34, 36, 34, 37, 34, 38, 34, 39, 34, 40, 34, 41, 34, 42, 34, 43, 34, 44, 34, 45, 34, 46, 34, 47, 34, 48, 34, 49, 34, 36, 35, 37, 35, 38, 35, 39, 35, 40, 35, 41, 35, 42, 35, 43, 35, 44, 35, 45, 35, 46, 35, 47, 35, 48, 35, 49, 35, 37, 36, 38, 36, 39, 36, 40, 36, 41, 36, 42, 36, 43, 36, 44, 36, 45, 36, 46, 36, 47, 36, 48, 36, 49, 36, 38, 37, 39, 37, 40, 37, 41, 37, 42, 37, 43, 37, 44, 37, 45, 37, 46, 37, 47, 37, 48, 37, 49, 37, 39, 38, 40, 38, 41, 38, 42, 38, 43, 38, 44, 38, 45, 38, 46, 38, 47, 38, 48, 38, 49, 38, 40, 39, 41, 39, 42, 39, 43, 39, 44, 39, 45, 39, 46, 39, 47, 39, 48, 39, 49, 39, 41, 40, 42, 40, 43, 40, 44, 40, 45, 40, 46, 40, 47, 40, 48, 40, 49, 40, 42, 41, 43, 41, 44, 41, 45, 41, 46, 41, 47, 41, 48, 41, 49, 41, 43, 42, 44, 42, 45, 42, 46, 42, 47, 42, 48, 42, 49, 42, 44, 43, 45, 43, 46, 43, 47, 43, 48, 43, 49, 43, 45, 44, 46, 44, 47, 44, 48, 44, 49, 44, 46, 45, 47, 45, 48, 45, 49, 45, 47, 46, 48, 46, 49, 46, 48, 47, 49, 47, 49, 48, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 ], "z": [ 4901, 4901, 4804, 4804, 4709, 4709, 4616, 4616, 4525, 4525, 4436, 4436, 4349, 4349, 4264, 4264, 4181, 4181, 4100, 4100, 4021, 4021, 3944, 3944, 3869, 3869, 3796, 3796, 3725, 3725, 3656, 3656, 3589, 3589, 3524, 3524, 3461, 3461, 3400, 3400, 3341, 3341, 3284, 3284, 3229, 3229, 3176, 3176, 3125, 3125, 3076, 3076, 3029, 3029, 2984, 2984, 2941, 2941, 2900, 2900, 2861, 2861, 2824, 2824, 2789, 2789, 2756, 2756, 2725, 2725, 2696, 2696, 2669, 2669, 2644, 2644, 2621, 2621, 2600, 2600, 2581, 2581, 2564, 2564, 2549, 2549, 2536, 2536, 2525, 2525, 2516, 2516, 2509, 2509, 2504, 2504, 2501, 2501, 2500, 2500, 2501, 2501, 2504, 2504, 2509, 2509, 2516, 2516, 2525, 2525, 2536, 2536, 2549, 2549, 2564, 2564, 2581, 2581, 2600, 2600, 2621, 2621, 2644, 2644, 2669, 2669, 2696, 2696, 2725, 2725, 2756, 2756, 2789, 2789, 2824, 2824, 2861, 2861, 2900, 2900, 2941, 2941, 2984, 2984, 3029, 3029, 3076, 3076, 3125, 3125, 3176, 3176, 3229, 3229, 3284, 3284, 3341, 3341, 3400, 3400, 3461, 3461, 3524, 3524, 3589, 3589, 3656, 3656, 3725, 3725, 3796, 3796, 3869, 3869, 3944, 3944, 4021, 4021, 4100, 4100, 4181, 4181, 4264, 4264, 4349, 4349, 4436, 4436, 4525, 4525, 4616, 4616, 4709, 4709, 4804, 4804, 4901, 4901, 4705, 4705, 4610, 4610, 4517, 4517, 4426, 4426, 4337, 4337, 4250, 4250, 4165, 4165, 4082, 4082, 4001, 4001, 3922, 3922, 3845, 3845, 3770, 3770, 3697, 3697, 3626, 3626, 3557, 3557, 3490, 3490, 3425, 3425, 3362, 3362, 3301, 3301, 3242, 3242, 3185, 3185, 3130, 3130, 3077, 3077, 3026, 3026, 2977, 2977, 2930, 2930, 2885, 2885, 2842, 2842, 2801, 2801, 2762, 2762, 2725, 2725, 2690, 2690, 2657, 2657, 2626, 2626, 2597, 2597, 2570, 2570, 2545, 2545, 2522, 2522, 2501, 2501, 2482, 2482, 2465, 2465, 2450, 2450, 2437, 2437, 2426, 2426, 2417, 2417, 2410, 2410, 2405, 2405, 2402, 2402, 2401, 2401, 2402, 2402, 2405, 2405, 2410, 2410, 2417, 2417, 2426, 2426, 2437, 2437, 2450, 2450, 2465, 2465, 2482, 2482, 2501, 2501, 2522, 2522, 2545, 2545, 2570, 2570, 2597, 2597, 2626, 2626, 2657, 2657, 2690, 2690, 2725, 2725, 2762, 2762, 2801, 2801, 2842, 2842, 2885, 2885, 2930, 2930, 2977, 2977, 3026, 3026, 3077, 3077, 3130, 3130, 3185, 3185, 3242, 3242, 3301, 3301, 3362, 3362, 3425, 3425, 3490, 3490, 3557, 3557, 3626, 3626, 3697, 3697, 3770, 3770, 3845, 3845, 3922, 3922, 4001, 4001, 4082, 4082, 4165, 4165, 4250, 4250, 4337, 4337, 4426, 4426, 4517, 4517, 4610, 4610, 4705, 4705, 4802, 4802, 4513, 4513, 4420, 4420, 4329, 4329, 4240, 4240, 4153, 4153, 4068, 4068, 3985, 3985, 3904, 3904, 3825, 3825, 3748, 3748, 3673, 3673, 3600, 3600, 3529, 3529, 3460, 3460, 3393, 3393, 3328, 3328, 3265, 3265, 3204, 3204, 3145, 3145, 3088, 3088, 3033, 3033, 2980, 2980, 2929, 2929, 2880, 2880, 2833, 2833, 2788, 2788, 2745, 2745, 2704, 2704, 2665, 2665, 2628, 2628, 2593, 2593, 2560, 2560, 2529, 2529, 2500, 2500, 2473, 2473, 2448, 2448, 2425, 2425, 2404, 2404, 2385, 2385, 2368, 2368, 2353, 2353, 2340, 2340, 2329, 2329, 2320, 2320, 2313, 2313, 2308, 2308, 2305, 2305, 2304, 2304, 2305, 2305, 2308, 2308, 2313, 2313, 2320, 2320, 2329, 2329, 2340, 2340, 2353, 2353, 2368, 2368, 2385, 2385, 2404, 2404, 2425, 2425, 2448, 2448, 2473, 2473, 2500, 2500, 2529, 2529, 2560, 2560, 2593, 2593, 2628, 2628, 2665, 2665, 2704, 2704, 2745, 2745, 2788, 2788, 2833, 2833, 2880, 2880, 2929, 2929, 2980, 2980, 3033, 3033, 3088, 3088, 3145, 3145, 3204, 3204, 3265, 3265, 3328, 3328, 3393, 3393, 3460, 3460, 3529, 3529, 3600, 3600, 3673, 3673, 3748, 3748, 3825, 3825, 3904, 3904, 3985, 3985, 4068, 4068, 4153, 4153, 4240, 4240, 4329, 4329, 4420, 4420, 4513, 4513, 4608, 4608, 4705, 4705, 4325, 4325, 4234, 4234, 4145, 4145, 4058, 4058, 3973, 3973, 3890, 3890, 3809, 3809, 3730, 3730, 3653, 3653, 3578, 3578, 3505, 3505, 3434, 3434, 3365, 3365, 3298, 3298, 3233, 3233, 3170, 3170, 3109, 3109, 3050, 3050, 2993, 2993, 2938, 2938, 2885, 2885, 2834, 2834, 2785, 2785, 2738, 2738, 2693, 2693, 2650, 2650, 2609, 2609, 2570, 2570, 2533, 2533, 2498, 2498, 2465, 2465, 2434, 2434, 2405, 2405, 2378, 2378, 2353, 2353, 2330, 2330, 2309, 2309, 2290, 2290, 2273, 2273, 2258, 2258, 2245, 2245, 2234, 2234, 2225, 2225, 2218, 2218, 2213, 2213, 2210, 2210, 2209, 2209, 2210, 2210, 2213, 2213, 2218, 2218, 2225, 2225, 2234, 2234, 2245, 2245, 2258, 2258, 2273, 2273, 2290, 2290, 2309, 2309, 2330, 2330, 2353, 2353, 2378, 2378, 2405, 2405, 2434, 2434, 2465, 2465, 2498, 2498, 2533, 2533, 2570, 2570, 2609, 2609, 2650, 2650, 2693, 2693, 2738, 2738, 2785, 2785, 2834, 2834, 2885, 2885, 2938, 2938, 2993, 2993, 3050, 3050, 3109, 3109, 3170, 3170, 3233, 3233, 3298, 3298, 3365, 3365, 3434, 3434, 3505, 3505, 3578, 3578, 3653, 3653, 3730, 3730, 3809, 3809, 3890, 3890, 3973, 3973, 4058, 4058, 4145, 4145, 4234, 4234, 4325, 4325, 4418, 4418, 4513, 4513, 4610, 4610, 4141, 4141, 4052, 4052, 3965, 3965, 3880, 3880, 3797, 3797, 3716, 3716, 3637, 3637, 3560, 3560, 3485, 3485, 3412, 3412, 3341, 3341, 3272, 3272, 3205, 3205, 3140, 3140, 3077, 3077, 3016, 3016, 2957, 2957, 2900, 2900, 2845, 2845, 2792, 2792, 2741, 2741, 2692, 2692, 2645, 2645, 2600, 2600, 2557, 2557, 2516, 2516, 2477, 2477, 2440, 2440, 2405, 2405, 2372, 2372, 2341, 2341, 2312, 2312, 2285, 2285, 2260, 2260, 2237, 2237, 2216, 2216, 2197, 2197, 2180, 2180, 2165, 2165, 2152, 2152, 2141, 2141, 2132, 2132, 2125, 2125, 2120, 2120, 2117, 2117, 2116, 2116, 2117, 2117, 2120, 2120, 2125, 2125, 2132, 2132, 2141, 2141, 2152, 2152, 2165, 2165, 2180, 2180, 2197, 2197, 2216, 2216, 2237, 2237, 2260, 2260, 2285, 2285, 2312, 2312, 2341, 2341, 2372, 2372, 2405, 2405, 2440, 2440, 2477, 2477, 2516, 2516, 2557, 2557, 2600, 2600, 2645, 2645, 2692, 2692, 2741, 2741, 2792, 2792, 2845, 2845, 2900, 2900, 2957, 2957, 3016, 3016, 3077, 3077, 3140, 3140, 3205, 3205, 3272, 3272, 3341, 3341, 3412, 3412, 3485, 3485, 3560, 3560, 3637, 3637, 3716, 3716, 3797, 3797, 3880, 3880, 3965, 3965, 4052, 4052, 4141, 4141, 4232, 4232, 4325, 4325, 4420, 4420, 4517, 4517, 3961, 3961, 3874, 3874, 3789, 3789, 3706, 3706, 3625, 3625, 3546, 3546, 3469, 3469, 3394, 3394, 3321, 3321, 3250, 3250, 3181, 3181, 3114, 3114, 3049, 3049, 2986, 2986, 2925, 2925, 2866, 2866, 2809, 2809, 2754, 2754, 2701, 2701, 2650, 2650, 2601, 2601, 2554, 2554, 2509, 2509, 2466, 2466, 2425, 2425, 2386, 2386, 2349, 2349, 2314, 2314, 2281, 2281, 2250, 2250, 2221, 2221, 2194, 2194, 2169, 2169, 2146, 2146, 2125, 2125, 2106, 2106, 2089, 2089, 2074, 2074, 2061, 2061, 2050, 2050, 2041, 2041, 2034, 2034, 2029, 2029, 2026, 2026, 2025, 2025, 2026, 2026, 2029, 2029, 2034, 2034, 2041, 2041, 2050, 2050, 2061, 2061, 2074, 2074, 2089, 2089, 2106, 2106, 2125, 2125, 2146, 2146, 2169, 2169, 2194, 2194, 2221, 2221, 2250, 2250, 2281, 2281, 2314, 2314, 2349, 2349, 2386, 2386, 2425, 2425, 2466, 2466, 2509, 2509, 2554, 2554, 2601, 2601, 2650, 2650, 2701, 2701, 2754, 2754, 2809, 2809, 2866, 2866, 2925, 2925, 2986, 2986, 3049, 3049, 3114, 3114, 3181, 3181, 3250, 3250, 3321, 3321, 3394, 3394, 3469, 3469, 3546, 3546, 3625, 3625, 3706, 3706, 3789, 3789, 3874, 3874, 3961, 3961, 4050, 4050, 4141, 4141, 4234, 4234, 4329, 4329, 4426, 4426, 3785, 3785, 3700, 3700, 3617, 3617, 3536, 3536, 3457, 3457, 3380, 3380, 3305, 3305, 3232, 3232, 3161, 3161, 3092, 3092, 3025, 3025, 2960, 2960, 2897, 2897, 2836, 2836, 2777, 2777, 2720, 2720, 2665, 2665, 2612, 2612, 2561, 2561, 2512, 2512, 2465, 2465, 2420, 2420, 2377, 2377, 2336, 2336, 2297, 2297, 2260, 2260, 2225, 2225, 2192, 2192, 2161, 2161, 2132, 2132, 2105, 2105, 2080, 2080, 2057, 2057, 2036, 2036, 2017, 2017, 2000, 2000, 1985, 1985, 1972, 1972, 1961, 1961, 1952, 1952, 1945, 1945, 1940, 1940, 1937, 1937, 1936, 1936, 1937, 1937, 1940, 1940, 1945, 1945, 1952, 1952, 1961, 1961, 1972, 1972, 1985, 1985, 2000, 2000, 2017, 2017, 2036, 2036, 2057, 2057, 2080, 2080, 2105, 2105, 2132, 2132, 2161, 2161, 2192, 2192, 2225, 2225, 2260, 2260, 2297, 2297, 2336, 2336, 2377, 2377, 2420, 2420, 2465, 2465, 2512, 2512, 2561, 2561, 2612, 2612, 2665, 2665, 2720, 2720, 2777, 2777, 2836, 2836, 2897, 2897, 2960, 2960, 3025, 3025, 3092, 3092, 3161, 3161, 3232, 3232, 3305, 3305, 3380, 3380, 3457, 3457, 3536, 3536, 3617, 3617, 3700, 3700, 3785, 3785, 3872, 3872, 3961, 3961, 4052, 4052, 4145, 4145, 4240, 4240, 4337, 4337, 3613, 3613, 3530, 3530, 3449, 3449, 3370, 3370, 3293, 3293, 3218, 3218, 3145, 3145, 3074, 3074, 3005, 3005, 2938, 2938, 2873, 2873, 2810, 2810, 2749, 2749, 2690, 2690, 2633, 2633, 2578, 2578, 2525, 2525, 2474, 2474, 2425, 2425, 2378, 2378, 2333, 2333, 2290, 2290, 2249, 2249, 2210, 2210, 2173, 2173, 2138, 2138, 2105, 2105, 2074, 2074, 2045, 2045, 2018, 2018, 1993, 1993, 1970, 1970, 1949, 1949, 1930, 1930, 1913, 1913, 1898, 1898, 1885, 1885, 1874, 1874, 1865, 1865, 1858, 1858, 1853, 1853, 1850, 1850, 1849, 1849, 1850, 1850, 1853, 1853, 1858, 1858, 1865, 1865, 1874, 1874, 1885, 1885, 1898, 1898, 1913, 1913, 1930, 1930, 1949, 1949, 1970, 1970, 1993, 1993, 2018, 2018, 2045, 2045, 2074, 2074, 2105, 2105, 2138, 2138, 2173, 2173, 2210, 2210, 2249, 2249, 2290, 2290, 2333, 2333, 2378, 2378, 2425, 2425, 2474, 2474, 2525, 2525, 2578, 2578, 2633, 2633, 2690, 2690, 2749, 2749, 2810, 2810, 2873, 2873, 2938, 2938, 3005, 3005, 3074, 3074, 3145, 3145, 3218, 3218, 3293, 3293, 3370, 3370, 3449, 3449, 3530, 3530, 3613, 3613, 3698, 3698, 3785, 3785, 3874, 3874, 3965, 3965, 4058, 4058, 4153, 4153, 4250, 4250, 3445, 3445, 3364, 3364, 3285, 3285, 3208, 3208, 3133, 3133, 3060, 3060, 2989, 2989, 2920, 2920, 2853, 2853, 2788, 2788, 2725, 2725, 2664, 2664, 2605, 2605, 2548, 2548, 2493, 2493, 2440, 2440, 2389, 2389, 2340, 2340, 2293, 2293, 2248, 2248, 2205, 2205, 2164, 2164, 2125, 2125, 2088, 2088, 2053, 2053, 2020, 2020, 1989, 1989, 1960, 1960, 1933, 1933, 1908, 1908, 1885, 1885, 1864, 1864, 1845, 1845, 1828, 1828, 1813, 1813, 1800, 1800, 1789, 1789, 1780, 1780, 1773, 1773, 1768, 1768, 1765, 1765, 1764, 1764, 1765, 1765, 1768, 1768, 1773, 1773, 1780, 1780, 1789, 1789, 1800, 1800, 1813, 1813, 1828, 1828, 1845, 1845, 1864, 1864, 1885, 1885, 1908, 1908, 1933, 1933, 1960, 1960, 1989, 1989, 2020, 2020, 2053, 2053, 2088, 2088, 2125, 2125, 2164, 2164, 2205, 2205, 2248, 2248, 2293, 2293, 2340, 2340, 2389, 2389, 2440, 2440, 2493, 2493, 2548, 2548, 2605, 2605, 2664, 2664, 2725, 2725, 2788, 2788, 2853, 2853, 2920, 2920, 2989, 2989, 3060, 3060, 3133, 3133, 3208, 3208, 3285, 3285, 3364, 3364, 3445, 3445, 3528, 3528, 3613, 3613, 3700, 3700, 3789, 3789, 3880, 3880, 3973, 3973, 4068, 4068, 4165, 4165, 3281, 3281, 3202, 3202, 3125, 3125, 3050, 3050, 2977, 2977, 2906, 2906, 2837, 2837, 2770, 2770, 2705, 2705, 2642, 2642, 2581, 2581, 2522, 2522, 2465, 2465, 2410, 2410, 2357, 2357, 2306, 2306, 2257, 2257, 2210, 2210, 2165, 2165, 2122, 2122, 2081, 2081, 2042, 2042, 2005, 2005, 1970, 1970, 1937, 1937, 1906, 1906, 1877, 1877, 1850, 1850, 1825, 1825, 1802, 1802, 1781, 1781, 1762, 1762, 1745, 1745, 1730, 1730, 1717, 1717, 1706, 1706, 1697, 1697, 1690, 1690, 1685, 1685, 1682, 1682, 1681, 1681, 1682, 1682, 1685, 1685, 1690, 1690, 1697, 1697, 1706, 1706, 1717, 1717, 1730, 1730, 1745, 1745, 1762, 1762, 1781, 1781, 1802, 1802, 1825, 1825, 1850, 1850, 1877, 1877, 1906, 1906, 1937, 1937, 1970, 1970, 2005, 2005, 2042, 2042, 2081, 2081, 2122, 2122, 2165, 2165, 2210, 2210, 2257, 2257, 2306, 2306, 2357, 2357, 2410, 2410, 2465, 2465, 2522, 2522, 2581, 2581, 2642, 2642, 2705, 2705, 2770, 2770, 2837, 2837, 2906, 2906, 2977, 2977, 3050, 3050, 3125, 3125, 3202, 3202, 3281, 3281, 3362, 3362, 3445, 3445, 3530, 3530, 3617, 3617, 3706, 3706, 3797, 3797, 3890, 3890, 3985, 3985, 4082, 4082, 3121, 3121, 3044, 3044, 2969, 2969, 2896, 2896, 2825, 2825, 2756, 2756, 2689, 2689, 2624, 2624, 2561, 2561, 2500, 2500, 2441, 2441, 2384, 2384, 2329, 2329, 2276, 2276, 2225, 2225, 2176, 2176, 2129, 2129, 2084, 2084, 2041, 2041, 2000, 2000, 1961, 1961, 1924, 1924, 1889, 1889, 1856, 1856, 1825, 1825, 1796, 1796, 1769, 1769, 1744, 1744, 1721, 1721, 1700, 1700, 1681, 1681, 1664, 1664, 1649, 1649, 1636, 1636, 1625, 1625, 1616, 1616, 1609, 1609, 1604, 1604, 1601, 1601, 1600, 1600, 1601, 1601, 1604, 1604, 1609, 1609, 1616, 1616, 1625, 1625, 1636, 1636, 1649, 1649, 1664, 1664, 1681, 1681, 1700, 1700, 1721, 1721, 1744, 1744, 1769, 1769, 1796, 1796, 1825, 1825, 1856, 1856, 1889, 1889, 1924, 1924, 1961, 1961, 2000, 2000, 2041, 2041, 2084, 2084, 2129, 2129, 2176, 2176, 2225, 2225, 2276, 2276, 2329, 2329, 2384, 2384, 2441, 2441, 2500, 2500, 2561, 2561, 2624, 2624, 2689, 2689, 2756, 2756, 2825, 2825, 2896, 2896, 2969, 2969, 3044, 3044, 3121, 3121, 3200, 3200, 3281, 3281, 3364, 3364, 3449, 3449, 3536, 3536, 3625, 3625, 3716, 3716, 3809, 3809, 3904, 3904, 4001, 4001, 2965, 2965, 2890, 2890, 2817, 2817, 2746, 2746, 2677, 2677, 2610, 2610, 2545, 2545, 2482, 2482, 2421, 2421, 2362, 2362, 2305, 2305, 2250, 2250, 2197, 2197, 2146, 2146, 2097, 2097, 2050, 2050, 2005, 2005, 1962, 1962, 1921, 1921, 1882, 1882, 1845, 1845, 1810, 1810, 1777, 1777, 1746, 1746, 1717, 1717, 1690, 1690, 1665, 1665, 1642, 1642, 1621, 1621, 1602, 1602, 1585, 1585, 1570, 1570, 1557, 1557, 1546, 1546, 1537, 1537, 1530, 1530, 1525, 1525, 1522, 1522, 1521, 1521, 1522, 1522, 1525, 1525, 1530, 1530, 1537, 1537, 1546, 1546, 1557, 1557, 1570, 1570, 1585, 1585, 1602, 1602, 1621, 1621, 1642, 1642, 1665, 1665, 1690, 1690, 1717, 1717, 1746, 1746, 1777, 1777, 1810, 1810, 1845, 1845, 1882, 1882, 1921, 1921, 1962, 1962, 2005, 2005, 2050, 2050, 2097, 2097, 2146, 2146, 2197, 2197, 2250, 2250, 2305, 2305, 2362, 2362, 2421, 2421, 2482, 2482, 2545, 2545, 2610, 2610, 2677, 2677, 2746, 2746, 2817, 2817, 2890, 2890, 2965, 2965, 3042, 3042, 3121, 3121, 3202, 3202, 3285, 3285, 3370, 3370, 3457, 3457, 3546, 3546, 3637, 3637, 3730, 3730, 3825, 3825, 3922, 3922, 2813, 2813, 2740, 2740, 2669, 2669, 2600, 2600, 2533, 2533, 2468, 2468, 2405, 2405, 2344, 2344, 2285, 2285, 2228, 2228, 2173, 2173, 2120, 2120, 2069, 2069, 2020, 2020, 1973, 1973, 1928, 1928, 1885, 1885, 1844, 1844, 1805, 1805, 1768, 1768, 1733, 1733, 1700, 1700, 1669, 1669, 1640, 1640, 1613, 1613, 1588, 1588, 1565, 1565, 1544, 1544, 1525, 1525, 1508, 1508, 1493, 1493, 1480, 1480, 1469, 1469, 1460, 1460, 1453, 1453, 1448, 1448, 1445, 1445, 1444, 1444, 1445, 1445, 1448, 1448, 1453, 1453, 1460, 1460, 1469, 1469, 1480, 1480, 1493, 1493, 1508, 1508, 1525, 1525, 1544, 1544, 1565, 1565, 1588, 1588, 1613, 1613, 1640, 1640, 1669, 1669, 1700, 1700, 1733, 1733, 1768, 1768, 1805, 1805, 1844, 1844, 1885, 1885, 1928, 1928, 1973, 1973, 2020, 2020, 2069, 2069, 2120, 2120, 2173, 2173, 2228, 2228, 2285, 2285, 2344, 2344, 2405, 2405, 2468, 2468, 2533, 2533, 2600, 2600, 2669, 2669, 2740, 2740, 2813, 2813, 2888, 2888, 2965, 2965, 3044, 3044, 3125, 3125, 3208, 3208, 3293, 3293, 3380, 3380, 3469, 3469, 3560, 3560, 3653, 3653, 3748, 3748, 3845, 3845, 2665, 2665, 2594, 2594, 2525, 2525, 2458, 2458, 2393, 2393, 2330, 2330, 2269, 2269, 2210, 2210, 2153, 2153, 2098, 2098, 2045, 2045, 1994, 1994, 1945, 1945, 1898, 1898, 1853, 1853, 1810, 1810, 1769, 1769, 1730, 1730, 1693, 1693, 1658, 1658, 1625, 1625, 1594, 1594, 1565, 1565, 1538, 1538, 1513, 1513, 1490, 1490, 1469, 1469, 1450, 1450, 1433, 1433, 1418, 1418, 1405, 1405, 1394, 1394, 1385, 1385, 1378, 1378, 1373, 1373, 1370, 1370, 1369, 1369, 1370, 1370, 1373, 1373, 1378, 1378, 1385, 1385, 1394, 1394, 1405, 1405, 1418, 1418, 1433, 1433, 1450, 1450, 1469, 1469, 1490, 1490, 1513, 1513, 1538, 1538, 1565, 1565, 1594, 1594, 1625, 1625, 1658, 1658, 1693, 1693, 1730, 1730, 1769, 1769, 1810, 1810, 1853, 1853, 1898, 1898, 1945, 1945, 1994, 1994, 2045, 2045, 2098, 2098, 2153, 2153, 2210, 2210, 2269, 2269, 2330, 2330, 2393, 2393, 2458, 2458, 2525, 2525, 2594, 2594, 2665, 2665, 2738, 2738, 2813, 2813, 2890, 2890, 2969, 2969, 3050, 3050, 3133, 3133, 3218, 3218, 3305, 3305, 3394, 3394, 3485, 3485, 3578, 3578, 3673, 3673, 3770, 3770, 2521, 2521, 2452, 2452, 2385, 2385, 2320, 2320, 2257, 2257, 2196, 2196, 2137, 2137, 2080, 2080, 2025, 2025, 1972, 1972, 1921, 1921, 1872, 1872, 1825, 1825, 1780, 1780, 1737, 1737, 1696, 1696, 1657, 1657, 1620, 1620, 1585, 1585, 1552, 1552, 1521, 1521, 1492, 1492, 1465, 1465, 1440, 1440, 1417, 1417, 1396, 1396, 1377, 1377, 1360, 1360, 1345, 1345, 1332, 1332, 1321, 1321, 1312, 1312, 1305, 1305, 1300, 1300, 1297, 1297, 1296, 1296, 1297, 1297, 1300, 1300, 1305, 1305, 1312, 1312, 1321, 1321, 1332, 1332, 1345, 1345, 1360, 1360, 1377, 1377, 1396, 1396, 1417, 1417, 1440, 1440, 1465, 1465, 1492, 1492, 1521, 1521, 1552, 1552, 1585, 1585, 1620, 1620, 1657, 1657, 1696, 1696, 1737, 1737, 1780, 1780, 1825, 1825, 1872, 1872, 1921, 1921, 1972, 1972, 2025, 2025, 2080, 2080, 2137, 2137, 2196, 2196, 2257, 2257, 2320, 2320, 2385, 2385, 2452, 2452, 2521, 2521, 2592, 2592, 2665, 2665, 2740, 2740, 2817, 2817, 2896, 2896, 2977, 2977, 3060, 3060, 3145, 3145, 3232, 3232, 3321, 3321, 3412, 3412, 3505, 3505, 3600, 3600, 3697, 3697, 2381, 2381, 2314, 2314, 2249, 2249, 2186, 2186, 2125, 2125, 2066, 2066, 2009, 2009, 1954, 1954, 1901, 1901, 1850, 1850, 1801, 1801, 1754, 1754, 1709, 1709, 1666, 1666, 1625, 1625, 1586, 1586, 1549, 1549, 1514, 1514, 1481, 1481, 1450, 1450, 1421, 1421, 1394, 1394, 1369, 1369, 1346, 1346, 1325, 1325, 1306, 1306, 1289, 1289, 1274, 1274, 1261, 1261, 1250, 1250, 1241, 1241, 1234, 1234, 1229, 1229, 1226, 1226, 1225, 1225, 1226, 1226, 1229, 1229, 1234, 1234, 1241, 1241, 1250, 1250, 1261, 1261, 1274, 1274, 1289, 1289, 1306, 1306, 1325, 1325, 1346, 1346, 1369, 1369, 1394, 1394, 1421, 1421, 1450, 1450, 1481, 1481, 1514, 1514, 1549, 1549, 1586, 1586, 1625, 1625, 1666, 1666, 1709, 1709, 1754, 1754, 1801, 1801, 1850, 1850, 1901, 1901, 1954, 1954, 2009, 2009, 2066, 2066, 2125, 2125, 2186, 2186, 2249, 2249, 2314, 2314, 2381, 2381, 2450, 2450, 2521, 2521, 2594, 2594, 2669, 2669, 2746, 2746, 2825, 2825, 2906, 2906, 2989, 2989, 3074, 3074, 3161, 3161, 3250, 3250, 3341, 3341, 3434, 3434, 3529, 3529, 3626, 3626, 2245, 2245, 2180, 2180, 2117, 2117, 2056, 2056, 1997, 1997, 1940, 1940, 1885, 1885, 1832, 1832, 1781, 1781, 1732, 1732, 1685, 1685, 1640, 1640, 1597, 1597, 1556, 1556, 1517, 1517, 1480, 1480, 1445, 1445, 1412, 1412, 1381, 1381, 1352, 1352, 1325, 1325, 1300, 1300, 1277, 1277, 1256, 1256, 1237, 1237, 1220, 1220, 1205, 1205, 1192, 1192, 1181, 1181, 1172, 1172, 1165, 1165, 1160, 1160, 1157, 1157, 1156, 1156, 1157, 1157, 1160, 1160, 1165, 1165, 1172, 1172, 1181, 1181, 1192, 1192, 1205, 1205, 1220, 1220, 1237, 1237, 1256, 1256, 1277, 1277, 1300, 1300, 1325, 1325, 1352, 1352, 1381, 1381, 1412, 1412, 1445, 1445, 1480, 1480, 1517, 1517, 1556, 1556, 1597, 1597, 1640, 1640, 1685, 1685, 1732, 1732, 1781, 1781, 1832, 1832, 1885, 1885, 1940, 1940, 1997, 1997, 2056, 2056, 2117, 2117, 2180, 2180, 2245, 2245, 2312, 2312, 2381, 2381, 2452, 2452, 2525, 2525, 2600, 2600, 2677, 2677, 2756, 2756, 2837, 2837, 2920, 2920, 3005, 3005, 3092, 3092, 3181, 3181, 3272, 3272, 3365, 3365, 3460, 3460, 3557, 3557, 2113, 2113, 2050, 2050, 1989, 1989, 1930, 1930, 1873, 1873, 1818, 1818, 1765, 1765, 1714, 1714, 1665, 1665, 1618, 1618, 1573, 1573, 1530, 1530, 1489, 1489, 1450, 1450, 1413, 1413, 1378, 1378, 1345, 1345, 1314, 1314, 1285, 1285, 1258, 1258, 1233, 1233, 1210, 1210, 1189, 1189, 1170, 1170, 1153, 1153, 1138, 1138, 1125, 1125, 1114, 1114, 1105, 1105, 1098, 1098, 1093, 1093, 1090, 1090, 1089, 1089, 1090, 1090, 1093, 1093, 1098, 1098, 1105, 1105, 1114, 1114, 1125, 1125, 1138, 1138, 1153, 1153, 1170, 1170, 1189, 1189, 1210, 1210, 1233, 1233, 1258, 1258, 1285, 1285, 1314, 1314, 1345, 1345, 1378, 1378, 1413, 1413, 1450, 1450, 1489, 1489, 1530, 1530, 1573, 1573, 1618, 1618, 1665, 1665, 1714, 1714, 1765, 1765, 1818, 1818, 1873, 1873, 1930, 1930, 1989, 1989, 2050, 2050, 2113, 2113, 2178, 2178, 2245, 2245, 2314, 2314, 2385, 2385, 2458, 2458, 2533, 2533, 2610, 2610, 2689, 2689, 2770, 2770, 2853, 2853, 2938, 2938, 3025, 3025, 3114, 3114, 3205, 3205, 3298, 3298, 3393, 3393, 3490, 3490, 1985, 1985, 1924, 1924, 1865, 1865, 1808, 1808, 1753, 1753, 1700, 1700, 1649, 1649, 1600, 1600, 1553, 1553, 1508, 1508, 1465, 1465, 1424, 1424, 1385, 1385, 1348, 1348, 1313, 1313, 1280, 1280, 1249, 1249, 1220, 1220, 1193, 1193, 1168, 1168, 1145, 1145, 1124, 1124, 1105, 1105, 1088, 1088, 1073, 1073, 1060, 1060, 1049, 1049, 1040, 1040, 1033, 1033, 1028, 1028, 1025, 1025, 1024, 1024, 1025, 1025, 1028, 1028, 1033, 1033, 1040, 1040, 1049, 1049, 1060, 1060, 1073, 1073, 1088, 1088, 1105, 1105, 1124, 1124, 1145, 1145, 1168, 1168, 1193, 1193, 1220, 1220, 1249, 1249, 1280, 1280, 1313, 1313, 1348, 1348, 1385, 1385, 1424, 1424, 1465, 1465, 1508, 1508, 1553, 1553, 1600, 1600, 1649, 1649, 1700, 1700, 1753, 1753, 1808, 1808, 1865, 1865, 1924, 1924, 1985, 1985, 2048, 2048, 2113, 2113, 2180, 2180, 2249, 2249, 2320, 2320, 2393, 2393, 2468, 2468, 2545, 2545, 2624, 2624, 2705, 2705, 2788, 2788, 2873, 2873, 2960, 2960, 3049, 3049, 3140, 3140, 3233, 3233, 3328, 3328, 3425, 3425, 1861, 1861, 1802, 1802, 1745, 1745, 1690, 1690, 1637, 1637, 1586, 1586, 1537, 1537, 1490, 1490, 1445, 1445, 1402, 1402, 1361, 1361, 1322, 1322, 1285, 1285, 1250, 1250, 1217, 1217, 1186, 1186, 1157, 1157, 1130, 1130, 1105, 1105, 1082, 1082, 1061, 1061, 1042, 1042, 1025, 1025, 1010, 1010, 997, 997, 986, 986, 977, 977, 970, 970, 965, 965, 962, 962, 961, 961, 962, 962, 965, 965, 970, 970, 977, 977, 986, 986, 997, 997, 1010, 1010, 1025, 1025, 1042, 1042, 1061, 1061, 1082, 1082, 1105, 1105, 1130, 1130, 1157, 1157, 1186, 1186, 1217, 1217, 1250, 1250, 1285, 1285, 1322, 1322, 1361, 1361, 1402, 1402, 1445, 1445, 1490, 1490, 1537, 1537, 1586, 1586, 1637, 1637, 1690, 1690, 1745, 1745, 1802, 1802, 1861, 1861, 1922, 1922, 1985, 1985, 2050, 2050, 2117, 2117, 2186, 2186, 2257, 2257, 2330, 2330, 2405, 2405, 2482, 2482, 2561, 2561, 2642, 2642, 2725, 2725, 2810, 2810, 2897, 2897, 2986, 2986, 3077, 3077, 3170, 3170, 3265, 3265, 3362, 3362, 1741, 1741, 1684, 1684, 1629, 1629, 1576, 1576, 1525, 1525, 1476, 1476, 1429, 1429, 1384, 1384, 1341, 1341, 1300, 1300, 1261, 1261, 1224, 1224, 1189, 1189, 1156, 1156, 1125, 1125, 1096, 1096, 1069, 1069, 1044, 1044, 1021, 1021, 1000, 1000, 981, 981, 964, 964, 949, 949, 936, 936, 925, 925, 916, 916, 909, 909, 904, 904, 901, 901, 900, 900, 901, 901, 904, 904, 909, 909, 916, 916, 925, 925, 936, 936, 949, 949, 964, 964, 981, 981, 1000, 1000, 1021, 1021, 1044, 1044, 1069, 1069, 1096, 1096, 1125, 1125, 1156, 1156, 1189, 1189, 1224, 1224, 1261, 1261, 1300, 1300, 1341, 1341, 1384, 1384, 1429, 1429, 1476, 1476, 1525, 1525, 1576, 1576, 1629, 1629, 1684, 1684, 1741, 1741, 1800, 1800, 1861, 1861, 1924, 1924, 1989, 1989, 2056, 2056, 2125, 2125, 2196, 2196, 2269, 2269, 2344, 2344, 2421, 2421, 2500, 2500, 2581, 2581, 2664, 2664, 2749, 2749, 2836, 2836, 2925, 2925, 3016, 3016, 3109, 3109, 3204, 3204, 3301, 3301, 1625, 1625, 1570, 1570, 1517, 1517, 1466, 1466, 1417, 1417, 1370, 1370, 1325, 1325, 1282, 1282, 1241, 1241, 1202, 1202, 1165, 1165, 1130, 1130, 1097, 1097, 1066, 1066, 1037, 1037, 1010, 1010, 985, 985, 962, 962, 941, 941, 922, 922, 905, 905, 890, 890, 877, 877, 866, 866, 857, 857, 850, 850, 845, 845, 842, 842, 841, 841, 842, 842, 845, 845, 850, 850, 857, 857, 866, 866, 877, 877, 890, 890, 905, 905, 922, 922, 941, 941, 962, 962, 985, 985, 1010, 1010, 1037, 1037, 1066, 1066, 1097, 1097, 1130, 1130, 1165, 1165, 1202, 1202, 1241, 1241, 1282, 1282, 1325, 1325, 1370, 1370, 1417, 1417, 1466, 1466, 1517, 1517, 1570, 1570, 1625, 1625, 1682, 1682, 1741, 1741, 1802, 1802, 1865, 1865, 1930, 1930, 1997, 1997, 2066, 2066, 2137, 2137, 2210, 2210, 2285, 2285, 2362, 2362, 2441, 2441, 2522, 2522, 2605, 2605, 2690, 2690, 2777, 2777, 2866, 2866, 2957, 2957, 3050, 3050, 3145, 3145, 3242, 3242, 1513, 1513, 1460, 1460, 1409, 1409, 1360, 1360, 1313, 1313, 1268, 1268, 1225, 1225, 1184, 1184, 1145, 1145, 1108, 1108, 1073, 1073, 1040, 1040, 1009, 1009, 980, 980, 953, 953, 928, 928, 905, 905, 884, 884, 865, 865, 848, 848, 833, 833, 820, 820, 809, 809, 800, 800, 793, 793, 788, 788, 785, 785, 784, 784, 785, 785, 788, 788, 793, 793, 800, 800, 809, 809, 820, 820, 833, 833, 848, 848, 865, 865, 884, 884, 905, 905, 928, 928, 953, 953, 980, 980, 1009, 1009, 1040, 1040, 1073, 1073, 1108, 1108, 1145, 1145, 1184, 1184, 1225, 1225, 1268, 1268, 1313, 1313, 1360, 1360, 1409, 1409, 1460, 1460, 1513, 1513, 1568, 1568, 1625, 1625, 1684, 1684, 1745, 1745, 1808, 1808, 1873, 1873, 1940, 1940, 2009, 2009, 2080, 2080, 2153, 2153, 2228, 2228, 2305, 2305, 2384, 2384, 2465, 2465, 2548, 2548, 2633, 2633, 2720, 2720, 2809, 2809, 2900, 2900, 2993, 2993, 3088, 3088, 3185, 3185, 1405, 1405, 1354, 1354, 1305, 1305, 1258, 1258, 1213, 1213, 1170, 1170, 1129, 1129, 1090, 1090, 1053, 1053, 1018, 1018, 985, 985, 954, 954, 925, 925, 898, 898, 873, 873, 850, 850, 829, 829, 810, 810, 793, 793, 778, 778, 765, 765, 754, 754, 745, 745, 738, 738, 733, 733, 730, 730, 729, 729, 730, 730, 733, 733, 738, 738, 745, 745, 754, 754, 765, 765, 778, 778, 793, 793, 810, 810, 829, 829, 850, 850, 873, 873, 898, 898, 925, 925, 954, 954, 985, 985, 1018, 1018, 1053, 1053, 1090, 1090, 1129, 1129, 1170, 1170, 1213, 1213, 1258, 1258, 1305, 1305, 1354, 1354, 1405, 1405, 1458, 1458, 1513, 1513, 1570, 1570, 1629, 1629, 1690, 1690, 1753, 1753, 1818, 1818, 1885, 1885, 1954, 1954, 2025, 2025, 2098, 2098, 2173, 2173, 2250, 2250, 2329, 2329, 2410, 2410, 2493, 2493, 2578, 2578, 2665, 2665, 2754, 2754, 2845, 2845, 2938, 2938, 3033, 3033, 3130, 3130, 1301, 1301, 1252, 1252, 1205, 1205, 1160, 1160, 1117, 1117, 1076, 1076, 1037, 1037, 1000, 1000, 965, 965, 932, 932, 901, 901, 872, 872, 845, 845, 820, 820, 797, 797, 776, 776, 757, 757, 740, 740, 725, 725, 712, 712, 701, 701, 692, 692, 685, 685, 680, 680, 677, 677, 676, 676, 677, 677, 680, 680, 685, 685, 692, 692, 701, 701, 712, 712, 725, 725, 740, 740, 757, 757, 776, 776, 797, 797, 820, 820, 845, 845, 872, 872, 901, 901, 932, 932, 965, 965, 1000, 1000, 1037, 1037, 1076, 1076, 1117, 1117, 1160, 1160, 1205, 1205, 1252, 1252, 1301, 1301, 1352, 1352, 1405, 1405, 1460, 1460, 1517, 1517, 1576, 1576, 1637, 1637, 1700, 1700, 1765, 1765, 1832, 1832, 1901, 1901, 1972, 1972, 2045, 2045, 2120, 2120, 2197, 2197, 2276, 2276, 2357, 2357, 2440, 2440, 2525, 2525, 2612, 2612, 2701, 2701, 2792, 2792, 2885, 2885, 2980, 2980, 3077, 3077, 1201, 1201, 1154, 1154, 1109, 1109, 1066, 1066, 1025, 1025, 986, 986, 949, 949, 914, 914, 881, 881, 850, 850, 821, 821, 794, 794, 769, 769, 746, 746, 725, 725, 706, 706, 689, 689, 674, 674, 661, 661, 650, 650, 641, 641, 634, 634, 629, 629, 626, 626, 625, 625, 626, 626, 629, 629, 634, 634, 641, 641, 650, 650, 661, 661, 674, 674, 689, 689, 706, 706, 725, 725, 746, 746, 769, 769, 794, 794, 821, 821, 850, 850, 881, 881, 914, 914, 949, 949, 986, 986, 1025, 1025, 1066, 1066, 1109, 1109, 1154, 1154, 1201, 1201, 1250, 1250, 1301, 1301, 1354, 1354, 1409, 1409, 1466, 1466, 1525, 1525, 1586, 1586, 1649, 1649, 1714, 1714, 1781, 1781, 1850, 1850, 1921, 1921, 1994, 1994, 2069, 2069, 2146, 2146, 2225, 2225, 2306, 2306, 2389, 2389, 2474, 2474, 2561, 2561, 2650, 2650, 2741, 2741, 2834, 2834, 2929, 2929, 3026, 3026, 1105, 1105, 1060, 1060, 1017, 1017, 976, 976, 937, 937, 900, 900, 865, 865, 832, 832, 801, 801, 772, 772, 745, 745, 720, 720, 697, 697, 676, 676, 657, 657, 640, 640, 625, 625, 612, 612, 601, 601, 592, 592, 585, 585, 580, 580, 577, 577, 576, 576, 577, 577, 580, 580, 585, 585, 592, 592, 601, 601, 612, 612, 625, 625, 640, 640, 657, 657, 676, 676, 697, 697, 720, 720, 745, 745, 772, 772, 801, 801, 832, 832, 865, 865, 900, 900, 937, 937, 976, 976, 1017, 1017, 1060, 1060, 1105, 1105, 1152, 1152, 1201, 1201, 1252, 1252, 1305, 1305, 1360, 1360, 1417, 1417, 1476, 1476, 1537, 1537, 1600, 1600, 1665, 1665, 1732, 1732, 1801, 1801, 1872, 1872, 1945, 1945, 2020, 2020, 2097, 2097, 2176, 2176, 2257, 2257, 2340, 2340, 2425, 2425, 2512, 2512, 2601, 2601, 2692, 2692, 2785, 2785, 2880, 2880, 2977, 2977, 1013, 1013, 970, 970, 929, 929, 890, 890, 853, 853, 818, 818, 785, 785, 754, 754, 725, 725, 698, 698, 673, 673, 650, 650, 629, 629, 610, 610, 593, 593, 578, 578, 565, 565, 554, 554, 545, 545, 538, 538, 533, 533, 530, 530, 529, 529, 530, 530, 533, 533, 538, 538, 545, 545, 554, 554, 565, 565, 578, 578, 593, 593, 610, 610, 629, 629, 650, 650, 673, 673, 698, 698, 725, 725, 754, 754, 785, 785, 818, 818, 853, 853, 890, 890, 929, 929, 970, 970, 1013, 1013, 1058, 1058, 1105, 1105, 1154, 1154, 1205, 1205, 1258, 1258, 1313, 1313, 1370, 1370, 1429, 1429, 1490, 1490, 1553, 1553, 1618, 1618, 1685, 1685, 1754, 1754, 1825, 1825, 1898, 1898, 1973, 1973, 2050, 2050, 2129, 2129, 2210, 2210, 2293, 2293, 2378, 2378, 2465, 2465, 2554, 2554, 2645, 2645, 2738, 2738, 2833, 2833, 2930, 2930, 925, 925, 884, 884, 845, 845, 808, 808, 773, 773, 740, 740, 709, 709, 680, 680, 653, 653, 628, 628, 605, 605, 584, 584, 565, 565, 548, 548, 533, 533, 520, 520, 509, 509, 500, 500, 493, 493, 488, 488, 485, 485, 484, 484, 485, 485, 488, 488, 493, 493, 500, 500, 509, 509, 520, 520, 533, 533, 548, 548, 565, 565, 584, 584, 605, 605, 628, 628, 653, 653, 680, 680, 709, 709, 740, 740, 773, 773, 808, 808, 845, 845, 884, 884, 925, 925, 968, 968, 1013, 1013, 1060, 1060, 1109, 1109, 1160, 1160, 1213, 1213, 1268, 1268, 1325, 1325, 1384, 1384, 1445, 1445, 1508, 1508, 1573, 1573, 1640, 1640, 1709, 1709, 1780, 1780, 1853, 1853, 1928, 1928, 2005, 2005, 2084, 2084, 2165, 2165, 2248, 2248, 2333, 2333, 2420, 2420, 2509, 2509, 2600, 2600, 2693, 2693, 2788, 2788, 2885, 2885, 841, 841, 802, 802, 765, 765, 730, 730, 697, 697, 666, 666, 637, 637, 610, 610, 585, 585, 562, 562, 541, 541, 522, 522, 505, 505, 490, 490, 477, 477, 466, 466, 457, 457, 450, 450, 445, 445, 442, 442, 441, 441, 442, 442, 445, 445, 450, 450, 457, 457, 466, 466, 477, 477, 490, 490, 505, 505, 522, 522, 541, 541, 562, 562, 585, 585, 610, 610, 637, 637, 666, 666, 697, 697, 730, 730, 765, 765, 802, 802, 841, 841, 882, 882, 925, 925, 970, 970, 1017, 1017, 1066, 1066, 1117, 1117, 1170, 1170, 1225, 1225, 1282, 1282, 1341, 1341, 1402, 1402, 1465, 1465, 1530, 1530, 1597, 1597, 1666, 1666, 1737, 1737, 1810, 1810, 1885, 1885, 1962, 1962, 2041, 2041, 2122, 2122, 2205, 2205, 2290, 2290, 2377, 2377, 2466, 2466, 2557, 2557, 2650, 2650, 2745, 2745, 2842, 2842, 761, 761, 724, 724, 689, 689, 656, 656, 625, 625, 596, 596, 569, 569, 544, 544, 521, 521, 500, 500, 481, 481, 464, 464, 449, 449, 436, 436, 425, 425, 416, 416, 409, 409, 404, 404, 401, 401, 400, 400, 401, 401, 404, 404, 409, 409, 416, 416, 425, 425, 436, 436, 449, 449, 464, 464, 481, 481, 500, 500, 521, 521, 544, 544, 569, 569, 596, 596, 625, 625, 656, 656, 689, 689, 724, 724, 761, 761, 800, 800, 841, 841, 884, 884, 929, 929, 976, 976, 1025, 1025, 1076, 1076, 1129, 1129, 1184, 1184, 1241, 1241, 1300, 1300, 1361, 1361, 1424, 1424, 1489, 1489, 1556, 1556, 1625, 1625, 1696, 1696, 1769, 1769, 1844, 1844, 1921, 1921, 2000, 2000, 2081, 2081, 2164, 2164, 2249, 2249, 2336, 2336, 2425, 2425, 2516, 2516, 2609, 2609, 2704, 2704, 2801, 2801, 685, 685, 650, 650, 617, 617, 586, 586, 557, 557, 530, 530, 505, 505, 482, 482, 461, 461, 442, 442, 425, 425, 410, 410, 397, 397, 386, 386, 377, 377, 370, 370, 365, 365, 362, 362, 361, 361, 362, 362, 365, 365, 370, 370, 377, 377, 386, 386, 397, 397, 410, 410, 425, 425, 442, 442, 461, 461, 482, 482, 505, 505, 530, 530, 557, 557, 586, 586, 617, 617, 650, 650, 685, 685, 722, 722, 761, 761, 802, 802, 845, 845, 890, 890, 937, 937, 986, 986, 1037, 1037, 1090, 1090, 1145, 1145, 1202, 1202, 1261, 1261, 1322, 1322, 1385, 1385, 1450, 1450, 1517, 1517, 1586, 1586, 1657, 1657, 1730, 1730, 1805, 1805, 1882, 1882, 1961, 1961, 2042, 2042, 2125, 2125, 2210, 2210, 2297, 2297, 2386, 2386, 2477, 2477, 2570, 2570, 2665, 2665, 2762, 2762, 613, 613, 580, 580, 549, 549, 520, 520, 493, 493, 468, 468, 445, 445, 424, 424, 405, 405, 388, 388, 373, 373, 360, 360, 349, 349, 340, 340, 333, 333, 328, 328, 325, 325, 324, 324, 325, 325, 328, 328, 333, 333, 340, 340, 349, 349, 360, 360, 373, 373, 388, 388, 405, 405, 424, 424, 445, 445, 468, 468, 493, 493, 520, 520, 549, 549, 580, 580, 613, 613, 648, 648, 685, 685, 724, 724, 765, 765, 808, 808, 853, 853, 900, 900, 949, 949, 1000, 1000, 1053, 1053, 1108, 1108, 1165, 1165, 1224, 1224, 1285, 1285, 1348, 1348, 1413, 1413, 1480, 1480, 1549, 1549, 1620, 1620, 1693, 1693, 1768, 1768, 1845, 1845, 1924, 1924, 2005, 2005, 2088, 2088, 2173, 2173, 2260, 2260, 2349, 2349, 2440, 2440, 2533, 2533, 2628, 2628, 2725, 2725, 545, 545, 514, 514, 485, 485, 458, 458, 433, 433, 410, 410, 389, 389, 370, 370, 353, 353, 338, 338, 325, 325, 314, 314, 305, 305, 298, 298, 293, 293, 290, 290, 289, 289, 290, 290, 293, 293, 298, 298, 305, 305, 314, 314, 325, 325, 338, 338, 353, 353, 370, 370, 389, 389, 410, 410, 433, 433, 458, 458, 485, 485, 514, 514, 545, 545, 578, 578, 613, 613, 650, 650, 689, 689, 730, 730, 773, 773, 818, 818, 865, 865, 914, 914, 965, 965, 1018, 1018, 1073, 1073, 1130, 1130, 1189, 1189, 1250, 1250, 1313, 1313, 1378, 1378, 1445, 1445, 1514, 1514, 1585, 1585, 1658, 1658, 1733, 1733, 1810, 1810, 1889, 1889, 1970, 1970, 2053, 2053, 2138, 2138, 2225, 2225, 2314, 2314, 2405, 2405, 2498, 2498, 2593, 2593, 2690, 2690, 481, 481, 452, 452, 425, 425, 400, 400, 377, 377, 356, 356, 337, 337, 320, 320, 305, 305, 292, 292, 281, 281, 272, 272, 265, 265, 260, 260, 257, 257, 256, 256, 257, 257, 260, 260, 265, 265, 272, 272, 281, 281, 292, 292, 305, 305, 320, 320, 337, 337, 356, 356, 377, 377, 400, 400, 425, 425, 452, 452, 481, 481, 512, 512, 545, 545, 580, 580, 617, 617, 656, 656, 697, 697, 740, 740, 785, 785, 832, 832, 881, 881, 932, 932, 985, 985, 1040, 1040, 1097, 1097, 1156, 1156, 1217, 1217, 1280, 1280, 1345, 1345, 1412, 1412, 1481, 1481, 1552, 1552, 1625, 1625, 1700, 1700, 1777, 1777, 1856, 1856, 1937, 1937, 2020, 2020, 2105, 2105, 2192, 2192, 2281, 2281, 2372, 2372, 2465, 2465, 2560, 2560, 2657, 2657, 421, 421, 394, 394, 369, 369, 346, 346, 325, 325, 306, 306, 289, 289, 274, 274, 261, 261, 250, 250, 241, 241, 234, 234, 229, 229, 226, 226, 225, 225, 226, 226, 229, 229, 234, 234, 241, 241, 250, 250, 261, 261, 274, 274, 289, 289, 306, 306, 325, 325, 346, 346, 369, 369, 394, 394, 421, 421, 450, 450, 481, 481, 514, 514, 549, 549, 586, 586, 625, 625, 666, 666, 709, 709, 754, 754, 801, 801, 850, 850, 901, 901, 954, 954, 1009, 1009, 1066, 1066, 1125, 1125, 1186, 1186, 1249, 1249, 1314, 1314, 1381, 1381, 1450, 1450, 1521, 1521, 1594, 1594, 1669, 1669, 1746, 1746, 1825, 1825, 1906, 1906, 1989, 1989, 2074, 2074, 2161, 2161, 2250, 2250, 2341, 2341, 2434, 2434, 2529, 2529, 2626, 2626, 365, 365, 340, 340, 317, 317, 296, 296, 277, 277, 260, 260, 245, 245, 232, 232, 221, 221, 212, 212, 205, 205, 200, 200, 197, 197, 196, 196, 197, 197, 200, 200, 205, 205, 212, 212, 221, 221, 232, 232, 245, 245, 260, 260, 277, 277, 296, 296, 317, 317, 340, 340, 365, 365, 392, 392, 421, 421, 452, 452, 485, 485, 520, 520, 557, 557, 596, 596, 637, 637, 680, 680, 725, 725, 772, 772, 821, 821, 872, 872, 925, 925, 980, 980, 1037, 1037, 1096, 1096, 1157, 1157, 1220, 1220, 1285, 1285, 1352, 1352, 1421, 1421, 1492, 1492, 1565, 1565, 1640, 1640, 1717, 1717, 1796, 1796, 1877, 1877, 1960, 1960, 2045, 2045, 2132, 2132, 2221, 2221, 2312, 2312, 2405, 2405, 2500, 2500, 2597, 2597, 313, 313, 290, 290, 269, 269, 250, 250, 233, 233, 218, 218, 205, 205, 194, 194, 185, 185, 178, 178, 173, 173, 170, 170, 169, 169, 170, 170, 173, 173, 178, 178, 185, 185, 194, 194, 205, 205, 218, 218, 233, 233, 250, 250, 269, 269, 290, 290, 313, 313, 338, 338, 365, 365, 394, 394, 425, 425, 458, 458, 493, 493, 530, 530, 569, 569, 610, 610, 653, 653, 698, 698, 745, 745, 794, 794, 845, 845, 898, 898, 953, 953, 1010, 1010, 1069, 1069, 1130, 1130, 1193, 1193, 1258, 1258, 1325, 1325, 1394, 1394, 1465, 1465, 1538, 1538, 1613, 1613, 1690, 1690, 1769, 1769, 1850, 1850, 1933, 1933, 2018, 2018, 2105, 2105, 2194, 2194, 2285, 2285, 2378, 2378, 2473, 2473, 2570, 2570, 265, 265, 244, 244, 225, 225, 208, 208, 193, 193, 180, 180, 169, 169, 160, 160, 153, 153, 148, 148, 145, 145, 144, 144, 145, 145, 148, 148, 153, 153, 160, 160, 169, 169, 180, 180, 193, 193, 208, 208, 225, 225, 244, 244, 265, 265, 288, 288, 313, 313, 340, 340, 369, 369, 400, 400, 433, 433, 468, 468, 505, 505, 544, 544, 585, 585, 628, 628, 673, 673, 720, 720, 769, 769, 820, 820, 873, 873, 928, 928, 985, 985, 1044, 1044, 1105, 1105, 1168, 1168, 1233, 1233, 1300, 1300, 1369, 1369, 1440, 1440, 1513, 1513, 1588, 1588, 1665, 1665, 1744, 1744, 1825, 1825, 1908, 1908, 1993, 1993, 2080, 2080, 2169, 2169, 2260, 2260, 2353, 2353, 2448, 2448, 2545, 2545, 221, 221, 202, 202, 185, 185, 170, 170, 157, 157, 146, 146, 137, 137, 130, 130, 125, 125, 122, 122, 121, 121, 122, 122, 125, 125, 130, 130, 137, 137, 146, 146, 157, 157, 170, 170, 185, 185, 202, 202, 221, 221, 242, 242, 265, 265, 290, 290, 317, 317, 346, 346, 377, 377, 410, 410, 445, 445, 482, 482, 521, 521, 562, 562, 605, 605, 650, 650, 697, 697, 746, 746, 797, 797, 850, 850, 905, 905, 962, 962, 1021, 1021, 1082, 1082, 1145, 1145, 1210, 1210, 1277, 1277, 1346, 1346, 1417, 1417, 1490, 1490, 1565, 1565, 1642, 1642, 1721, 1721, 1802, 1802, 1885, 1885, 1970, 1970, 2057, 2057, 2146, 2146, 2237, 2237, 2330, 2330, 2425, 2425, 2522, 2522, 181, 181, 164, 164, 149, 149, 136, 136, 125, 125, 116, 116, 109, 109, 104, 104, 101, 101, 100, 100, 101, 101, 104, 104, 109, 109, 116, 116, 125, 125, 136, 136, 149, 149, 164, 164, 181, 181, 200, 200, 221, 221, 244, 244, 269, 269, 296, 296, 325, 325, 356, 356, 389, 389, 424, 424, 461, 461, 500, 500, 541, 541, 584, 584, 629, 629, 676, 676, 725, 725, 776, 776, 829, 829, 884, 884, 941, 941, 1000, 1000, 1061, 1061, 1124, 1124, 1189, 1189, 1256, 1256, 1325, 1325, 1396, 1396, 1469, 1469, 1544, 1544, 1621, 1621, 1700, 1700, 1781, 1781, 1864, 1864, 1949, 1949, 2036, 2036, 2125, 2125, 2216, 2216, 2309, 2309, 2404, 2404, 2501, 2501, 145, 145, 130, 130, 117, 117, 106, 106, 97, 97, 90, 90, 85, 85, 82, 82, 81, 81, 82, 82, 85, 85, 90, 90, 97, 97, 106, 106, 117, 117, 130, 130, 145, 145, 162, 162, 181, 181, 202, 202, 225, 225, 250, 250, 277, 277, 306, 306, 337, 337, 370, 370, 405, 405, 442, 442, 481, 481, 522, 522, 565, 565, 610, 610, 657, 657, 706, 706, 757, 757, 810, 810, 865, 865, 922, 922, 981, 981, 1042, 1042, 1105, 1105, 1170, 1170, 1237, 1237, 1306, 1306, 1377, 1377, 1450, 1450, 1525, 1525, 1602, 1602, 1681, 1681, 1762, 1762, 1845, 1845, 1930, 1930, 2017, 2017, 2106, 2106, 2197, 2197, 2290, 2290, 2385, 2385, 2482, 2482, 113, 113, 100, 100, 89, 89, 80, 80, 73, 73, 68, 68, 65, 65, 64, 64, 65, 65, 68, 68, 73, 73, 80, 80, 89, 89, 100, 100, 113, 113, 128, 128, 145, 145, 164, 164, 185, 185, 208, 208, 233, 233, 260, 260, 289, 289, 320, 320, 353, 353, 388, 388, 425, 425, 464, 464, 505, 505, 548, 548, 593, 593, 640, 640, 689, 689, 740, 740, 793, 793, 848, 848, 905, 905, 964, 964, 1025, 1025, 1088, 1088, 1153, 1153, 1220, 1220, 1289, 1289, 1360, 1360, 1433, 1433, 1508, 1508, 1585, 1585, 1664, 1664, 1745, 1745, 1828, 1828, 1913, 1913, 2000, 2000, 2089, 2089, 2180, 2180, 2273, 2273, 2368, 2368, 2465, 2465, 85, 85, 74, 74, 65, 65, 58, 58, 53, 53, 50, 50, 49, 49, 50, 50, 53, 53, 58, 58, 65, 65, 74, 74, 85, 85, 98, 98, 113, 113, 130, 130, 149, 149, 170, 170, 193, 193, 218, 218, 245, 245, 274, 274, 305, 305, 338, 338, 373, 373, 410, 410, 449, 449, 490, 490, 533, 533, 578, 578, 625, 625, 674, 674, 725, 725, 778, 778, 833, 833, 890, 890, 949, 949, 1010, 1010, 1073, 1073, 1138, 1138, 1205, 1205, 1274, 1274, 1345, 1345, 1418, 1418, 1493, 1493, 1570, 1570, 1649, 1649, 1730, 1730, 1813, 1813, 1898, 1898, 1985, 1985, 2074, 2074, 2165, 2165, 2258, 2258, 2353, 2353, 2450, 2450, 61, 61, 52, 52, 45, 45, 40, 40, 37, 37, 36, 36, 37, 37, 40, 40, 45, 45, 52, 52, 61, 61, 72, 72, 85, 85, 100, 100, 117, 117, 136, 136, 157, 157, 180, 180, 205, 205, 232, 232, 261, 261, 292, 292, 325, 325, 360, 360, 397, 397, 436, 436, 477, 477, 520, 520, 565, 565, 612, 612, 661, 661, 712, 712, 765, 765, 820, 820, 877, 877, 936, 936, 997, 997, 1060, 1060, 1125, 1125, 1192, 1192, 1261, 1261, 1332, 1332, 1405, 1405, 1480, 1480, 1557, 1557, 1636, 1636, 1717, 1717, 1800, 1800, 1885, 1885, 1972, 1972, 2061, 2061, 2152, 2152, 2245, 2245, 2340, 2340, 2437, 2437, 41, 41, 34, 34, 29, 29, 26, 26, 25, 25, 26, 26, 29, 29, 34, 34, 41, 41, 50, 50, 61, 61, 74, 74, 89, 89, 106, 106, 125, 125, 146, 146, 169, 169, 194, 194, 221, 221, 250, 250, 281, 281, 314, 314, 349, 349, 386, 386, 425, 425, 466, 466, 509, 509, 554, 554, 601, 601, 650, 650, 701, 701, 754, 754, 809, 809, 866, 866, 925, 925, 986, 986, 1049, 1049, 1114, 1114, 1181, 1181, 1250, 1250, 1321, 1321, 1394, 1394, 1469, 1469, 1546, 1546, 1625, 1625, 1706, 1706, 1789, 1789, 1874, 1874, 1961, 1961, 2050, 2050, 2141, 2141, 2234, 2234, 2329, 2329, 2426, 2426, 25, 25, 20, 20, 17, 17, 16, 16, 17, 17, 20, 20, 25, 25, 32, 32, 41, 41, 52, 52, 65, 65, 80, 80, 97, 97, 116, 116, 137, 137, 160, 160, 185, 185, 212, 212, 241, 241, 272, 272, 305, 305, 340, 340, 377, 377, 416, 416, 457, 457, 500, 500, 545, 545, 592, 592, 641, 641, 692, 692, 745, 745, 800, 800, 857, 857, 916, 916, 977, 977, 1040, 1040, 1105, 1105, 1172, 1172, 1241, 1241, 1312, 1312, 1385, 1385, 1460, 1460, 1537, 1537, 1616, 1616, 1697, 1697, 1780, 1780, 1865, 1865, 1952, 1952, 2041, 2041, 2132, 2132, 2225, 2225, 2320, 2320, 2417, 2417, 13, 13, 10, 10, 9, 9, 10, 10, 13, 13, 18, 18, 25, 25, 34, 34, 45, 45, 58, 58, 73, 73, 90, 90, 109, 109, 130, 130, 153, 153, 178, 178, 205, 205, 234, 234, 265, 265, 298, 298, 333, 333, 370, 370, 409, 409, 450, 450, 493, 493, 538, 538, 585, 585, 634, 634, 685, 685, 738, 738, 793, 793, 850, 850, 909, 909, 970, 970, 1033, 1033, 1098, 1098, 1165, 1165, 1234, 1234, 1305, 1305, 1378, 1378, 1453, 1453, 1530, 1530, 1609, 1609, 1690, 1690, 1773, 1773, 1858, 1858, 1945, 1945, 2034, 2034, 2125, 2125, 2218, 2218, 2313, 2313, 2410, 2410, 5, 5, 4, 4, 5, 5, 8, 8, 13, 13, 20, 20, 29, 29, 40, 40, 53, 53, 68, 68, 85, 85, 104, 104, 125, 125, 148, 148, 173, 173, 200, 200, 229, 229, 260, 260, 293, 293, 328, 328, 365, 365, 404, 404, 445, 445, 488, 488, 533, 533, 580, 580, 629, 629, 680, 680, 733, 733, 788, 788, 845, 845, 904, 904, 965, 965, 1028, 1028, 1093, 1093, 1160, 1160, 1229, 1229, 1300, 1300, 1373, 1373, 1448, 1448, 1525, 1525, 1604, 1604, 1685, 1685, 1768, 1768, 1853, 1853, 1940, 1940, 2029, 2029, 2120, 2120, 2213, 2213, 2308, 2308, 2405, 2405, 1, 1, 2, 2, 5, 5, 10, 10, 17, 17, 26, 26, 37, 37, 50, 50, 65, 65, 82, 82, 101, 101, 122, 122, 145, 145, 170, 170, 197, 197, 226, 226, 257, 257, 290, 290, 325, 325, 362, 362, 401, 401, 442, 442, 485, 485, 530, 530, 577, 577, 626, 626, 677, 677, 730, 730, 785, 785, 842, 842, 901, 901, 962, 962, 1025, 1025, 1090, 1090, 1157, 1157, 1226, 1226, 1297, 1297, 1370, 1370, 1445, 1445, 1522, 1522, 1601, 1601, 1682, 1682, 1765, 1765, 1850, 1850, 1937, 1937, 2026, 2026, 2117, 2117, 2210, 2210, 2305, 2305, 2402, 2402, 1, 1, 4, 4, 9, 9, 16, 16, 25, 25, 36, 36, 49, 49, 64, 64, 81, 81, 100, 100, 121, 121, 144, 144, 169, 169, 196, 196, 225, 225, 256, 256, 289, 289, 324, 324, 361, 361, 400, 400, 441, 441, 484, 484, 529, 529, 576, 576, 625, 625, 676, 676, 729, 729, 784, 784, 841, 841, 900, 900, 961, 961, 1024, 1024, 1089, 1089, 1156, 1156, 1225, 1225, 1296, 1296, 1369, 1369, 1444, 1444, 1521, 1521, 1600, 1600, 1681, 1681, 1764, 1764, 1849, 1849, 1936, 1936, 2025, 2025, 2116, 2116, 2209, 2209, 2304, 2304, 2401, 2401, 5, 5, 10, 10, 17, 17, 26, 26, 37, 37, 50, 50, 65, 65, 82, 82, 101, 101, 122, 122, 145, 145, 170, 170, 197, 197, 226, 226, 257, 257, 290, 290, 325, 325, 362, 362, 401, 401, 442, 442, 485, 485, 530, 530, 577, 577, 626, 626, 677, 677, 730, 730, 785, 785, 842, 842, 901, 901, 962, 962, 1025, 1025, 1090, 1090, 1157, 1157, 1226, 1226, 1297, 1297, 1370, 1370, 1445, 1445, 1522, 1522, 1601, 1601, 1682, 1682, 1765, 1765, 1850, 1850, 1937, 1937, 2026, 2026, 2117, 2117, 2210, 2210, 2305, 2305, 2402, 2402, 13, 13, 20, 20, 29, 29, 40, 40, 53, 53, 68, 68, 85, 85, 104, 104, 125, 125, 148, 148, 173, 173, 200, 200, 229, 229, 260, 260, 293, 293, 328, 328, 365, 365, 404, 404, 445, 445, 488, 488, 533, 533, 580, 580, 629, 629, 680, 680, 733, 733, 788, 788, 845, 845, 904, 904, 965, 965, 1028, 1028, 1093, 1093, 1160, 1160, 1229, 1229, 1300, 1300, 1373, 1373, 1448, 1448, 1525, 1525, 1604, 1604, 1685, 1685, 1768, 1768, 1853, 1853, 1940, 1940, 2029, 2029, 2120, 2120, 2213, 2213, 2308, 2308, 2405, 2405, 25, 25, 34, 34, 45, 45, 58, 58, 73, 73, 90, 90, 109, 109, 130, 130, 153, 153, 178, 178, 205, 205, 234, 234, 265, 265, 298, 298, 333, 333, 370, 370, 409, 409, 450, 450, 493, 493, 538, 538, 585, 585, 634, 634, 685, 685, 738, 738, 793, 793, 850, 850, 909, 909, 970, 970, 1033, 1033, 1098, 1098, 1165, 1165, 1234, 1234, 1305, 1305, 1378, 1378, 1453, 1453, 1530, 1530, 1609, 1609, 1690, 1690, 1773, 1773, 1858, 1858, 1945, 1945, 2034, 2034, 2125, 2125, 2218, 2218, 2313, 2313, 2410, 2410, 41, 41, 52, 52, 65, 65, 80, 80, 97, 97, 116, 116, 137, 137, 160, 160, 185, 185, 212, 212, 241, 241, 272, 272, 305, 305, 340, 340, 377, 377, 416, 416, 457, 457, 500, 500, 545, 545, 592, 592, 641, 641, 692, 692, 745, 745, 800, 800, 857, 857, 916, 916, 977, 977, 1040, 1040, 1105, 1105, 1172, 1172, 1241, 1241, 1312, 1312, 1385, 1385, 1460, 1460, 1537, 1537, 1616, 1616, 1697, 1697, 1780, 1780, 1865, 1865, 1952, 1952, 2041, 2041, 2132, 2132, 2225, 2225, 2320, 2320, 2417, 2417, 61, 61, 74, 74, 89, 89, 106, 106, 125, 125, 146, 146, 169, 169, 194, 194, 221, 221, 250, 250, 281, 281, 314, 314, 349, 349, 386, 386, 425, 425, 466, 466, 509, 509, 554, 554, 601, 601, 650, 650, 701, 701, 754, 754, 809, 809, 866, 866, 925, 925, 986, 986, 1049, 1049, 1114, 1114, 1181, 1181, 1250, 1250, 1321, 1321, 1394, 1394, 1469, 1469, 1546, 1546, 1625, 1625, 1706, 1706, 1789, 1789, 1874, 1874, 1961, 1961, 2050, 2050, 2141, 2141, 2234, 2234, 2329, 2329, 2426, 2426, 85, 85, 100, 100, 117, 117, 136, 136, 157, 157, 180, 180, 205, 205, 232, 232, 261, 261, 292, 292, 325, 325, 360, 360, 397, 397, 436, 436, 477, 477, 520, 520, 565, 565, 612, 612, 661, 661, 712, 712, 765, 765, 820, 820, 877, 877, 936, 936, 997, 997, 1060, 1060, 1125, 1125, 1192, 1192, 1261, 1261, 1332, 1332, 1405, 1405, 1480, 1480, 1557, 1557, 1636, 1636, 1717, 1717, 1800, 1800, 1885, 1885, 1972, 1972, 2061, 2061, 2152, 2152, 2245, 2245, 2340, 2340, 2437, 2437, 113, 113, 130, 130, 149, 149, 170, 170, 193, 193, 218, 218, 245, 245, 274, 274, 305, 305, 338, 338, 373, 373, 410, 410, 449, 449, 490, 490, 533, 533, 578, 578, 625, 625, 674, 674, 725, 725, 778, 778, 833, 833, 890, 890, 949, 949, 1010, 1010, 1073, 1073, 1138, 1138, 1205, 1205, 1274, 1274, 1345, 1345, 1418, 1418, 1493, 1493, 1570, 1570, 1649, 1649, 1730, 1730, 1813, 1813, 1898, 1898, 1985, 1985, 2074, 2074, 2165, 2165, 2258, 2258, 2353, 2353, 2450, 2450, 145, 145, 164, 164, 185, 185, 208, 208, 233, 233, 260, 260, 289, 289, 320, 320, 353, 353, 388, 388, 425, 425, 464, 464, 505, 505, 548, 548, 593, 593, 640, 640, 689, 689, 740, 740, 793, 793, 848, 848, 905, 905, 964, 964, 1025, 1025, 1088, 1088, 1153, 1153, 1220, 1220, 1289, 1289, 1360, 1360, 1433, 1433, 1508, 1508, 1585, 1585, 1664, 1664, 1745, 1745, 1828, 1828, 1913, 1913, 2000, 2000, 2089, 2089, 2180, 2180, 2273, 2273, 2368, 2368, 2465, 2465, 181, 181, 202, 202, 225, 225, 250, 250, 277, 277, 306, 306, 337, 337, 370, 370, 405, 405, 442, 442, 481, 481, 522, 522, 565, 565, 610, 610, 657, 657, 706, 706, 757, 757, 810, 810, 865, 865, 922, 922, 981, 981, 1042, 1042, 1105, 1105, 1170, 1170, 1237, 1237, 1306, 1306, 1377, 1377, 1450, 1450, 1525, 1525, 1602, 1602, 1681, 1681, 1762, 1762, 1845, 1845, 1930, 1930, 2017, 2017, 2106, 2106, 2197, 2197, 2290, 2290, 2385, 2385, 2482, 2482, 221, 221, 244, 244, 269, 269, 296, 296, 325, 325, 356, 356, 389, 389, 424, 424, 461, 461, 500, 500, 541, 541, 584, 584, 629, 629, 676, 676, 725, 725, 776, 776, 829, 829, 884, 884, 941, 941, 1000, 1000, 1061, 1061, 1124, 1124, 1189, 1189, 1256, 1256, 1325, 1325, 1396, 1396, 1469, 1469, 1544, 1544, 1621, 1621, 1700, 1700, 1781, 1781, 1864, 1864, 1949, 1949, 2036, 2036, 2125, 2125, 2216, 2216, 2309, 2309, 2404, 2404, 2501, 2501, 265, 265, 290, 290, 317, 317, 346, 346, 377, 377, 410, 410, 445, 445, 482, 482, 521, 521, 562, 562, 605, 605, 650, 650, 697, 697, 746, 746, 797, 797, 850, 850, 905, 905, 962, 962, 1021, 1021, 1082, 1082, 1145, 1145, 1210, 1210, 1277, 1277, 1346, 1346, 1417, 1417, 1490, 1490, 1565, 1565, 1642, 1642, 1721, 1721, 1802, 1802, 1885, 1885, 1970, 1970, 2057, 2057, 2146, 2146, 2237, 2237, 2330, 2330, 2425, 2425, 2522, 2522, 313, 313, 340, 340, 369, 369, 400, 400, 433, 433, 468, 468, 505, 505, 544, 544, 585, 585, 628, 628, 673, 673, 720, 720, 769, 769, 820, 820, 873, 873, 928, 928, 985, 985, 1044, 1044, 1105, 1105, 1168, 1168, 1233, 1233, 1300, 1300, 1369, 1369, 1440, 1440, 1513, 1513, 1588, 1588, 1665, 1665, 1744, 1744, 1825, 1825, 1908, 1908, 1993, 1993, 2080, 2080, 2169, 2169, 2260, 2260, 2353, 2353, 2448, 2448, 2545, 2545, 365, 365, 394, 394, 425, 425, 458, 458, 493, 493, 530, 530, 569, 569, 610, 610, 653, 653, 698, 698, 745, 745, 794, 794, 845, 845, 898, 898, 953, 953, 1010, 1010, 1069, 1069, 1130, 1130, 1193, 1193, 1258, 1258, 1325, 1325, 1394, 1394, 1465, 1465, 1538, 1538, 1613, 1613, 1690, 1690, 1769, 1769, 1850, 1850, 1933, 1933, 2018, 2018, 2105, 2105, 2194, 2194, 2285, 2285, 2378, 2378, 2473, 2473, 2570, 2570, 421, 421, 452, 452, 485, 485, 520, 520, 557, 557, 596, 596, 637, 637, 680, 680, 725, 725, 772, 772, 821, 821, 872, 872, 925, 925, 980, 980, 1037, 1037, 1096, 1096, 1157, 1157, 1220, 1220, 1285, 1285, 1352, 1352, 1421, 1421, 1492, 1492, 1565, 1565, 1640, 1640, 1717, 1717, 1796, 1796, 1877, 1877, 1960, 1960, 2045, 2045, 2132, 2132, 2221, 2221, 2312, 2312, 2405, 2405, 2500, 2500, 2597, 2597, 481, 481, 514, 514, 549, 549, 586, 586, 625, 625, 666, 666, 709, 709, 754, 754, 801, 801, 850, 850, 901, 901, 954, 954, 1009, 1009, 1066, 1066, 1125, 1125, 1186, 1186, 1249, 1249, 1314, 1314, 1381, 1381, 1450, 1450, 1521, 1521, 1594, 1594, 1669, 1669, 1746, 1746, 1825, 1825, 1906, 1906, 1989, 1989, 2074, 2074, 2161, 2161, 2250, 2250, 2341, 2341, 2434, 2434, 2529, 2529, 2626, 2626, 545, 545, 580, 580, 617, 617, 656, 656, 697, 697, 740, 740, 785, 785, 832, 832, 881, 881, 932, 932, 985, 985, 1040, 1040, 1097, 1097, 1156, 1156, 1217, 1217, 1280, 1280, 1345, 1345, 1412, 1412, 1481, 1481, 1552, 1552, 1625, 1625, 1700, 1700, 1777, 1777, 1856, 1856, 1937, 1937, 2020, 2020, 2105, 2105, 2192, 2192, 2281, 2281, 2372, 2372, 2465, 2465, 2560, 2560, 2657, 2657, 613, 613, 650, 650, 689, 689, 730, 730, 773, 773, 818, 818, 865, 865, 914, 914, 965, 965, 1018, 1018, 1073, 1073, 1130, 1130, 1189, 1189, 1250, 1250, 1313, 1313, 1378, 1378, 1445, 1445, 1514, 1514, 1585, 1585, 1658, 1658, 1733, 1733, 1810, 1810, 1889, 1889, 1970, 1970, 2053, 2053, 2138, 2138, 2225, 2225, 2314, 2314, 2405, 2405, 2498, 2498, 2593, 2593, 2690, 2690, 685, 685, 724, 724, 765, 765, 808, 808, 853, 853, 900, 900, 949, 949, 1000, 1000, 1053, 1053, 1108, 1108, 1165, 1165, 1224, 1224, 1285, 1285, 1348, 1348, 1413, 1413, 1480, 1480, 1549, 1549, 1620, 1620, 1693, 1693, 1768, 1768, 1845, 1845, 1924, 1924, 2005, 2005, 2088, 2088, 2173, 2173, 2260, 2260, 2349, 2349, 2440, 2440, 2533, 2533, 2628, 2628, 2725, 2725, 761, 761, 802, 802, 845, 845, 890, 890, 937, 937, 986, 986, 1037, 1037, 1090, 1090, 1145, 1145, 1202, 1202, 1261, 1261, 1322, 1322, 1385, 1385, 1450, 1450, 1517, 1517, 1586, 1586, 1657, 1657, 1730, 1730, 1805, 1805, 1882, 1882, 1961, 1961, 2042, 2042, 2125, 2125, 2210, 2210, 2297, 2297, 2386, 2386, 2477, 2477, 2570, 2570, 2665, 2665, 2762, 2762, 841, 841, 884, 884, 929, 929, 976, 976, 1025, 1025, 1076, 1076, 1129, 1129, 1184, 1184, 1241, 1241, 1300, 1300, 1361, 1361, 1424, 1424, 1489, 1489, 1556, 1556, 1625, 1625, 1696, 1696, 1769, 1769, 1844, 1844, 1921, 1921, 2000, 2000, 2081, 2081, 2164, 2164, 2249, 2249, 2336, 2336, 2425, 2425, 2516, 2516, 2609, 2609, 2704, 2704, 2801, 2801, 925, 925, 970, 970, 1017, 1017, 1066, 1066, 1117, 1117, 1170, 1170, 1225, 1225, 1282, 1282, 1341, 1341, 1402, 1402, 1465, 1465, 1530, 1530, 1597, 1597, 1666, 1666, 1737, 1737, 1810, 1810, 1885, 1885, 1962, 1962, 2041, 2041, 2122, 2122, 2205, 2205, 2290, 2290, 2377, 2377, 2466, 2466, 2557, 2557, 2650, 2650, 2745, 2745, 2842, 2842, 1013, 1013, 1060, 1060, 1109, 1109, 1160, 1160, 1213, 1213, 1268, 1268, 1325, 1325, 1384, 1384, 1445, 1445, 1508, 1508, 1573, 1573, 1640, 1640, 1709, 1709, 1780, 1780, 1853, 1853, 1928, 1928, 2005, 2005, 2084, 2084, 2165, 2165, 2248, 2248, 2333, 2333, 2420, 2420, 2509, 2509, 2600, 2600, 2693, 2693, 2788, 2788, 2885, 2885, 1105, 1105, 1154, 1154, 1205, 1205, 1258, 1258, 1313, 1313, 1370, 1370, 1429, 1429, 1490, 1490, 1553, 1553, 1618, 1618, 1685, 1685, 1754, 1754, 1825, 1825, 1898, 1898, 1973, 1973, 2050, 2050, 2129, 2129, 2210, 2210, 2293, 2293, 2378, 2378, 2465, 2465, 2554, 2554, 2645, 2645, 2738, 2738, 2833, 2833, 2930, 2930, 1201, 1201, 1252, 1252, 1305, 1305, 1360, 1360, 1417, 1417, 1476, 1476, 1537, 1537, 1600, 1600, 1665, 1665, 1732, 1732, 1801, 1801, 1872, 1872, 1945, 1945, 2020, 2020, 2097, 2097, 2176, 2176, 2257, 2257, 2340, 2340, 2425, 2425, 2512, 2512, 2601, 2601, 2692, 2692, 2785, 2785, 2880, 2880, 2977, 2977, 1301, 1301, 1354, 1354, 1409, 1409, 1466, 1466, 1525, 1525, 1586, 1586, 1649, 1649, 1714, 1714, 1781, 1781, 1850, 1850, 1921, 1921, 1994, 1994, 2069, 2069, 2146, 2146, 2225, 2225, 2306, 2306, 2389, 2389, 2474, 2474, 2561, 2561, 2650, 2650, 2741, 2741, 2834, 2834, 2929, 2929, 3026, 3026, 1405, 1405, 1460, 1460, 1517, 1517, 1576, 1576, 1637, 1637, 1700, 1700, 1765, 1765, 1832, 1832, 1901, 1901, 1972, 1972, 2045, 2045, 2120, 2120, 2197, 2197, 2276, 2276, 2357, 2357, 2440, 2440, 2525, 2525, 2612, 2612, 2701, 2701, 2792, 2792, 2885, 2885, 2980, 2980, 3077, 3077, 1513, 1513, 1570, 1570, 1629, 1629, 1690, 1690, 1753, 1753, 1818, 1818, 1885, 1885, 1954, 1954, 2025, 2025, 2098, 2098, 2173, 2173, 2250, 2250, 2329, 2329, 2410, 2410, 2493, 2493, 2578, 2578, 2665, 2665, 2754, 2754, 2845, 2845, 2938, 2938, 3033, 3033, 3130, 3130, 1625, 1625, 1684, 1684, 1745, 1745, 1808, 1808, 1873, 1873, 1940, 1940, 2009, 2009, 2080, 2080, 2153, 2153, 2228, 2228, 2305, 2305, 2384, 2384, 2465, 2465, 2548, 2548, 2633, 2633, 2720, 2720, 2809, 2809, 2900, 2900, 2993, 2993, 3088, 3088, 3185, 3185, 1741, 1741, 1802, 1802, 1865, 1865, 1930, 1930, 1997, 1997, 2066, 2066, 2137, 2137, 2210, 2210, 2285, 2285, 2362, 2362, 2441, 2441, 2522, 2522, 2605, 2605, 2690, 2690, 2777, 2777, 2866, 2866, 2957, 2957, 3050, 3050, 3145, 3145, 3242, 3242, 1861, 1861, 1924, 1924, 1989, 1989, 2056, 2056, 2125, 2125, 2196, 2196, 2269, 2269, 2344, 2344, 2421, 2421, 2500, 2500, 2581, 2581, 2664, 2664, 2749, 2749, 2836, 2836, 2925, 2925, 3016, 3016, 3109, 3109, 3204, 3204, 3301, 3301, 1985, 1985, 2050, 2050, 2117, 2117, 2186, 2186, 2257, 2257, 2330, 2330, 2405, 2405, 2482, 2482, 2561, 2561, 2642, 2642, 2725, 2725, 2810, 2810, 2897, 2897, 2986, 2986, 3077, 3077, 3170, 3170, 3265, 3265, 3362, 3362, 2113, 2113, 2180, 2180, 2249, 2249, 2320, 2320, 2393, 2393, 2468, 2468, 2545, 2545, 2624, 2624, 2705, 2705, 2788, 2788, 2873, 2873, 2960, 2960, 3049, 3049, 3140, 3140, 3233, 3233, 3328, 3328, 3425, 3425, 2245, 2245, 2314, 2314, 2385, 2385, 2458, 2458, 2533, 2533, 2610, 2610, 2689, 2689, 2770, 2770, 2853, 2853, 2938, 2938, 3025, 3025, 3114, 3114, 3205, 3205, 3298, 3298, 3393, 3393, 3490, 3490, 2381, 2381, 2452, 2452, 2525, 2525, 2600, 2600, 2677, 2677, 2756, 2756, 2837, 2837, 2920, 2920, 3005, 3005, 3092, 3092, 3181, 3181, 3272, 3272, 3365, 3365, 3460, 3460, 3557, 3557, 2521, 2521, 2594, 2594, 2669, 2669, 2746, 2746, 2825, 2825, 2906, 2906, 2989, 2989, 3074, 3074, 3161, 3161, 3250, 3250, 3341, 3341, 3434, 3434, 3529, 3529, 3626, 3626, 2665, 2665, 2740, 2740, 2817, 2817, 2896, 2896, 2977, 2977, 3060, 3060, 3145, 3145, 3232, 3232, 3321, 3321, 3412, 3412, 3505, 3505, 3600, 3600, 3697, 3697, 2813, 2813, 2890, 2890, 2969, 2969, 3050, 3050, 3133, 3133, 3218, 3218, 3305, 3305, 3394, 3394, 3485, 3485, 3578, 3578, 3673, 3673, 3770, 3770, 2965, 2965, 3044, 3044, 3125, 3125, 3208, 3208, 3293, 3293, 3380, 3380, 3469, 3469, 3560, 3560, 3653, 3653, 3748, 3748, 3845, 3845, 3121, 3121, 3202, 3202, 3285, 3285, 3370, 3370, 3457, 3457, 3546, 3546, 3637, 3637, 3730, 3730, 3825, 3825, 3922, 3922, 3281, 3281, 3364, 3364, 3449, 3449, 3536, 3536, 3625, 3625, 3716, 3716, 3809, 3809, 3904, 3904, 4001, 4001, 3445, 3445, 3530, 3530, 3617, 3617, 3706, 3706, 3797, 3797, 3890, 3890, 3985, 3985, 4082, 4082, 3613, 3613, 3700, 3700, 3789, 3789, 3880, 3880, 3973, 3973, 4068, 4068, 4165, 4165, 3785, 3785, 3874, 3874, 3965, 3965, 4058, 4058, 4153, 4153, 4250, 4250, 3961, 3961, 4052, 4052, 4145, 4145, 4240, 4240, 4337, 4337, 4141, 4141, 4234, 4234, 4329, 4329, 4426, 4426, 4325, 4325, 4420, 4420, 4517, 4517, 4513, 4513, 4610, 4610, 4705, 4705, 5000, 4802, 4608, 4418, 4232, 4050, 3872, 3698, 3528, 3362, 3200, 3042, 2888, 2738, 2592, 2450, 2312, 2178, 2048, 1922, 1800, 1682, 1568, 1458, 1352, 1250, 1152, 1058, 968, 882, 800, 722, 648, 578, 512, 450, 392, 338, 288, 242, 200, 162, 128, 98, 72, 50, 32, 18, 8, 2, 0, 2, 8, 18, 32, 50, 72, 98, 128, 162, 200, 242, 288, 338, 392, 450, 512, 578, 648, 722, 800, 882, 968, 1058, 1152, 1250, 1352, 1458, 1568, 1682, 1800, 1922, 2048, 2178, 2312, 2450, 2592, 2738, 2888, 3042, 3200, 3362, 3528, 3698, 3872, 4050, 4232, 4418, 4608, 4802 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } } } }, "text/html": [ "
\n", " \n", " \n", "
\n", " \n", "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import random\n", "import pandas as pd\n", "import numpy as np\n", "import math\n", "from copy import copy\n", "import itertools\n", "\n", "def func(x):\n", " \"\"\"the function we are trying to minimize\"\"\"\n", " return math.pow(x[0], 2) + math.pow(x[1],2)\n", "\n", "\n", "def point_generator(choices, func):\n", " \"\"\"Generates all possible combinations of X and returns X and f(x) values\"\"\"\n", " \n", " for pt in itertools.combinations(choices, 2):\n", " pt = list(pt)\n", " yield(pt + [func(pt)])\n", " \n", " pt.reverse()\n", " yield(pt + [func(pt)])\n", " \n", " # generate diagonals\n", " for x in choices:\n", " pt = [x, x]\n", " yield(pt + [func(pt)])\n", " \n", " \n", "choices = np.array(range(-500, 500, 10))/10.\n", "df = (\n", " pd\n", " .DataFrame(list(point_generator(choices, func)), columns=['x0', 'x1', 'fx'])\n", ")\n", "display(df.head(4))\n", "\n", "from plotly.offline import download_plotlyjs, init_notebook_mode, iplot\n", "import plotly.graph_objs as go\n", "# init_notebook_mode(connected=False)\n", "iplot([go.Scatter3d(x=df['x0'], y=df['x1'], z=df['fx'], opacity=0.5, mode='markers')], show_link=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the above plot, one can easily observe that $f(X)$ reaches a minimum value when $X = [0, 0]$ (i.e $x_1 = 0$ and $x_2 = 0$). \n", "\n", "As humans, we can do this naturally as long as we can visualize the function. However, a typical machine learning problem will involve hundreds of features. So let's think how did we so easily find the point X at which $f(X)$ is minimum. One possible explanation is that our eyes randomly picked a point on the above surface and followed in the direction where the slope is decreasing. Finally, when the slope starts increasing again, we know that we have crossed the minimum point. Let's try to transfer this idea into proper python code. The logical flow of the problem will be as follows:\n", "\n", "**Step 1:** Pick a random point $X = (x_0, x_1)$\n", "\n", "**Step 2:** Identify the next point $X'$ such as that $f(X') < f(X)$. However, one challenge is how do we find $X'$. Let's start with some brute force. Assume we look for neighboring points that are $\\eta$ distance away on a single dimension. For instance, as shown below figure (a), let's assume $X=[1,1]$ and $\\eta = 0.25$. Then, the neighboring points to explore are [1-0.25, 1], [1 + 0.25, 1], [1, 1-0.25], [1, 1 + 0.25]. Thus, if X is n-dimensional vector, then there will be $2^n$ neighbors to explore. If we relax the constraint that one can only move $\\eta$ distance along on one dimension at any given time, then we have additional four diagonal points as shown in the figure: [1-0.25, 1-0.25], [1+0.25, 1-0.25], [1-0.25, 1+0.25], [1+0.25, 1+0.25]. For n-dimensional space, then there will be $3^n$ neighboring points.\n", "\n", "![](images/Chapter3_NeighboringPoints.png)\n", "\n", "Ignoring the scalability issue, let's assume we do use the above approach to generate possible neighboring candidates at which we need to evaluate $f(X)$.\n", "\n", "**Step 3:** Of all neighboring points at which $f(X') < f(X)$, pick the one with the maximum difference and set this new point around which we explore the space. \n", "\n", "**Step 4**: Repeat step 2 and 3 until one reaches the point where $f(X') > f(X)$ for all neighboring point. \n", "\n", "The python code below implements the above logic. It assumes $\\eta$ to be 0.03 " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-05-19T23:26:34.613123Z", "start_time": "2020-05-19T23:26:34.535532Z" } }, "outputs": [ { "data": { "text/html": [ "Optimal (0.00999999999696713, 0.00999999999696713)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from collections import namedtuple\n", "import math\n", "from IPython.display import HTML\n", "from itertools import product\n", "import numpy as np\n", "\n", "# we will use Point class to store x and assocated y values\n", "Point = namedtuple('Point', ['x', 'y'])\n", "\n", "\n", "def func(x):\n", " \"\"\"the function we are trying to minimize\"\"\"\n", " return math.pow(x[0], 2) + math.pow(x[1],2)\n", "\n", "class Point(object):\n", " \n", " def __init__(self, X):\n", " self._x = X\n", " \n", " @property\n", " def x(self):\n", " return self._x\n", " \n", " def neighbors(self, distance=0.25):\n", " \"\"\"For a given point, generate all the neighbors \n", " by walking delta distance along a single dimension only\n", " \"\"\"\n", " pts = [\n", " np.array(self.x) - distance,\n", " np.array(self.x) + distance\n", " ]\n", " return [Point(x2) for x2 in product(*np.transpose(pts).tolist())]\n", " \n", " def __repr__(self):\n", " return str(self)\n", " \n", " def __str__(self):\n", " return \"{}\".format(self.x)\n", " \n", " def __eq__(self, other):\n", " return self.x == other.x\n", " \n", "\n", "def minimize_v1(func, start_point, eta = 0.03, max_iterations = 1000, traceback = None):\n", " \n", " x1 = Point(start_point)\n", " y1 = func(x1.x) \n", " \n", " for iter in range(max_iterations):\n", " \n", " if traceback:\n", " traceback.append(x1.x)\n", "\n", "\n", " # generate neighbors at distance of eta\n", " neighbors = x1.neighbors(eta)\n", " \n", " # Identify next point where the f(x) is smallest\n", " min_x = x1\n", " min_y = y1 \n", " \n", " for x2 in neighbors: \n", " y2 = func(x2.x)\n", " if y2 < min_y:\n", " min_x, min_y = x2, y2\n", " \n", " \n", " # if x2 is same as x1 then we are at minimum\n", " if x1 == min_x:\n", " return x1.x\n", " \n", " x1, y1 = min_x, min_y\n", " \n", " # if we reached max iterations then return current point\n", " return x1.x\n", " \n", "\n", "minPt = minimize_v1(func, [100, 100], eta=0.03, max_iterations=5000)\n", "display(HTML(\"Optimal {}\".format(minPt, iter)))\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-05-19T23:26:39.780651Z", "start_time": "2020-05-19T23:26:35.950925Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "47.1 ms ± 3.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%%timeit \n", "minimize_v1(func, [100, 100], eta=0.03, max_iterations=5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Gradient Approach\n", "Great, now we have a working function. But it's not scalable. If you have n-dimensional space, there are $3^n$ possible neighbors that we need to explore (this is assuming that we are taking $\\eta$ distance along each dimension). One way to solve the above scalability issue is use the concept of directional derivative and gradients. \n", "\n", "The main objective of step 2 is to find $X'$ for which $f(X')$ is smallest. This is exactly the kind of information that derivative provides. For instance, our function $f(X)=x_0^2 + x_1^2$ has two parameters: $x_0, x_1$. So partial derivative of our function $f(x)$, written as $\\Delta{f(X)}$ is given as:\n", "\n", "$$\\Delta{f(X)} = \\begin{bmatrix}\n", "\\frac{\\partial{f}}{\\partial{x_0}}\\\\ \n", "\\frac{\\partial{f}}{\\partial{x_1}}\n", "\\end{bmatrix} = \\begin{bmatrix}\n", "2x_0\\\\\n", "2x_1\n", "\\end{bmatrix}$$\n", "\n", "The partial derivative gives the direction of the steepest gradient. Since we are interested in minimization, we want to move opposite to the direction of the greatest gradient. Thus, rather than having to explore $3^n$ points, we can virtually find $X'$ using the below formula\n", "\n", "$$ X' = X - \\eta \\Delta{f(X)}$$\n", "\n", "\n", "There are two things to note in the above equation:\n", "\n", "1. $\\Delta{f(X)}$ gives the direction of steepest gradient. Since we want to minimize, we want to go in the opposite direction of the steepest gradient and hence 'minus' sign. \n", "2. $\\Delta{f(X)}$ is a unit vector. If we directly do $X - \\Delta{f(X)}$ then we are finding neighbors in the opposite direction of the steepest gradient that is at a distance of one unit from the current point X. A jump of one unit might be too much, and hence, we dampen it by multiplying by $\\eta$. Often **$\\eta$ is referred as the learning rate**.\n", "\n", "\n", "Using the gradient approach, let's write the second version of the minimization method. Note that the `func` variable now doesn't refer to the original function ($x_0^2 + x_1^2$) but to it's derivative i.e. ($2x_0 + 2x1$).\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-05-19T23:26:39.821255Z", "start_time": "2020-05-19T23:26:39.782278Z" } }, "outputs": [ { "data": { "text/html": [ "Optimal [4.35780706e-133 4.35780706e-133]" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from copy import copy\n", "\n", "def func_gradient(x):\n", " assert len(x) == 2\n", " return np.array([\n", " 2. * x[0],\n", " 2 * x[1]\n", " ])\n", "\n", "\n", "def minimize_v2(func, start_point, eta = 0.03, max_iterations = 1000, traceback = None):\n", " \n", " x1 = start_point\n", " \n", " for iter in range(max_iterations):\n", " \n", " if traceback is not None:\n", " traceback.append(copy(x1))\n", "\n", " x1 -= eta * np.array(func(x1))\n", " \n", " # if we reached max iterations then return current point\n", " return x1\n", "\n", "\n", "\n", "minPt = minimize_v2(func_gradient, [100, 100], eta=0.03, max_iterations=5000)\n", "display(HTML(\"Optimal {}\".format(minPt, iter)))\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-12-06T15:34:23.743231Z", "start_time": "2019-12-06T15:34:21.946313Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "18.8 ms ± 259 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "%%timeit \n", "minPt = minimize_v2(func_gradient, [100, 100], eta=0.03, max_iterations=5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Stopping Criteria\n", "\n", "If you compare v1 and v2 implementation, you will notice that using the gradient approach significantly simplified our logic. But in theory, it should also make it much more scalable and faster. One crucial detail that I skipped and affects the performance of the gradient-based approach is **stopping criteria**. Currently, the only way `minimize_v2` can stop is when it reaches the maximum number of iterations. If you plot the traceback, as shown below, you will notice that the x2 doesn't change much after 500 iterations." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-12-06T15:34:25.101324Z", "start_time": "2019-12-06T15:34:25.067419Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimal point is [4.35780706e-133 4.35780706e-133]\n" ] } ], "source": [ "traceback = []\n", "minPt = minimize_v2(func_gradient, [100, 100], eta=0.03, max_iterations=5000, traceback = traceback)\n", "print (\"Optimal point is {}\".format(minPt))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2019-12-06T15:34:27.703432Z", "start_time": "2019-12-06T15:34:25.641382Z" } }, "outputs": [ { "data": { "image/png": "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6623nvLn+Ku/+qscOnQohw4dys6dO4v6eHiX5l18SSqVSoZf2FV2FAAAAAAAYIYpvYR788038+CDD2bbtm3p6OjIZZddlptvvjn33HPPCefed9992bBhQz7+8Y+nra0tW7duzZNPPplXXnklSbJ9+/b09vZm8eLFWb58eb74xS+OX+fxxx9Po9HIl770pcydOzc33XRTVqxYkYcffjhJcu+992bTpk259NJLs2DBgmzdujXf+9730mg0kiR/8id/kj/+4z/O4sWLz9Enw3vVMmdO2lav9Vw4AAAAAADgnCu9hHvxxRfTbDazdu3a8dcuvfTS1Ov1E86t1+vp6ekZ/3rRokVZtmxZ6vV69u/fnz179hx3/J3Xqdfr6erqSktLyymPv/O9tVotx44dy0svvXTGP8s/+2f/LBdccEGuuuqq/M//+T/P+H1MnGqX58IBAAAAAADnXmvZAQ4dOpQFCxYc91pnZ2cOHjx40nMXLlx40nMPHTqUJMcdf+d1TvXeAwcOnPR4pVLJggULTprjZP7yL/8y69evT/LWXXUbNmzIwMBAPvShD532vQcOHMi+ffvO6Ptwdo59cHmO/nJPfvPKy5l13qKy4xRqdHQ0SdLaWvqvMdPE29vzQhHMKIpkPlE0M4oimVEUyXyiaGYURTKjKJL5dGpvdxZMD6XfCdfe3p6hoaHjXjtw4EA6OjrO6tz29vYkOe74O69zuu9zsuNDQ0MnzXEyH/vYx9LW1pa2trZ84QtfyGWXXZZHH330hPN27NiR6667Ltddd13uuOOOM7o2717L+96fls7OHH3+ubKjAAAAAAAAM0jp/23h4osvTqVSya5du7JmzZokybPPPptarXbCubVaLX19/2drwf3792dwcDC1Wi3nnXdeli5dmr6+vixduvSE69RqtXz961/P2NjY+JaUzz77bL7whS8cd+0bb7wxyVvbU86aNSurVq16Vz9XS0tLms3mCa9v3LgxGzduTJI888wzWb9+fRYuXJhFi6bXXVqTybHuy3Ls5y9n0T++ruwohfK/j5go5hFFMKOYCOYTRTGjmAhmFEUwn5goZhRFMKOYCObTiX53Rz+mttLvhJs/f34+/elPp7e3NwcPHkxfX1/uvffebNq06YRzb7rppjz66KN57LHHMjw8nM2bN+fKK6/MypUrkyQ333xztm3blr179+a1117L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AQAAAAAApohJUcK98cYb+cxnPpOOjo5ceOGFueuuu0557kMPPZSLLroo8+fPzzXXXJPdu3ePHzty5Eg+//nPp7OzMxdccEE2b9583Hvr9Xo++tGPplqtplar5Yknnjju+Le//e1ceOGF6ejoyA033JChoaHjjl1xxRWZO3duPvvZz56Q63TXZuqad/ElqbS0ZPj5XWVHAQAAAAAApohJUcLddtttGR0dzZ49e/LII4+kt7c3P/nJT0447/nnn8+mTZty9913Z+/evVm1alVuvPHG8eNbtmxJf39/Xn755Tz11FO5//77s3379iTJ0aNHc9111+X666/P/v378+Uvfzmf+tSnsn///iTJj3/843zta1/LD3/4w+zevTsjIyO5/fbbx6+9dOnSfOUrX8mtt956Qq7TXZuprWXOnLStXmNLSgAAAAAA4IyVXsK9+eabefDBB7Nt27Z0dHTksssuy80335x77rnnhHPvu+++bNiwIR//+MfT1taWrVu35sknn8wrr7ySJNm+fXt6e3uzePHiLF++PF/84hfHr/P444+n0WjkS1/6UubOnZubbropK1asyMMPP5wkuffee7Np06ZceumlWbBgQbZu3Zrvfe97aTQaSZI/+ZM/yR//8R9n8eLFJ+Q63bWZ+qq1njTq/WXHAAAAAAAApojSS7gXX3wxzWYza9euHX/t0ksvTb1eP+Hcer2enp6e8a8XLVqUZcuWpV6vZ//+/dmzZ89xx995nXq9nq6urrS0tJzy+DvfW6vVcuzYsbz00kun/RlOd22mvmpXT47+ck+O/nZv2VEAAAAAAIApoLXsAIcOHcqCBQuOe62zszMHDx486bkLFy486bmHDh1KkuOOv/M6p3rvgQMHTnq8UqlkwYIFJ81xprnevvbpHDhwIPv27TujcylHc+68tHR25jc/ezLzrvxY2XGSJKOjo0mS1tbSf42ZJmyhS5HMKIpkPlE0M4oimVEUyXyiaGYURTKjKJL5dGpn2iswNZQ+Mdvb2zM0NHTcawcOHEhHR8dZndve3p4kGRoaGv/zO69zuu9zsuNDQ0MnzfFefoYdO3Zkx44d4+cwNVQqlcxevTZHX9g1aUo4AAAAAABg8iq9hLv44otTqVSya9eurFmzJkny7LPPplarnXBurVZLX1/f+Nf79+/P4OBgarVazjvvvCxdujR9fX1ZunTp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zV2+Ii3z29PY6W44AAAAAACYKZRwMMEqLS2pruuyJSUAAAAAAMwgSjg4B6q17jR2DqTZbJYdBQAAAAAAOAeUcHAOVGvdOfbG/hz5xWDZUQAAAAAAgHNACQfnQOt5izLnA8vSGLAlJQAAAAAAzARKODhHqrWuNOp9ZccAAAAAAADOASUcnCPVWk+GX3w+YyOHy44CAAAAAABMMCUcnCPzLr4klZaWDD+/q+woAAAAAADABJsUJdwbb7yRz3zmM+no6MiFF16Yu+6665TnPvTQQ7nooosyf/78XHPNNdm9e/f4sSNHjuTzn/98Ojs7c8EFF2Tz5s3Hvbder+ejH/1oqtVqarVannjiieOOf/vb386FF16Yjo6O3HDDDRkaGjrjjJVKJfPnz097e3va29uzYcOG9/KRMA21zJmTttVrbEkJAAAAAAAzwKQo4W677baMjo5mz549eeSRR9Lb25uf/OQnJ5z3/PPPZ9OmTbn77ruzd+/erFq1KjfeeOP48S1btqS/vz8vv/xynnrqqdx///3Zvn17kuTo0aO57rrrcv3112f//v358pe/nE996lPZv39/kuTHP/5xvva1r+WHP/xhdu/enZGRkdx+++1nlfHpp5/OoUOHcujQoTz66KMT8VExxVVrPWkM9JcdAwAAAAAAmGCll3BvvvlmHnzwwWzbti0dHR257LLLcvPNN+eee+454dz77rsvGzZsyMc//vG0tbVl69atefLJJ/PKK68kSbZv357e3t4sXrw4y5cvzxe/+MXx6zz++ONpNBr50pe+lLlz5+amm27KihUr8vDDDydJ7r333mzatCmXXnppFixYkK1bt+Z73/teGo3GWWWE36fa1ZOjf78nR/f+puwoAAAAAADABGotO8CLL76YZrOZtWvXjr926aWX5k//9E9POLder+cjH/nI+NeLFi3KsmXLUq/Xs2jRouzZsyc9PT3HXeftLSnr9Xq6urrS0tJy3PF6vT5+/JOf/OT4sVqtlmPHjuWll17K2NjYGWW8+uqrc+zYsVxxxRX5+te/nnXr1p3RZ3DgwIHs27fvjM5lamvOnZeWzvPym//3p5l35cfe07VGR0eTJK2tpf8aM028fWcwFMGMokjmE0UzoyiSGUWRzCeKZkZRJDOKIplPp3bgwIGyI1Cg0ifmoUOHsmDBguNe6+zszMGDB0967sKFC096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n6W5uTlHHHFEzjrrrFx11VX50z/901rHY4Rp2HdyRk3YOz0rlqdxnxfXOg4AAAAAAMPQO97xjpx77rm5/vrrc9555w28/q1vfSvVajXvfve78+///u95zWtekw984ANpbGzM//2//zfvfe97U61W8573vGeb9ebNm5fTTz895557burqdnwf2OrVqzNt2rScdtppaW5uzj333JOLL744GzduzIIFC7Y596//+q9z3HHH5Z//+Z+zbNmyLFiwIKNHj84nP/nJnX5Pf/EXf5GvfvWr+Zu/+Zu88pWvzJ133pmLLrooTU1N+cAHPvA8flq7TwlXkIceeijVajXTp08feO3www/PZz7zmWd974YNG7J27drBjMcIVPeyQ7L+jn9PT1dXraMwQnT3dCdJepvKNU7CSPDU31za2f9swe4wnyiaGUWRzCiKZD5RNDOKIplRFKm7pztpPbzWMYakDRs2vKCf19LSkre85S1ZunTpNiXc0qVL88Y3vjGTJk3KKaecMvB6tVrNa1/72vzmN7/JP/7jP25Xwp1wwgnPWJAlyRvf+Ma88Y1vHFjv6KOPTnd3d77whS9sV8IdfPDBWbx4cZLkTW96U7q7u/OZz3wmF110Ufbaa6/t1n7kkUfyhS98If/4j/+Y97///UmSY445Jl1dXfn4xz+e97///S/oHFPCFaSrqystLS3bvDZ+/Ph0dnZu89rSpUuzdOnSJC/8LxMjS8OsV6T3pm9l0/+7s9ZRGCn6tiZJNtXvmQ9JpVjVajVJUiqVapyEEcF8omBmFIUyoyiQ+UThzCgKZEZRqL6tycv2zGeEDUVz5szJSSedlFWrVmXKlCn57W9/mzvuuGOg/Fq3bl0uvvjifPe7383q1auzdeuT/33Ze++9t1vrLW95y7N+Xm9vb/7u7/4u1157bVatWpUtW7YMHOvq6kqlUhn4+sQTT9zmve94xzuyaNGi3HvvvXnta1+73do//OEPkyTvfOc7t9m28o1vfGP+/u//Pr/+9a+z//77P2vGoijhClKpVNLR0bHNaxs2bEhzc/M2r82ZMydz5sxJkixbtiyzZs0a2MsUdkffrD9JZv1J6uv9GlOMp+7INY8owlP/k2NGUQTziaKZURTJjKJI5hNFM6MokhlFkcynnRs3btwL/plve9vb0tzcnG9+85v5q7/6q1x33XUZPXp03v72tydJzjrrrNx5551ZsGBBDjvssLS0tOSLX/xirrvuuu3WetGLXvSsn3fRRRflK1/5Si6++OLMmjUr48ePz3e/+90sWrQovb2925Rwf7zeU18//vjjO1x7zZo1qVarmThx4g6PK+GGqUMOOSSlUin3339/Dj300CTJPffck9bW1honAwAAAAAA2LHGxsa8/e1vHyjhvvnNb+atb31rWlpa0tvbm1tuuSWf/vSnc/755w+856ktav/Yrtwte/3112fevHm56KKLBl675ZZbdnju7373ux1+ve++++7w/AkTJqRUKuUnP/lJRo8evd3xadNe2DswbeBbkLFjx+Zd73pX5s+fn87OzrS3t+fqq6/O3Llzax0NAAAAAABgp+bMmZOf/exn+d73vpf/+q//yqmnnpok2bRpU7Zu3bpNodXZ2ZmbbrrpOX9WT0/PNutt3bo13/zmN3d47re//e1tvr7xxhtTLpczY8aMHZ7/1LPmfv/73+eoo47a7p8/3r1wsLkTrkBXXHFFzjnnnOy7775paWnJwoUL84Y3vKHWsQAAAAAAAHbqmGOOyaRJk3L22WenpaVl4Nlu48aNy5/8yZ/kk5/8ZCZNmpT6+vp88pOfzLhx47a7S21XHXvssfnKV76S6dOnZ9KkSbniiiuyadOmHZ77yCOPZO7cuTnllFOybNmyfOpTn8oFF1yQvfbaa4fnH3LIIfngBz+YM844IxdeeGFe+cpXZsuWLXnooYdy22235Tvf+c5zyvxcPecS7he/+EXuuuuu/PrXv86ZZ56ZffbZJ48++mgmTZq0zX6de5Lx48fn+uuvr3UMAAAAAACAXVZfX593v/vdufLKK3PmmWemsbFx4NiSJUvy/ve/P2eeeWb23nvvfOhDH0pXV1cuv/zy5/RZn//85/OBD3wg559/fsrlcs4666yceOKJOeecc7Y799JLL83tt9+ed7/73Rk1alT+/M//PJdeeukzrv+5z30u06ZNy5e+9KUsXLgwY8eOzbRp03LSSSc9p7zPR6larVZ35w09PT2ZN29elixZkv7+/pRKpfz0pz/NkUcemXe+85152ctelk996lODlXdEWbZsWWbNmpW77747Rx55ZK3jMMx4GC5F80BcimRGUSTziaKZURTJjKJI5hNFM6MokhlFkcynndMbjCy7/Uy4Cy+8MN/73vfy7W9/Oxs2bMjTO7y3vvWt+bd/+7dCAwIAAAAAAMBws9t/beGf//mf86lPfSp/9md/lq1bt25z7IADDsjKlSuLygYAAAAAAADD0m7fCdfV1ZWXvOQlOzzW09OT3dzdEgAAAAAAAEac3b4TbsaMGbnxxhtz7LHHbnfsX//1XzNr1qxCggEAAAAAADB4WltbC1/ztNNOy8c+9rHC1x2OdruE+5u/+ZuceOKJ6e3tzbvf/e6USqXcfffduf766/PVr341//Iv/zIYOQEAAAAAACjQfffdl46OjkLXbGhoKHS94Wy3S7jjjz8+S5YsyYUXXph/+qd/SpLMmzcv++67b77+9a/nuOOOKzwkAAAAAAAADCe7XcIlycknn5yTTjop999/f9asWZMJEyZk+vTpqavb7UfMkeT++++vdQSGob6+viRJff1z+jWG7WzYsCFJMm7cuBonYSQwoyiS+UTRzCiKZEZRJPOJoplRFMmMokjm087pC0aWUrVardY6xJ5q1apVOfTQQ9Pd3V3rKAAAAAAAwBBQLpdz//33Z8qUKYP+WaVSaVC2o2xsbCx0zeFqt0u4T3ziE8+8YKnkgXu7YdWqVVmzZk2tYzBMffjDH84//MM/1DoGwA6ZUcBQZkYBQ5X5BAxlZhS8MCZOnPiCFHCJEm6w7XYJ19TUtN1rmzZtSvLkD3bUqFHu7IIXyNKlSzNnzpxaxwDYITMKGMrMKGCoMp+AocyMgpFHCTe4CtmOsqenJ9///vdz8cUX59prr81hhx1WRDYAAAAAAAAGyVAo4W677bYsXLgwy5YtS1NTU377298WmqeW6opYpKmpKSeccELOO++8zJs3r4glAQAAAAAAGOHGjh2bs88+O5/5zGdqHaVwhZRwT9l///3zs5/9rMglAQAAAAAAGMZWrlyZCRMm5Cc/+UmSZP369ZkyZUqWLl2aV7ziFTnjjDNy8MEH1zhl8eqLWujXv/51Lrvsshx00EFFLblHWLVqVdasWVPrGAAAAAAAwBAwceLETJky5QX5rF+ceXKeOP+cQtesvPFNefEZc7d57YADDsjnPve5nHHGGWlvb8+5556b1772tSP+OZO7XcLttddeKZVK27y2efPm9PT0pLGxMTfeeGNh4Ua6VatWZdq0aent7a11FAAAAAAAYAhobGzMgw8++IIVcS+U008/PbfeemuOPvrodHR0pL29vdaRBt1ul3Af/OAHtyvhGhsb85KXvCRvfetbM3HixMLCjXRr1qxRwAEAAAAAAAN6e3uzZs2aEVfCJcm8efPyute9LpdeemnGjRtX6ziDbrdLuEWLFg1GDgAAAAAAAF5AU//punR0dBS6ZkNDww5f7+3tzbnnnpv3vve9ufzyy3Paaadl//33L/Szh5rCngkHAAAAAAAAO/KRj3wkBx54YL761a9m0qRJOeOMM3L77bcnefKxZ5s3b07yZFlXKpUyZsyYGqYtxi6VcEceeeQuL1gqlXL33Xc/50AAAAAAAACMHLfeemu+9a1vDTwHbuHChXn1q1+dT33qU3n1q1+dP/3TPx04t6mpKfvvv39WrlxZo7TF2aUSbvr06ds9Bw4AAIBifOQjH8kZZ5yRAw44IBs2bMjXv/71LFiwIP39/bWOBgAA8LzNnj07jz/++MDXDQ0Nueuuuwa+rlartYg1vvm8OwAAIABJREFU6HaphPvGN74x2DkAAAD2WHV1dTn77LPT3t6eyZMn56abbkpHR0cuu+yyWkcDAADgOaqrdQAAAIA9wf7775/f//73ec1rXpMkGTduXH71q1/llFNOyWWXXZa77747fX19WbVqVa699tocffTRNU4MAADA87FLd8L9sWq1mjvuuCMPPfRQent7tzv+oQ996HkHAwAAGEl+9atf5UMf+lCuueaatLW15Ytf/GL+4z/+I9/85je3O/d1r3tdli9fXoOUAAAAFGW3S7gnnngib3jDG3L//fenVCoN7NP59GfGKeEAAAC2d+2112b27Nn5yU9+kpaWlrS1tW13znnnnZcZM2bkPe95Tw0SAgAAUJTd3o7yf//v/52WlpY8+uijqVarufPOO/Pwww/n4osvztSpU/PAAw8MRk4AAIAR4Utf+lJmzpyZL3/5y+no6Njm2GmnnZaPfexjOe6447J27doaJQQAAKAIu30n3B133JHPfvazeelLX5rkyQeIH3TQQVmwYEFKpVIuuOCC3HLLLYUHBQAAGO7GjBmTL37xi/nqV7+aj3zkI7n22muzatWqJMmcOXNy+eWX55hjjsmDDz5Y46QAAMCeYNmyZXn44YcLXXPSpEl5yUteUuiaw9Vul3Dr16/Pi170otTV1aWlpSW/+93vBo695jWvyWWXXVZoQAAAgJHi8ssvz6OPPppzzjkn//M//5Nrrrkmr3/963PyySfn//yf/5Pjjjsu9913X61jAgAAe4gjjjii1hFGtN3ejvLAAw/M448/niSZPn16rr322oFjN910U8aPH19cOgAAgBHizW9+c975znfm7LPPTpIsWLAg5XI5F110UT7xiU9k/Pjx+fGPf5zOzs50dnbmX//1X2ucGAAAgOejVK1Wq7vzhr/6q7/KmjVrctVVV+Xmm2/OiSeemIkTJ6ahoSGrV6/OJz7xiVx00UWDlXdEWbZsWWbNmlXrGAAAAAAAwBBy991358gjjxz0zymVSoWvef755+dzn/tc4esOR7u0HeXDDz+cl73sZUmyzXaTb3vb2/KTn/wkN954Y3p6enLsscfmz/7szwYnKQAAAAAAAIXq6OgodL2GhoZC1xvOdqmEO+SQQ/KKV7wip512Wk466aTss88+A8de+cpX5pWvfOWgBQQAAAAAAIDhZpeeCXfFFVdk9OjRueCCC/KSl7wkb3rTm3LNNdekq6trsPMBAAAAAADAsLNLJdy5556b//iP/8jKlSuzaNGiPPHEEznzzDOzzz775JRTTsm//Mu/pK+vb7CzAgAAAAAAwLCwSyXcU1760pfmoosuyj333JOf//zn+fCHP5y77rorJ5xwQvbZZ5/Mmzcvd9xxx2BlHXE2bdpU6wgAAAAAAMAQoz8YGUrVarX6fBf57//+73zlK1/J4sWLUyqV3BW3i5YtW5ZZs2blkksuyYEHHljrOAwzW7duTZKMGjWqxkkYKZ7aYrhSqdQ4CSOBGUWRzCeKZkZRJDOKIplPFM2MokhmFEUyn3bu0Ucfzfz583P33XfnyCOPHPTPK5VK6ejoKHTNhoaGNDY27vL5f//3f59rrrkmK1euzLhx4/Ke97wnCxcuHBHzpv75vLmvry//9m//lqVLl+a73/1uqtVqjjjiiKKy7THe8pa3vCC/TIwsT5Xd9fXP69cYBqxduzZJMmHChBonYSQwoyiS+UTRzCiKZEZRJPOJoplRFMmMokjm084tW7Ys8+fPr3WMF1R/f3+uuuqqtLW15bHHHsvxxx+flpaWXHTRRbWO9rzt1naUT7n99tszb968vPjFL87xxx+f//7v/85f/uVf5v77789dd91VdEYAAAAAAACGqZUrV2bChAn5yU9+kiRZv359pkyZkqVLl+aiiy7KUUcdlYaGhuy///457bTTBs4b7nb5ry3cfffdWbJkSa677ro8/vjjmTRpUk499dScdtppeeUrXzmYGQEAAAAAABimDjjggHzuc5/LGWeckfb29px77rl57Wtfmzlz5mx37h133JGZM2fWIGXxdqmEO+SQQ/LII49k7Nixefvb357TTjstxxxzzIjYjxMAAAAAAGBPdPK9v8g5v3qi0DXfNK6SuS998Xavn3766bn11ltz9NFHp6OjI+3t7dud8/nPfz733ntvvv71rxeaqVZ2qYR7+ctfnksuuSTHH398mpqaBjsTAAAAAAAAI8y8efPyute9LpdeemnGjRu3zbFvfOMb+bu/+7v86Ec/yt57712jhMXapRLupptuGuwcAAAAAAAAjFC9vb0599xz8973vjeXX355TjvttOy///5JkiVLluQjH/lIfvjDH+blL395jZMWZ5efCQcAAAAAAMDIcd2Mqeno6Ch0zYaGhh2+/pGPfCQHHnhgvvrVr2bSpEk544wzcvvtt+e6667LX/zFX+T73/9+WltbC81Sa3W1DgAAAAAAAMDIdeutt+Zb3/pWrrrqqiTJwoUL093dnU996lP567/+66xfvz7/63/9r1QqlVQqlcyePbvGiYvhTjgAAAAAAAAGzezZs/P4448PfN3Q0JC77rorSfKxj32sVrEGnTvhAAAAAAAAoGBKOAAAAAAAACiYEo4hp7e/P6t6N9U6BgAAAAAAwHM2JEq49evX56STTkpzc3P222+/XHnllTs994YbbshBBx2UsWPH5rjjjsvq1asHjm3evDnz5s3L+PHjM2nSpCxYsGCb965YsSKvetWrUi6X09ramh//+MfbHP/CF76Q/fbbL83NzTn55JPT0dGRJNm0aVPe97735cADD0xzc3MOO+ywXHvttbu1NrvuzvWd+eTKx1KtVmsdBQAAAAAA4DkZEiXceeedl76+vjz22GO5+eabM3/+/Nx2223bnffAAw9k7ty5+fKXv5w1a9Zk6tSpOfXUUweOL1y4MMuXL8/DDz+cn/70p7n22muzePHiJMmWLVty/PHH58QTT8y6devy0Y9+NCeccELWrVuXJPnBD36Qj3/847nllluyevXqbNq0Keeff36SpK+vL5MnT86///u/Z8OGDfnSl76UP//zP89//ud/7tLa7J6ZlXLW9m3NbzZtrnUUAAAAAACA56TmJdzGjRtz/fXXZ9GiRWlubs4RRxyRs846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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# convert traceback into a data frame for plotting purpose\n", "df = pd.DataFrame(traceback, columns=['x1', 'x2'])\n", "df['iteration'] = list(range(1, df.shape[0]+1))\n", "df = df.melt(id_vars='iteration', value_vars=['x1', 'x2'])\n", "\n", "from plotnine import *\n", "%matplotlib inline\n", "(\n", " ggplot(df[df['iteration'] % 250 == 0], aes(x='iteration', y='value'))\n", " + geom_line(aes(group='variable', color='variable'))\n", " + facet_wrap(\"~variable\", nrow=2)\n", " + xlab(\"Iteration Number\")\n", " + ylab(\"Value\")\n", " + theme_linedraw()\n", " + theme(figure_size=(20, 8))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thus, one way to speed up things is to introduce a stopping criteria. Let's assume we stop as soon as the euclidean distance between x1 and x2 is less than some threshold, say 1e-6. Minimize V3 adds this stopping criteria. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-12-06T15:34:27.724286Z", "start_time": "2019-12-06T15:34:27.705328Z" } }, "outputs": [ { "data": { "text/html": [ "Optimal [1.09676626e-05 1.09676626e-05]" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Total Number of Iterations: 259" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from copy import copy\n", "from scipy.spatial import distance\n", "\n", "def func_gradient(x):\n", " assert len(x) == 2\n", " return np.array([\n", " 2. * x[0],\n", " 2 * x[1]\n", " ])\n", "\n", "\n", "def minimize_v3(func, start_point, eta = 0.03, max_iterations = 1000, traceback = None, stopping_threshold = 1.0e-6):\n", " \n", " x1 = start_point\n", " \n", " for iter in range(max_iterations):\n", " \n", " if traceback is not None:\n", " traceback.append(copy(x1))\n", "\n", " x2 = x1 - eta * np.array(func(x1))\n", " \n", " # check if we reached stopping criteria threshold\n", " if distance.euclidean(x2, x1) < stopping_threshold:\n", " return x2\n", " else:\n", " x1 = x2\n", " \n", " # if we reached max iterations then return current point\n", " return x1\n", "\n", "\n", "traceback = []\n", "minPt = minimize_v3(func_gradient, [100, 100], eta=0.03, max_iterations=5000, traceback=traceback, stopping_threshold=1.0e-6)\n", "display(HTML(\"Optimal {}\".format(minPt, iter)))\n", "display(HTML(\"Total Number of Iterations: {}\".format(len(traceback))))\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2019-12-06T15:34:32.631899Z", "start_time": "2019-12-06T15:34:28.423883Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.88 ms ± 274 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "%%timeit \n", "minPt = minimize_v3(func_gradient, [100, 100], eta=0.03, max_iterations=5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can notice above, we reached reasonably close to the optimal point (0, 0) in just 259 iterations, and the performance increased 5x. The mean time reduced from 23 ms to 5 ms in my runs.\n", "\n", "## More things to consider\n", "Gradient descent algorithm is still an active area of research. There are many aspects of the algorithm that influences its performance both in terms of running time and accuracy. For instance, I didn't talk much about the impact of the learning rate on the performance and accuracy of the gradient descent approach. A small learning rate increases running time but improves accuracy and vice-versa. However, the learning rate doesn't have to be constant. There are many variants of the gradient descent algorithm where the learning rate is dynamically modified based on the number of iteration, steepness of the gradient, etc. Hence, I would recommend thinking about the following things:\n", "\n", "1. Different types of stopping criteria\n", "2. Impact of learning rate on performance and accuracy. \n", "3. How to make learning rate auto-adjust (search for 'Momentum' gradient descent)\n", "4. Automatically deriving partial derivative of a given function (checkout 'autograd' library)\n", "\n", "In the next chapter, I will show this idea of gradient descent is used in linear regression.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n" ] }, { "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" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "384px" }, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }