diff --git a/doc/Programs/ANN/Ann1.ipynb b/doc/Programs/ANN/Ann1.ipynb new file mode 100644 index 000000000..4b5742f88 --- /dev/null +++ b/doc/Programs/ANN/Ann1.ipynb @@ -0,0 +1,570 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##

Nicolas Dronchi

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day 22 Pre-Class assignment: Introduction to Artificial Neural Networks\n", + "\n", + "This entire Artificial Neural Networks module is from Neural Networks Demystified by @stephencwelch. We have streamlined the content to better fit the format of the class. However, if you have questions or are just curious I highly recommend downloading everything from the following git repository. It is a great reference to have:\n", + "\n", + " git clone https://github.com/stephencwelch/Neural-Networks-Demystified\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Goals for today's pre-class assignment \n", + "\n", + "

\n", + "\n", + "1. Think about the architecture of Artificial Neural Networks\n", + "1. Model data flow by performing forward propagation\n", + "1. Explore A Neural Network (through a visualization)\n", + "\n", + "## Assignment instructions\n", + "\n", + "**This assignment is due by 11:59 p.m. the day before class** and should be uploaded into the appropriate \"Pre-class assignments\" dropbox folder in the Desire2Learn website.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. The architecture of Artificial Neural Networks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Watch the following video:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('bxe2T-V8XRs',width=640,height=360)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will use the data from the video above:\n", + "$$X = \\left[\\begin{matrix} 3 & 5 \\\\ 5 & 1 \\\\ 10 & 2 \\end{matrix}\\right] \\hspace{1cm} , \\hspace{1cm}y = \\left[ \\begin{matrix} 75 \\\\ 82 \\\\ 93 \\end{matrix}\\right] $$\n", + "\n", + "\n", + "### ✅ Step 1: Initialize your inputs\n", + "Create two numpy arrays to store the values of the variables $X$ and $y$, as well as their normalized counterparts \n", + "$X_{norm}$ and $y_{norm}$." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# your code here (Note include needed libraries):\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# input data (hours of sleep, hours of study)\n", + "X = np.array([[3,5],[5,1],[10,2]])\n", + "\n", + "# normalized X\n", + "X_norm = X/np.amax(X)\n", + "\n", + "# output data (test score)\n", + "y = np.array([[75],[82],[93]])\n", + "\n", + "# normalized y\n", + "y_norm = y/100\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Data flow: forward propagation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data in a neural network flows via a process called **forward propagation**. Watch the following video:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI\nCAgIChAMCAgOCQgIDBUMDhERExMTCA0WGBYSGBASExIBBQUFCAcIDwkJDxQPEBQUFBQUFBQUFBQU\nFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIAWgB4AMBIgACEQED\nEQH/xAAcAAEAAQUBAQAAAAAAAAAAAAAAAQIDBAUGCAf/xABVEAABAwICBAcIDQoEBQQDAAABAAID\nBBEFIQYSMUETIlFUYXGUFBgyUoGRodQHCCNCYnJ0sbTB0dXwJDM1Q0SCkpPC4RVTs/ElNIOy0mNk\nc6IXRUb/xAAaAQEBAAMBAQAAAAAAAAAAAAAAAQIDBAUG/8QAMxEBAQACAQEHAgMIAgMBAAAAAAEC\nEQMhBBIxQVFhkXGBBaHwExQVIjKxweFS0WLC8UL/2gAMAwEAAhEDEQA/APGSIiAiIgIiICIiAiIg\nIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIi\nAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIi\nICIiAiIgIiICIiAiIgIiICIiAiIgIiICL0V3nelXOMF7XVepp3nelXOMF7XVepqbHnVF6K7zvSrn\nGC9sqvU07zvSrnGC9rqvU02POqL0V3nelXOMF7XVepp3nelXOMF7XVeppsedUXovvO9KucYL2uq9\nTUd53pVzjBe11XqabHnVF6K7zvSrnGC9rqvU1Ped6Vc4wXtdV6mrsedEXorvO9KucYL2uq9TTvO9\nKucYL2uq9TQedUXorvO9KucYL2yq9TU953pVzjBe2VXqaDzoi9Fd53pVzjBe11Xqad53pVzjBe11\nXqaDzqi9Fd53pVzjBe2VXqad53pVzjBe11XqaDzqi9Fd53pVzjBe11XqanvO9KucYL2uq9TQedEX\novvOtKucYL2yq9TTvOtKucYL2yq9TQedEXovvOtKucYL2yq9TTvOtKucYL2yq9TQedEXovvOtKuc\nYL2yq9TTvOtKucYL2yq9TQedEXovvOtKucYL2yq9TTvOtKucYL2uq9TQedEXovvOtKucYL2yq9TT\n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\nEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER\nAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQER\nEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAR\nEQEREH//2Q==\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('UJwK6jAStmg',width=640,height=360, align='Center')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question 1:** How many input layers, hidden layers and output layers are there in the neural network shown in the video?" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Put your answer here\n", + "inputLayerSize = 2\n", + "outputLayerSize = 1\n", + "hiddenLayerSize = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ Step 2: Initialize random weights\n", + "Randomly initialize two numpy arrays W1 and W2, of the right dimensions, to store the weights (zero-one) in the synapses between input layer --> hidden layer, and hidden layer --> output layer " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# your code here:\n", + "\n", + "W1 = np.random.randn(inputLayerSize, hiddenLayerSize)\n", + "\n", + "\n", + "W2 = np.random.randn(hiddenLayerSize, outputLayerSize)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ Step 3: Multiply the normalized input matrix by $W^{(1)}$\n", + "$$Z^{(2)} = X W^{(1)} $$ \n", + "Here is the code using the NumPy `dot` function. If you get an error you may have initilized the size of your variables incorrectly. Make sure the second dimension of ```X_norm``` matches the first dimension of ```W1```:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.85206517, -0.46315777, 0.47725383],\n", + " [-0.96041205, -1.14843537, 0.98384797],\n", + " [-1.92082411, -2.29687075, 1.96769593]])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Z2 = np.dot(X_norm, W1)\n", + "Z2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ **Do This:** Implement and test the sigmoid function \n", + "\n", + "$$a(z) = \\frac{1}{1 + e^{-z}} $$ \n", + "\n", + "The implemented sigmoid function should take as input a numpy array and return a numpy array of the same dimension, with the function $f$ applied to each entry." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# your code here:\n", + "def sigmoid(z):\n", + " # apply sigmoid activation function\n", + " return 1/(1+np.exp(-z))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your sigmoid function using the following testing code:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\npHIXEUlA/w9Y/WjLrGBbcQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "testInput = np.arange(-6,6,0.01)\n", + "plt.plot(testInput, sigmoid(testInput), linewidth= 2)\n", + "plt.grid(1)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ Step 4: Apply the sigmoid function to $Z^{(2)}$\n", + "$$a^{(2)} = f({Z^{(2)}})$$ \n", + "Here is the code to apply the sigmoid function to $Z^{(2)}$ and display the results" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.29899982, 0.38623698, 0.6170992 ],\n", + " [0.2767957 , 0.24077498, 0.72787107],\n", + " [0.1277697 , 0.09138246, 0.87736342]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a2 = sigmoid(Z2)\n", + "a2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ Step 5: multiply $A^{(2)}$ by $W^{(2)}$ to get $Z^{(3)}$\n", + "$$Z^{(3)} = A^{(2)} W^{(2)} $$ " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.72574334],\n", + " [1.70159205],\n", + " [1.58224372]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Z3 = np.dot(a2, W2)\n", + "Z3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ✅ Step 6: Apply the sigmoid function again to $Z^{(3)}$ to produce $\\hat{y}$\n", + "$$\\hat{y} = f({Z^{(3)}})$$ " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# your code here:\n", + "yHat = sigmoid(Z3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Final Comparison\n", + "Now compare the estimation output ($\\hat{y}$) to the actual output ```y_norm```. " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.75],\n", + " [0.82],\n", + " [0.93]])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_norm" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.84886714],\n", + " [0.84574255],\n", + " [0.82952205]])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "yHat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course the results from forward propagation are terrible; no surprises here! The weights have not been properly chosen. That's what training a network does: the goal is to find a combination of weights so that the result of forward propagation fits the intended output data as best as possible. \n", + "\n", + "We will be covering this topic in class." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Exploring A Neural Network\n", + "\n", + "Please go to the following website : http://playground.tensorflow.org/\n", + "\n", + "There, you'll have the opportunity to play with an actual neural network (e.g., choosing its architecture and the type of activation function) for classification purpose. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "# Assignment wrap-up\n", + "\n", + "Please fill out the form that appears when you run the code below. **You must completely fill this out in order to receive credit for the assignment!**" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import HTML\n", + "HTML(\n", + "\"\"\"\n", + "\n", + "\"\"\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---------\n", + "### Congratulations, you're done with your pre-class assignment!\n", + "\n", + "Now, you just need to submit this assignment by uploading it to the course Desire2Learn web page for today's dropbox (Don't forget to add your name in the first cell)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "© Copyright 2017, Michigan State University Board of Trustees" + ] + } + ], + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/doc/Programs/ANN/Ann2.ipynb b/doc/Programs/ANN/Ann2.ipynb new file mode 100644 index 000000000..15ffa522e --- /dev/null +++ b/doc/Programs/ANN/Ann2.ipynb @@ -0,0 +1,922 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###

Nicolas Dronchi

\n", + "\n", + "####

Yitian, Jake, David

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day 23 In-Class Assignment: Artificial Neural Network\n", + "\n", + "

\n", + "\n", + "\n", + "

From: Machine Learning for Artists - https://ml4a.github.io/

\n", + "\n", + "\n", + "\n", + "1. **Scientific motivation** \n", + " - Data Analysis / Pattern Recognition\n", + "2. **Modeling tools** \n", + " - Artificial Neural networks\n", + " - Error Calculations\n", + "3. **Programming concepts** \n", + " - More Debugging\n", + " - Selecting and using libraries\n", + "4. **Python Programming Concepts** \n", + " - More Understanding classes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Agenda for today's class \n", + "\n", + "

\n", + "1. Review pre-class assignment\n", + "1. Modify code to be more flexible\n", + "1. Use our ANN on the \"Digits\" dataset\n", + "1. Finding/Using Neural Networks Libraries" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "# 1. Review pre-class assignment\n", + "\n", + "Below we summarize the steps involved in designing and training a feed-forward artificial neural network. We will use the [partSix.py](./partSix.py) file provided in the \"Neural Networks Demystified\" module which can be downloaded from github:\n", + "\n", + " git clone https://github.com/stephencwelch/Neural-Networks-Demystified\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# %load partSix.py\n", + "# Neural Networks Demystified\n", + "# Part 6: Training\n", + "#\n", + "# Supporting code for short YouTube series on artificial neural networks.\n", + "#\n", + "# Stephen Welch\n", + "# @stephencwelch\n", + "\n", + "\n", + "## ----------------------- Part 1 ---------------------------- ##\n", + "import numpy as np\n", + "\n", + "# X = (hours sleeping, hours studying), y = Score on test\n", + "X = np.array(([3,5], [5,1], [10,2]), dtype=float)\n", + "y = np.array(([75], [82], [93]), dtype=float)\n", + "\n", + "# Normalize\n", + "X = X/np.amax(X, axis=0)\n", + "y = y/100 #Max test score is 100\n", + "\n", + "## ----------------------- Part 5 ---------------------------- ##\n", + "\n", + "class Neural_Network(object):\n", + " def __init__(self):\n", + " #Define Hyperparameters\n", + " self.inputLayerSize = 2\n", + " self.outputLayerSize = 1\n", + " self.hiddenLayerSize = 3\n", + "\n", + " #Weights (parameters)\n", + " self.W1 = np.random.randn(self.inputLayerSize,self.hiddenLayerSize)\n", + " self.W2 = np.random.randn(self.hiddenLayerSize,self.outputLayerSize)\n", + "\n", + " def forward(self, X):\n", + " #Propogate inputs though network\n", + " self.z2 = np.dot(X, self.W1)\n", + " self.a2 = self.sigmoid(self.z2)\n", + " self.z3 = np.dot(self.a2, self.W2)\n", + " yHat = self.sigmoid(self.z3)\n", + " return yHat\n", + "\n", + " def sigmoid(self, z):\n", + " #Apply sigmoid activation function to scalar, vector, or matrix\n", + " return 1/(1+np.exp(-z))\n", + "\n", + " def sigmoidPrime(self,z):\n", + " #Gradient of sigmoid\n", + " return np.exp(-z)/((1+np.exp(-z))**2)\n", + "\n", + " def costFunction(self, X, y):\n", + " #Compute cost for given X,y, use weights already stored in class.\n", + " self.yHat = self.forward(X)\n", + " J = 0.5*sum((y-self.yHat)**2)\n", + " return J\n", + "\n", + " def costFunctionPrime(self, X, y):\n", + " #Compute derivative with respect to W and W2 for a given X and y:\n", + " self.yHat = self.forward(X)\n", + "\n", + " delta3 = np.multiply(-(y-self.yHat), self.sigmoidPrime(self.z3))\n", + " dJdW2 = np.dot(self.a2.T, delta3)\n", + "\n", + " delta2 = np.dot(delta3, self.W2.T)*self.sigmoidPrime(self.z2)\n", + " dJdW1 = np.dot(X.T, delta2)\n", + "\n", + " return dJdW1, dJdW2\n", + "\n", + " #Helper Functions for interacting with other classes:\n", + " def getParams(self):\n", + " #Get W1 and W2 unrolled into vector:\n", + " params = np.concatenate((self.W1.ravel(), self.W2.ravel()))\n", + " return params\n", + "\n", + " def setParams(self, params):\n", + " #Set W1 and W2 using single paramater vector.\n", + " W1_start = 0\n", + " W1_end = self.hiddenLayerSize * self.inputLayerSize\n", + " self.W1 = np.reshape(params[W1_start:W1_end], (self.inputLayerSize , self.hiddenLayerSize))\n", + " W2_end = W1_end + self.hiddenLayerSize*self.outputLayerSize\n", + " self.W2 = np.reshape(params[W1_end:W2_end], (self.hiddenLayerSize, self.outputLayerSize))\n", + "\n", + " def computeGradients(self, X, y):\n", + " dJdW1, dJdW2 = self.costFunctionPrime(X, y)\n", + " return np.concatenate((dJdW1.ravel(), dJdW2.ravel()))\n", + "\n", + "def computeNumericalGradient(N, X, y):\n", + " paramsInitial = N.getParams()\n", + " numgrad = np.zeros(paramsInitial.shape)\n", + " perturb = np.zeros(paramsInitial.shape)\n", + " e = 1e-4\n", + "\n", + " for p in range(len(paramsInitial)):\n", + " #Set perturbation vector\n", + " perturb[p] = e\n", + " N.setParams(paramsInitial + perturb)\n", + " loss2 = N.costFunction(X, y)\n", + "\n", + " N.setParams(paramsInitial - perturb)\n", + " loss1 = N.costFunction(X, y)\n", + "\n", + " #Compute Numerical Gradient\n", + " numgrad[p] = (loss2 - loss1) / (2*e)\n", + "\n", + " #Return the value we changed to zero:\n", + " perturb[p] = 0\n", + "\n", + " #Return Params to original value:\n", + " N.setParams(paramsInitial)\n", + "\n", + " return numgrad\n", + "\n", + "## ----------------------- Part 6 ---------------------------- ##\n", + "from scipy import optimize\n", + "\n", + "\n", + "class trainer(object):\n", + " def __init__(self, N):\n", + " #Make Local reference to network:\n", + " self.N = N\n", + "\n", + " def callbackF(self, params):\n", + " self.N.setParams(params)\n", + " self.J.append(self.N.costFunction(self.X, self.y))\n", + "\n", + " def costFunctionWrapper(self, params, X, y):\n", + " self.N.setParams(params)\n", + " cost = self.N.costFunction(X, y)\n", + " grad = self.N.computeGradients(X,y)\n", + " return cost, grad\n", + "\n", + " def train(self, X, y):\n", + " #Make an internal variable for the callback function:\n", + " self.X = X\n", + " self.y = y\n", + "\n", + " #Make empty list to store costs:\n", + " self.J = []\n", + "\n", + " params0 = self.N.getParams()\n", + "\n", + " options = {'maxiter': 200, 'disp' : True}\n", + " _res = optimize.minimize(self.costFunctionWrapper, params0, jac=True, method='BFGS', \\\n", + " args=(X, y), options=options, callback=self.callbackF)\n", + "\n", + " self.N.setParams(_res.x)\n", + " self.optimizationResults = _res\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Input Data [[0.3 1. ]\n", + " [0.5 0.2]\n", + " [1. 0.4]]\n", + "Output Data [[0.75]\n", + " [0.82]\n", + " [0.93]]\n" + ] + } + ], + "source": [ + "print(\"Input Data\", X)\n", + "print(\"Output Data\", y)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Untrained Output [[0.40080444]\n", + " [0.43447789]\n", + " [0.42423465]]\n" + ] + } + ], + "source": [ + "#Untrained Random Network\n", + "NN = Neural_Network()\n", + "y1 = NN.forward(X)\n", + "print(\"Untrained Output\", y1)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 51\n", + " Function evaluations: 56\n", + " Gradient evaluations: 56\n" + ] + } + ], + "source": [ + "#Training step\n", + "T = trainer(NN)\n", + "T.train(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trained Output [[0.75003127]\n", + " [0.81998936]\n", + " [0.92991079]]\n" + ] + } + ], + "source": [ + "#Trained Network\n", + "y2 = NN.forward(X)\n", + "print(\"Trained Output\",y2)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ **DO THIS:** Calculate and compare the [mean squared error](https://en.wikipedia.org/wiki/Mean_squared_error) for untrained network (```y1```) and the trained network (```y2```). " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.17545447]\n", + "[3.01663395e-09]\n" + ] + } + ], + "source": [ + "#Put your code here\n", + "def MSE(y, yhat):\n", + " return (1/len(y1))*sum((y-yhat)**2)\n", + "\n", + "print(MSE(y, y1))\n", + "print(MSE(y, y2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "\n", + "# 2. Modify code to be more flexible\n", + "\n", + "The code for our Neural Network example above assumes an input layer size of 2, hidden layer size of 3 and an output layer size of 1. \n", + "\n", + "\n", + "✅ **DO THIS:** Modify the code in Section 1 above so that the user can specify these as inputs when creating the Neural_Network object. The default values should stay the same. Rerun the above example to make sure it still works. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Neural_Network(Neural_Network):\n", + " def __init__(self,insize, outsize, hiddensize):\n", + " #Define Hyperparameters\n", + " self.inputLayerSize = insize\n", + " self.outputLayerSize = outsize\n", + " self.hiddenLayerSize = hiddensize\n", + "\n", + " #Weights (parameters)\n", + " self.W1 = np.random.randn(self.inputLayerSize,self.hiddenLayerSize)\n", + " self.W2 = np.random.randn(self.hiddenLayerSize,self.outputLayerSize)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Untrained Output [[0.40867166]\n", + " [0.36286813]\n", + " [0.35807708]]\n" + ] + } + ], + "source": [ + "#Untrained Random Network\n", + "NN = Neural_Network(2,1,5)\n", + "y1 = NN.forward(X)\n", + "print(\"Untrained Output\", y1)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 51\n", + " Function evaluations: 53\n", + " Gradient evaluations: 53\n" + ] + } + ], + "source": [ + "T = trainer(NN)\n", + "T.train(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trained Output [[0.75000449]\n", + " [0.81997275]\n", + " [0.92997594]]\n" + ] + } + ], + "source": [ + "#Trained Network\n", + "y2 = NN.forward(X)\n", + "print(\"Trained Output\",y2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.21752347]\n", + "[4.47242084e-10]\n" + ] + } + ], + "source": [ + "print(MSE(y, y1))\n", + "print(MSE(y, y2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "# 3. Use our ANN on the \"Digits\" dataset.\n", + "\n", + "Here is the code copied from out previous Machine Learning Module which downloads the \"digits\" dataset and separates it into training and testing sets. " + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPgAAAEICAYAAAByNDmmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABSBJREFUeJzt3SGPnVsVgOG1b6pAdEiuIYgWzU3af9BaVBsMkpEEx3/A\n4CoIuhZDqgiuHTRiBk3CCMRNLgkDigTxIYrvFTP7TN95HnlyctbOSd7sky85Wes4jgGavjj1AYC7\nI3AIEziECRzCBA5hAocwgUOYwB+wtdbTtdYf1lr/XGt9vdb6zVrr0anPxe0R+MP225n5Zma+PzPP\nZ+bFzPzipCfiVgn8YfvhzPzuOI7/HMfx9cz8cWZ+dOIzcYsE/rC9mZmfrrW+s9b6wcz8eD5GToTA\nH7Y/zcxXM/Pvmfn7zPx5Zt6d9ETcKoE/UGutL+bjbf37mfnuzHw5M9+bmV+f8lzcruXfZA/TWuvL\n+fiA7ew4jn/9/7XXM/Or4zi+OunhuDVu8AfqOI5/zMzfZubna61Ha62zmfnZzPzltCfjNgn8YfvJ\nfHyw9s3M/HVm/jszvzzpibhVfqJDmBscwgQOYQKHMIFD2F39cyj55O7m5mbrvPPz822zLi8vt83a\n+T1++PBh26yZmefPn+8ctz71Bjc4hAkcwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOY\nwCFM4BAmcAgTOIQJHMIEDmEChzCBQ5jAIUzgECZwCBM4hAkcwu5qddE2O9fgvHz5ctusmZmrq6tt\ns168eLFt1sXFxbZZ79692zZrZvvqok9yg0OYwCFM4BAmcAgTOIQJHMIEDmEChzCBQ5jAIUzgECZw\nCBM4hAkcwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCHss19d9ObNm22zdq4Smpl5\n//79tlnX19fbZu1cXXTfVgnt5gaHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCFM4BAmcAgT\nOIQJHMIEDmEChzCBQ5jAIUzgECZwCBM4hAkcwgQOYQKHMIFDmMAh7LPfTbZz99Tjx4+3zZrZu3dt\n526yJ0+ebJv1+vXrbbPuIzc4hAkcwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCFM\n4BAmcAgTOIQJHMIEDmEChzCBQ5jAIUzgECZwCBM4hAkcwtZxHHfxuXfyoae2c73PzMz5+fm2WRcX\nF9tmPXv2bNusy8vLbbNOYH3qDW5wCBM4hAkcwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocw\ngUOYwCFM4BAmcAgTOIQJHMIEDmEChzCBQ5jAIUzgECZwCBM4hD069QE+J0+fPt067+bmZuu8Xa6u\nrrbNevv27bZZM3vXTX0bbnAIEziECRzCBA5hAocwgUOYwCFM4BAmcAgTOIQJHMIEDmEChzCBQ5jA\nIUzgECZwCBM4hAkcwgQOYQKHMIFDmMAhTOAQJnAIEziEWV10j+1c8VNVXf/0bbnBIUzgECZwCBM4\nhAkcwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCFM4BAmcAgTOIQJHMIEDmEChzCB\nQ5jAIUzgECZwCLOb7B579erVtlnX19fbZp2dnW2bdX5+vm3WfeQGhzCBQ5jAIUzgECZwCBM4hAkc\nwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCFM4BAmcAgTOIQJHMIEDmEChzCBQ9g6\njuPUZwDuiBscwgQOYQKHMIFDmMAhTOAQJnAIEziECRzCBA5hAocwgUOYwCFM4BAmcAgTOIQJHMIE\nDmEChzCBQ5jAIUzgECZwCPsfV3ODr+2GeukAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pylab as plt\n", + "import numpy as np\n", + "from sklearn.datasets import fetch_lfw_people, load_digits\n", + "from sklearn.cross_validation import train_test_split\n", + "\n", + "sk_data = load_digits();\n", + "\n", + "#Cool slider to browse all of the images.\n", + "from ipywidgets import interact\n", + "def browse_images(images, labels, categories):\n", + " n = len(images)\n", + " def view_image(i):\n", + " plt.imshow(images[i], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " plt.title('%s' % categories[labels[i]])\n", + " plt.axis('off')\n", + " plt.show()\n", + " interact(view_image, i=(0,n-1))\n", + "browse_images(sk_data.images, sk_data.target, sk_data.target_names)\n", + "\n", + "\n", + "feature_vectors = sk_data.data\n", + "class_labels = sk_data.target\n", + "categories = sk_data.target_names\n", + "\n", + "N, h, w = sk_data.images.shape\n", + "train_vectors, test_vectors, train_labels, test_labels = train_test_split(feature_vectors, class_labels, test_size=0.25, random_state=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following is copied and pasted from Section 1 and rewritten it to use the training and testing sets above. \n", + "\n", + "✅ **DO THIS:** Make changes to and finish the following code to work with the \"digits\" data. Some of the work has already been done for you. Please consider the following when making changes:\n", + "\n", + "* For this new input to work, you need to transform the training and testing data into a format that can work with the class that was developed. Use the example from above and the functions such as ```type``` and ```shape``` to figure out how to transform the data into inputs suitable for training the Neural Network. This will be the first step before you can run the example code below.\n", + "* Modify the number of Input, Output and Hidden layers to match the new problem. (I've supplied \"?\" for now, you should think about what these could/should be.)\n", + "* Make sure your inputs and outputs are normalized between zero (0) and one (1). " + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1347, 64)\n", + "(1347, 1)\n", + "[[0.22222222]\n", + " [0.66666667]\n", + " [0.66666667]\n", + " ...\n", + " [1. ]\n", + " [0.11111111]\n", + " [0.55555556]]\n" + ] + } + ], + "source": [ + "train_vectors = train_vectors/train_vectors.max()\n", + "\n", + "train_vectors = train_vectors\n", + "train_labels = train_labels.reshape(1347,1)\n", + "train_labels = train_labels/train_labels.max()\n", + "print(train_vectors.shape)\n", + "print(train_labels.shape)\n", + "print(train_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.14594026e-02],\n", + " [1.83245292e-03],\n", + " [2.81387785e-03],\n", + " ...,\n", + " [1.97903197e-02],\n", + " [2.87355695e-02],\n", + " [8.32694764e-06]])" + ] + }, + "execution_count": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Run the training. \n", + "# X = np.array(([3,5], [5,1], [10,2]), dtype=float) 2,1,3\n", + "# y = np.array(([75], [82], [93]), dtype=float)\n", + "\n", + "NN = Neural_Network(64,1,10) #len(train_vectors)\n", + "NN.forward(train_vectors)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mT\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtrainer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mNN\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mT\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrain_vectors\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_labels\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtrain\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0moptions\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;34m'maxiter'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;36m200\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'disp'\u001b[0m \u001b[1;33m:\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m--> 143\u001b[0;31m \u001b[0m_res\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0moptimize\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mminimize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcostFunctionWrapper\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mjac\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'BFGS'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcallbackF\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 144\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mN\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msetParams\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_res\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0;32mC:\\Users\\Maxwell\\AppData\\Roaming\\Python\\Python36\\site-packages\\scipy\\optimize\\_minimize.py\u001b[0m in \u001b[0;36mminimize\u001b[0;34m(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0m_minimize_cg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mjac\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'bfgs'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m--> 481\u001b[0;31m \u001b[1;32mreturn\u001b[0m \u001b[0m_minimize_bfgs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfun\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mjac\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 482\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mmeth\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'newton-cg'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 483\u001b[0m return _minimize_newtoncg(fun, x0, args, jac, hess, hessp, callback,\n", + "\u001b[0;32mC:\\Users\\Maxwell\\AppData\\Roaming\\Python\\Python36\\site-packages\\scipy\\optimize\\optimize.py\u001b[0m in \u001b[0;36m_minimize_bfgs\u001b[0;34m(fun, x0, args, jac, callback, gtol, norm, eps, maxiter, disp, return_all, **unknown_options)\u001b[0m\n\u001b[1;32m 1003\u001b[0m \u001b[0mA1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mI\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0msk\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewaxis\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0myk\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewaxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mrhok\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[0mA2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mI\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0myk\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewaxis\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0msk\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewaxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mrhok\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1005\u001b[0;31m Hk = numpy.dot(A1, numpy.dot(Hk, A2)) + (rhok * sk[:, numpy.newaxis] *\n\u001b[0m\u001b[1;32m 1006\u001b[0m sk[numpy.newaxis, :])\n\u001b[1;32m 1007\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "T = trainer(NN)\n", + "T.train(train_vectors, train_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "pred_labels = NN.forward(train_vectors)\n", + "\n", + "print(\"Training Data error\", np.sum(np.sqrt((train_labels - pred_labels)*(train_labels-pred_labels)))/len(train_vectors))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pred_labels = NN.forward(test_vectors)\n", + "\n", + "print(\"Testing Data error\", np.sum(np.sqrt((test_labels - pred_labels)*(test_labels-pred_labels)))/len(test_vectors))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "# Pay attention to how the plotting code rescales the data labels,\n", + "# if you scaled them differently, you may need to change this code.\n", + "def plot_gallery(images, true_titles, pred_titles, h, w, n_row=5, n_col=5):\n", + " \"\"\"Helper function to plot a gallery of portraits\"\"\"\n", + " plt.figure(figsize=(1.8 * n_col, 2.4 * n_row))\n", + " plt.subplots_adjust(bottom=0, left=.01, right=.99, top=.90, hspace=.35)\n", + " for i in range(n_row * n_col):\n", + " plt.subplot(n_row, n_col, i + 1)\n", + " plt.imshow(images[i].reshape((h, w)), cmap=plt.cm.gray_r)\n", + " plt.title(np.round(pred_titles[i]*10, 2)) \n", + " plt.xlabel('Actual='+str(true_titles[i]), size=9)\n", + " plt.xticks(())\n", + " plt.yticks(())\n", + "\n", + "plot_gallery(test_vectors, test_labels, pred_labels, h,w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ **DO THIS:** Modify the parameters of the neural network to get the best fit of the data. Consider also changing the training data you're providing to see how this changes your fit. Is it possible to change the number of input layers or output layers? If so, how you might you do it?\n", + "\n", + "Record your thoughts below along with your final best fit parameters/data. **Once you've come up with your best training data and neural network parameters, post your data/parameters the Slack channel for your section.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Picking large hidden layer values takes a long time to train. I found 25 works well, 10 is questionable, and 64 takes too long." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "# 4. Finding/Using Neural Networks Libraries\n", + "In this section we will repeat both examples from above (Grades and Digits) using a python neural network library. \n", + "\n", + "✅ Do This - As a group, find examples of neural network packages in python. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**✅ DO THIS** - Pick a package (or packages) you find interesting and get them working in this notebook. I suggest that each group member try to pick a different package and spend about 10 minutes trying to install and get it working. After about 10 minutes compare notes and pick the one the group will think is the easiest. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question :** What package did you pick? Please include any installation code needed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Put your installation code here\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ **DO THIS** - Create an example to demonstrate that the Neural Network is working. Preferably using an example that comes with the provided NN Package. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Put your example code here \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ **DO THIS** - Reproduce the results from the \"Grade\" example above using ```X``` and ```y```:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Put your Grade example code here\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ **DO THIS** - Reproduce the results from the \"Digits\" example above:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Put your Digits example code here\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question:** What settings worked the best for the 'Digits' data? How did you find these settings?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Do This - Erase the contents of this cell and replace it with your answer to the above question! (double-click on this text to edit this cell, and hit shift+enter to save the text)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question:** What part did you have the most trouble figuring out to get this assignment working?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Do This - Erase the contents of this cell and replace it with your answer to the above question! (double-click on this text to edit this cell, and hit shift+enter to save the text)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "# Assignment Wrap-up\n", + "\n", + "Fill out the following Google Form before submitting your assignment to D2L!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from IPython.display import HTML\n", + "HTML(\n", + "\"\"\"\n", + "\n", + "\"\"\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----\n", + "### Congratulations, we're done!\n", + "\n", + "Now, you just need to submit this assignment by uploading it to the course Desire2Learn web page for today's dropbox (Don't forget to add your names in the first cell).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "© Copyright 2017, Michigan State University Board of Trustees" + ] + } + ], + "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.6.0" + }, + "widgets": { + "state": { + "065d2168353641f29ca4ec30f7f110b9": { + "views": [ + { + "cell_index": 18 + } + ] + } + }, + "version": "1.2.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/doc/Programs/ANN/Ann3.ipynb b/doc/Programs/ANN/Ann3.ipynb new file mode 100644 index 000000000..4022f3fc5 --- /dev/null +++ b/doc/Programs/ANN/Ann3.ipynb @@ -0,0 +1,494 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##

Nicolas Dronchi

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day 23 Pre-Class assignment: Back propagation\n", + "This pre-class assignment finishes out the videos from \"Neural Networks Demystified\" module. Please watch the videos. Again, you do not have to understand the equations but the math is included for completeness.\n", + "\n", + "If you are lost, I highly recommend reviewing the entire \"Neural Networks Demystified\" module which can be downloaded from github:\n", + "\n", + " git clone https://github.com/stephencwelch/Neural-Networks-Demystified\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Goals for this pre-class assignment:\n", + "

\n", + "1. Reviewing gradient descent\n", + "1. Performing Back Propagation\n", + "1. Training at network\n", + "\n", + "## Assignment instructions\n", + "\n", + "**This assignment is due by 11:59 p.m. the day before class** and should be uploaded into the appropriate \"Pre-class assignments\" dropbox folder in the Desire2Learn website.\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gradient Decent\n", + "\n", + "✅ Do This - watch the following video:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\nsO2P6OF7ZEqJJJGV64iyWaOimeyeSFIJkYssC5mejInq5LOR0SKipqN/jmBUNbJTS1UbZZKR+2U7\nttkZtb85j860b0R/pRM3196QYUVLDh6wRriUUEe2LLPHOtNG+pgbTR4bTwor7bXG1/miq9qXc9rU\nuiPsrA8MhzaTzSqiqo6WrSaWRr43r/RjqKnialOmajtpmpn3W109L85C/lFk/BXVFJUPnkjfRK50\nO1LEnpPmpp3ZznsVytXzRjFZeyo9VtdGq3HyWyXiw6GKnp62faWSrK+J6UjmTNWijomwPTabxwNW\nJkyNjVlnJm3zPQJFYj+yRSsYx6MyTDcOr54K5NrqJaR7mQTRyqrWSROznt9B2a9Udr1mxqKVXzwS\npLmpBtl40a1UftrczS5dLbW4DydHkBRRNpWtnVPNGtZHaGhYlmSrOxUayBEhVXLmv2vN21iI1+ci\nIY8WxlhzG0iMnliWlp0p3OgSjhSq2psvmlRVMjgzZKiF8yytkRE9Jt1vdUWzCzGXr4cPftlNI6pd\nK6COWNVcyJFnWbNVXu2tqIxU2ttkaiJoUvYZicNSs20vSRKed1NI5qordujZG+RiKi62rKjVvazm\nuTgPG0WxxQxxtiWpke2OmrqWJXx0TpImYjLJPK+KZ0CuY5j5XZulUsqoqOut93kPk9FhcVTCyZJG\nT1s1Y30KeHMWoZDtkaRU0bI2MSVkiojW6nJdVW6kiIgiuPD0lwha21v6TfvQnbW/pN+9AyXFPHV7\nv5S9vGetWVv6TfvQ8ZjszW1GdnJ96GtuPRu7P/t+yh2hS1UPREUr25jtOc370LdWjFTfN+9Dz4w9\n4t9Wmll0qYVY/wDaXKx7Wrvk+9DCnqGu4U+9Dy1IiIbOnac9L1Ktjz+XsGfC72KbvbW21p96Gux5\nyPhcl01caGnEOjFsTEuTtkmgzZVcicKmZsRZbvw+obDK5dpe5E0/mqbrZTpEVHqltCqp8ombazk/\n0p09Ckaulxs42/vOjuOdfV3NgGJMmY17VRUciKip6zcoc1bBWX2araOpfpT8m5y8HFpOiaGrY9qK\njk0+tDlaunOnbjLpaWtXUrFoXcQb+Kf7E/xIzeU62RDS1j0dE+y3s1t7adcsduw3KLZEPPC5+af2\nj/1mQzG1o5rnnmyWU2FJOVk37ZLFaTmuZNdC26fSZWlIrlvIpi+1bmjpKq6m0hfe1i1nLDU0sJqK\n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\nAAAAAAAAAAAAAAB//9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('5u0jaA3qAGk',width=640,height=360)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question 1**: In simple terms, explain the \"Curse of Dimensionality\"?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to grid search/brute force solve for the best variables for all dimensions it would take N^D operations where D is the dimension. This can quickly reach amounts of time that aren't reasonably computable. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## 2. Back Propagation:\n", + "\n", + "Now watch the following video:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/jpeg": "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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "YouTubeVideo('GlcnxUlrtek',width=640,height=360)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question 2**: The gradient decent algorithm in Neural Networks is often called \"back propagation.\" What is being passed back though the algorithm and causing the weights to be updated? " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The weights of how much they contribute to the error. The goal is to find out where the most error came from and then change that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a link to the entire code so far:\n", + "\n", + "https://raw.githubusercontent.com/stephencwelch/Neural-Networks-Demystified/master/partSix.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ Do This - Download and inspect the partSix.py file and run the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.3 1. ]\n", + " [0.5 0.2]\n", + " [1. 0.4]]\n", + "[[0.75]\n", + " [0.82]\n", + " [0.93]]\n" + ] + } + ], + "source": [ + "from partSix import *\n", + "print(X)\n", + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ Do This - Create an instance of the Neural Network and apply forward function to estimate $\\hat{y}$:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.52155376],\n", + " [0.41215014],\n", + " [0.41576012]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# put your code here\n", + "NN = Neural_Network()\n", + "NN.forward(X)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question 3**: How good is this initial estimation?" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.24148593])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "NN.costFunction(X, y )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "pretty bad. The cost function gives an error of 0.241. It only guesses variables around 0.5." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## 3. Training:\n", + "\n", + "Please watch the following video:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI\nCAgIChANCAgOCQgIDRUNDhERExMTCA0WGBYSGBASExIBBQUFCAcIDwkJDxUPEBQVFRQSFRQVEhQV\nFBIVEhUUFBQUFRQWFBIUEhQUEhQUFRUUFBQUFBQUFBQUFBQUFBQUFP/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAEAAQUBAQEAAAAAAAAAAAAABQECAwQGBwgJ/8QAXBAAAgEDAgIDBg8LCgMHAwUAAQID\nAAQRBRITIQYUMRgiMkFRYSNSVFVxgZGTlKWx0tPU1QczQlNjcpKhssHRCBUWJDQ1YnN0s4K08CVD\nZKKjwuGDw/FEhIXi8v/EABsBAQEBAQEBAQEAAAAAAAAAAAABAgMEBgUH/8QAOxEAAgIAAgYJBAAF\nAQkAAAAAAAECEQMhBBIxQVFxBQYyYYGRobHBIkLR8BMUI1LhMwcVYnKCorLC8f/aAAwDAQACEQMR\nAD8A+MqUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQC\nlKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUp\nQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAK\nUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKV7H3MHTn1j+M9H+u07mDpz6x/Gej/AF2gPHKV\n7H3MHTn1j+M9H+u07mDpz6x/Gej/AF2gPHKV7H3MHTn1j+M9H+u07mDpz6x/Gej/AF2gPHKV7J3M\nHTn1j+M9H+u07mDpz6x/Gej/AF2gPG6V7J3MHTn1j+M9H+u07mDpz6x/Gej/AF2gPG6V7J3L/Tn1\nj+M9H+u07mDpz6x/Gej/AF2gPG6V7J3L/Tn1j+M9H+u07l/pz6x/Gej/AF2gPG6V7J3L/Tn1j+M9\nH+u07l/pz6x/Gej/AF2gPG6V7J3L/Tn1j+M9H+u07l/p16x/Gej/AF2gPG6V7J3L/Tr1j+M9H+u0\n7l/p16x/Gej/AF2gPG6V7J3L/Tr1j+M9H+u07l/p16x/Gej/AF2gPG6V7J3L/Tr1j+M9H+u07l/p\n16x/Gej/AF2gPG6V7J3L/Tr1j+M9H+u07l/p16x/Gej/AF2gPG6V7J3L3Tr1j+M9H+u07l/p16x/\nGej/AF2gPG6V7J3L/Tr1j+M9H+u1XuXunXrH8Z6P9doDxqley9y9069Y/jPR/rtO5e6desfxno/1\n2gPGqV7L3L3Tr1j+M9H+u07l7p16x/Gej/XaA8apXsvcvdOvWP4z0f67TuXunXrH8Z6P9doDxqle\ny9y9069Y/jPR/rtO5e6desfxno/12gPGqV7L3L3Tr1j+M9H+u07l7p16x/Gej/XaA8apXsvcvdOv\nWP4z0f67TuXunXrH8Z6P9doDxqley9y9069Y/jPR/rtO5e6desfxno/12gPGqV7L3L3Tr1j+M9H+\nu07l7p16x/Gej/XaA8apXsvcvdOvWP4z0f67TuXunXrH8Z6P9doDxqley9y9069Y/jPR/rtO5e6d\nesfxno/12gPGqV7L3L3Tr1j+M9H+u07l7p16x/Gej/XaA8apXsvcvdOvWP4z0f67TuXenXrH8Z6P\n9doDxqley9y7069Y/jPR/rtO5d6desfxno/12gPGqV7L3LvTr1j+M9H+u07l3p16x/Gej/XaA8ap\nXsvcu9OvWP4z0f67Rv5L3ToAk6HyHM/9p6P4v/3tAfpRSlYbmfZt71nLttVV25ztZySXYADah8dA\nZqVrdYf1PL+lB9LTrD+p5f0oPpalks2aVrdYf1PL+lB9LVrXpHIwuD5DJbg/7tLFm5StLr/5JvfL\nb6anX/yTe+W301LFm7StLr35JvfLb6Wq9f8AyTe+W301LFm7VK0+v/km98tvpadf/JN75bfS0sWb\ntK0uv/km98tvpqdf/JN75bfTUsWbtK0uv/km98tvpqdf/JN75bfTUsWbtK0uvfkm98tvpqdf/JN7\n5bfTUsWbtVrR6/8Akm98tvpqr1/8k3vlt9LSxZu0rS6/+Sb3y2+mqvX/AMk3vlt9LSxZuUrT6/8A\nkm98tvpadfP4pvfLb6WlizcpWn1/8k3vlt9NTr5/FN75bfTUsWbtK0uv/km98tvpadf/ACTe+W30\n1LFm9SsBuQImlYFVRXdhlWICAk+AxBOB5at6xJ6nl/St/paWLNmla3WJPU8v6Vv9LTrEnqeX9K3+\nlpYs2aVqPdsO2GQey9uPllq3r/5JvfLb6alizdqtaPX/AMk3vlt9NTr/AOSb3y2+mpYs3qVpdfP4\np/fLb6anX/yT++W301LFm7StLr/5J/fLb6anXz+Kf3y2+mpYs3aVpdfP4p/fLb6anXz+Kf3y2+mp\nYs3aVpdf/JP75bfTVXr/AOSf3y2+mpYs3KVp9f8AyT++W301Ov8A5J/fLb6alizcpWn18/in98tv\npqdf/JP75bfTUsWblK0+vfkn98tvpqde/JP75bfTUsWblK0+vfkn98tvpqde/JP75bfTUsWblVrS\n69+Sf3y2+mp178k/vlt9NSxZu1WtHr35J/fLb6aq9f8AyT++W301LFm7StIX5/FP75bfTU6/+Sf3\ny2+mpYs3asn8FvzW+Q1S3k3ru2le3kShPLzoxH66rP4Dfmt8hqlMVa1598t/85v+XnrZrWvPvlv/\nAJzf8vPUZGaGuXN8ksYtYVmjMMpfKpym4kKxDeZ1KrsadiAjZ4YGRnnsdZnK2JMXDaZ1F1GVMpgz\naTSsm+M7VxMkabzlTnHawNSFK3eWwpG391cJKyxQ8ZQluQMFMGS64czcZmCNtgLPsHP0Px7gK1ek\nkt2q4so0eV5kVmkOFii2AvJtPhtgYC+VhU5XPdJ4pneARXAt1F2jXB4ojMkAhO6FMqdzM2wcipHM\n5OMGWSrIqLUda2MHsIjJs3K0csaqXzGBHh5D24lJPLG5QM4yZa1u71o7ppLVI5I+ILVOKG4+0NsL\n4OEDEIcZ5byPFk6en2c501Ip9RdbjAMt7DJCxD792xHePYVxhM7BnmcAmrel1rduim0v0tpVtrpU\nSVgqzzNEBDK7g96sbAsSFbwuzlSyKL4v0Mq3upAheqrIN3OQmOIlSu8HhiZsH8A8zgru5hsK6/qI\nC5slY9r7ZIxyMjghAZebKgQ88bt5OV24Opq9jdNawK+qQwqstqTPwWBmO44jLi4G4NI0O3HaEO7f\nu5YIbG4RZy2sRzP1MBwXMSxhZpTx1ZZWMIb0VGkwSNnIjYAFjV7yetLm7aKZ5IAkiqeDEGVmdgmf\nC37dpc4GSvZk4zy0o7rU1Xv7dJZNkWeGyJCHJuGfaXk3kAC2Q5HIuzDcBgxi6bdMZTBraJG1zqBR\nQgcxSNM7GEF5+fBwUKHkBuICHGMo0+9JTOtRhhcWbkIg2vEiYktzG8x+/OVYMDnxc80Lq950emST\nMhM6COTfINq4xsDHYeTH8HHk9gVtVwuh2EyRAR66k79Xy0rM80Xod0HeVSbk4U7zExLEgFOeeZ2b\n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\nSgFKUoBSlKAUpSgFKUoD/9k=\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('9KM9Td6RVgQ',width=640,height=360)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ Do This - Now, create an instance of the ```trainer``` class from the partSix.py file. Call the objects ```train``` function by passing it the original ```X``` and ```y``` data:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 36\n", + " Function evaluations: 39\n", + " Gradient evaluations: 39\n" + ] + } + ], + "source": [ + "#Put your code here\n", + "T = trainer(NN)\n", + "T.train(X,y)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.74998259]\n", + " [0.82002105]\n", + " [0.93000224]]\n", + "[3.75622733e-10]\n", + "[[0.75]\n", + " [0.82]\n", + " [0.93]]\n" + ] + } + ], + "source": [ + "print(NN.forward(X))\n", + "print(NN.costFunction(X, y ))\n", + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "✅ Do This - If done correctly, the ```NN``` object should now be trained. Apply the forward function again to see the new estimation of $\\hat{y}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Question 4**: Hopefully this worked and the estimation is better than the previous one. How close are these values to the original grades? What shortcomings are there to testing using this approach?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are very close values. I think some short comings is when there are local minimums in the data as well as when you have a low amount of data. I think it takes a large amount of data to train to be something useful and not just spit back out the same answers you trained it on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "# Assignment wrap-up\n", + "\n", + "Please fill out the form that appears when you run the code below. **You must completely fill this out in order to receive credit for the assignment!**" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import HTML\n", + "HTML(\n", + "\"\"\"\n", + "\n", + "\"\"\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---------\n", + "### Congratulations, you're done with your pre-class assignment!\n", + "\n", + "Now, you just need to submit this assignment by uploading it to the course Desire2Learn web page for today's dropbox (Don't forget to add your name in the first cell)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "© Copyright 2017, Michigan State University Board of Trustees" + ] + } + ], + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/doc/Programs/ANN/perceptron.ipynb b/doc/Programs/ANN/perceptron.ipynb new file mode 100644 index 000000000..3852e4751 --- /dev/null +++ b/doc/Programs/ANN/perceptron.ipynb @@ -0,0 +1,16510 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Day 16 In-Class Assignment: Introduction to Machine Learning \n", + "\n", + "\n", + "\n", + "

Image from: https://goo.gl/ypY9G2

\n", + "\n", + "1. **Scientific motivation** \n", + " - Classifying data (iris types) \n", + "2. **Modeling tools** \n", + " - Machine Learning (Perceptron)\n", + "3. **Programming concepts** \n", + " - Creating Classes and re-usable code\n", + " - Pulling in data from outside sources \n", + " - Using external libraries \n", + " \n", + "\n", + "### Agenda for today's class\n", + "\n", + "

\n", + "\n", + "1. Review of pre-class assignment\n", + "1. Problem Statement\n", + "1. Basics of the perceptron model\n", + "1. Loading and inspecting the data\n", + "1. Building the perceptron model\n", + "1. Plotting the decision boundary\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "# 1. Review of pre-class assignment\n", + "\n", + "Were there any specific questions that came up in the pre-class assignment?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Problem Statement\n", + " \n", + "\n", + "We want to build a model that can accurately classifying two types of flowers based off of measurements we have collected. Building this model will allow us to understand how basic machine learning models learn and what exactly is happening 'under the hood'. It will provide a slightly more intuitive view of machine learning and make it seem as less of a black box and more of a tool that we understand. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. The Basics of the Perceptron Model\n", + "\n", + "The perceptron is a what is known as a basic binary classifier. It takes in a set of training data that is linerally separable and then computes a *set of weights* and a *bias term* to apply to input data as to properly classify it. Perceptrons only works for data that contains two classes and is linearly separable. For data that does not have these properties, the classifier cannot properly learn the weights and bias term.\n", + "\n", + "Since the perceptron is based on linearly separable data, we can think of the model as trying to learn the slope of a line, $y = m~x + b$. However in machine learning, we usually define $X$ to be an input *vector*, which is a $1$ by $N$ matrix, where $N$ is the number of measurements or \"features\" for a given sample. Then, we can create a similar matrix of weights, $W$, also of length N, and re-write our equation to be:\n", + "\n", + "$$ Y = W \\cdot X + B$$\n", + "\n", + "where $Y$ represents the resulting classification, consisting of either -1 or 1, depending on the output of $W \\cdot X$, the dot product of $W$ and $X$, and $B$ represents the bias term. More explicitly, we can look at this in a matrix format:\n", + "\n", + "$$ Y = \\begin{bmatrix} w_1 & w_2 & \\dots & w_n \\end{bmatrix} \\cdot \\begin{bmatrix} x_1 \\\\ x_2 \\\\ \\vdots \\\\ x_n \\end{bmatrix} + B $$\n", + "\n", + "But, **how do we go about learning the weights of the model?**\n", + "\n", + "We learn the model weights by attempting to predict the class of our input data using an initial guess for the weights, and then update our weight values based on our prediction. We can define a \"step size\" for how much we change our weight between subsequent guess in the following way:\n", + "\n", + "`step_size = eta * (target class - predicted class)` \n", + "\n", + "Then, using our \"step size\", we then update all of our weights by multiplying our *step size times the corresponding feature values*:\n", + "\n", + "$$w_{1,new} = w_{1,old} + (\\mathrm{step~size} \\times x_{1,i})$$\n", + "$$w_{2,new} = w_{2,old} + (\\mathrm{step~size} \\times x_{2,i})$$\n", + "$$ \\vdots $$\n", + "$$w_{N,new} = w_{N,old} + (\\mathrm{step~size} \\times x_{N,i})$$\n", + "\n", + "We also have to update our bias term, but just use the step size for this update: $B_{new} = B_{old} + \\mathrm{step~size}$).\n", + "\n", + "In this model, we use `eta` to represent our \"learning_rate\", which takes on a value between 0 and 1.\n", + "\n", + "The step size should always be a positive or negative decimal value depending on `eta`. For example, if we set the learning rate, `eta`, to be .1 and our target is -1 and we predict 1 then the we get the following equation.\n", + "\n", + "`step_size = .1 * (-1-1) = -.2`\n", + " \n", + "Alternativey, if our target is 1 and we predict it as -1 then we will get the following.\n", + "\n", + "`step_size = .1 * (1 - -1) = .2`\n", + "\n", + "This process occurs iteratively. So, for a set number of iterations we calculate a step size and adjust the weights accordingly.\n", + "\n", + "**But, how do we handle the \"learning\" process when we have multiple samples?**\n", + "\n", + "In this case, we need to update the weights based on _all_ of the sample features. So our original equation above becomes:\n", + "\n", + "$$w_{1,new} = w_{1,old} + \\sum_{i=0}^{M} (\\mathrm{step~size} \\times x_{1,i})$$\n", + "$$w_{2,new} = w_{2,old} + \\sum_{i=0}^{M} (\\mathrm{step~size} \\times x_{2,i})$$\n", + "$$ \\vdots $$\n", + "$$w_{N,new} = w_{N,old} + \\sum_{i=0}^{M} (\\mathrm{step~size} \\times x_{N,i})$$\n", + "\n", + "where $M$ is our total number of samples and we compute new weights for every features value." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Loading and inspecting the data\n", + "\n", + "Before we build a machine learning model, we need data to base it off of. The data set we are going to use has been provided for you in the directory for this assignment, `irsi.csv`. This dataset contains measurements for the properties of two different iris varieties.\n", + "\n", + "**Load the data into python and visualize (with a plot) to get a sense for what it looks like. Use different colors to represent the two different iris classifications.**" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nG2NMGfp/pHsXsMtSIDoAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100\n" + ] + } + ], + "source": [ + "# Do This: Load in the iris.csv file and plot the data based on the iris classifications\n", + "import csv\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "sepal_length = []\n", + "sepal_width = []\n", + "label = []\n", + "with open('iris.csv', 'r') as data:\n", + " datareader = csv.reader(data, delimiter=',', quotechar='|')\n", + " for i,row in enumerate(datareader):\n", + " if i == 0:\n", + " continue\n", + " sepal_length.append(float(row[0]))\n", + " sepal_width.append(float(row[1]))\n", + " label.append(row[2])\n", + "\n", + "colors = []\n", + "for i in label:\n", + " if i == 'Iris-setosa':\n", + " colors.append(-1)\n", + " elif i == 'Iris-versicolor':\n", + " colors.append(1)\n", + " else:\n", + " colors.append(2)\n", + "\n", + "dataset = np.vstack((np.asarray(sepal_length), np.asarray(sepal_width)))\n", + "dataset = dataset.T\n", + "\n", + "plt.scatter(sepal_length, sepal_width, c=colors)\n", + "plt.show()\n", + "print(len(colors))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Questions**: Is the data linearly separable? How many data points do we have? How many of each class?\n", + "\n", + "**Put your answers in the cell below**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Yes it is! There are exactly 100 data points." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Building the perceptron model\n", + "\n", + "Now that we have some data to work with, we want to start building a model, Part 3 outlines how to use the perceptron model to fit the data and properly update weights. Your job is to create a Python `perceptron` class that matches the following specifications:\n", + "\n", + "> \n", + "* Define the perceptron class with an `__init__` method\n", + " - The class should be initialized with the following attributes:\n", + " - user defined input value for `eta`, the learning rate for the perceptron.\n", + " - a number of interations to be used by the model, `n_iter`. This should also be an input parameter.\n", + " - an initial values for the bias (you can choose whether or not the user can set this values or if you want a standard default).\n", + "* Create two methods for the perceptron clas, a `fit` method that does the learning and a `predict` method that outputs the predicted class\n", + " - The `fit` method should:\n", + " - define an array of weights the same length as the input vector. You can choose how to initialize the weight values.\n", + " - go through a set number of iterations (based on `n_iter`) where it makes predictions and updates the weights vector accordingly for each subsequent round of predictions.\n", + " - The `predict` method should:\n", + " - take in a feature vector and return the predicted class based on the current weights\n", + " - *hint*: The prediction is just a dot product of the weights and the features plus the bias term. The resulting ouput should be in the range (-1,1), depending on the value of the dot product. If the prediction is less than 0 it should return -1, otherwise it should return 1." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "class perceptron():\n", + " def __init__(self, eta, n_iter, bias=0):\n", + " self.eta = eta\n", + " self.n_iter = n_iter\n", + " self.bias = bias\n", + " \n", + " def fit(self, data):\n", + " '''does the learning'''\n", + " self.weights = np.zeros(data.shape[1])\n", + " \n", + " for i in range(self.n_iter):\n", + " for j in range(len(self.weights)):\n", + " change = 0\n", + " for k in range(len(data)):\n", + " target = float(colors[k])\n", + " predicted = self.predict(data[k])\n", + " print(predicted)\n", + " ss = self.eta * (target - predicted)\n", + " change += ss*data[k][j]\n", + " self.bias += ss\n", + " self.weights[j] += change\n", + " \n", + " \n", + " def predict(self, values):\n", + " '''outputs the predicted class'''\n", + " prediction = np.dot(self.weights, values) + self.bias\n", + " if prediction >= 0:\n", + " return 1.0\n", + " else:\n", + " return -1.0\n" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "1.0\n", + "-1.0\n", + "1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "-1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n", + "1.0\n" + ] + }, + { + "data": { + "text/plain": [ + "array([ 57.44, -92.64])" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A = perceptron(0.1,100)\n", + "A.fit(dataset[0:80])\n", + "A.weights" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n", + "true\n" + ] + } + ], + "source": [ + "for i in range(20):\n", + " a = A.predict(dataset[i+80])\n", + " b = colors[i+80]\n", + " if int(a) == b:\n", + " print(\"true\")\n", + " else:\n", + " print(\"false\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testing the new perceptron class\n", + "\n", + "Now that we have a classifier built, we need to test it on data, but first we need to make sure our data is in the right format so we can properly train a classifier on it. This means, if you haven't already, that you need to make sure that you classes are either -1 or 1. You'll also need to make sure the features vectors can be fed into your perceptron class correctly.\n", + "\n", + "Also, remember, for a good model, we want the training data to have an even sample of both classes so it knows what to look for and doesn't end up biased towards a particular classifications.\n", + "\n", + "As a rule of thumb, you should use ~75% of your sample data as your training data and reserve the remaining ~25% as testing data.\n", + "\n", + "**Using your new perceptron class, train the model using your training and then test the results on your testing data.** You may want to come up with a method for computing how many predictions are right versus wrong." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# First, make sure you data is in the right format to be fed into your perceptron class and split your data into a training set and a testing set\n", + "\n", + "\n", + "# Then, train your model using your `fit` method.\n", + "\n", + "\n", + "# Finally, test your trained model on the testing data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Plotting the decision boundary \n", + "\n", + "Finally, to better understand our classifier, it might help to plot what is known as the \"decision boundary\". The decision boundary is the line that seperates the classes in the classifier. The line is defined by the weights and the bias term that we calculated for our model.\n", + "\n", + "The slope of the decision boundary is defined as:\n", + "\n", + "$$ m = -\\frac{w_1}{w_2} $$\n", + "\n", + "And the $y$-intercept, $b$, is defined as:\n", + "\n", + "$$ b = -\\frac{B}{w_2} $$\n", + "\n", + "You should be able to generate a set of evenly spaced $x$-axis values and then used the equation for a line ($y = mx + b$) to compute the decision boundary for making a plot of the line. You should get something that looks like this:\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Compute the decision boundary and make a plot of it, along with the data\n", + "m = -A.weights[0]/A.weights[1]\n", + "b = -A.bias/A.weights[1]\n", + "\n", + "def line(x,m,b):\n", + " return m*x + b\n", + "x = np.linspace(4,7,num=50)\n", + "plt.plot(x,line(x,m,b))\n", + "plt.scatter(sepal_length, sepal_width, c=colors)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "# Assignment Wrap-up\n", + "\n", + "Fill out the following Google Form before submitting your assignment to D2L!" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import HTML\n", + "HTML(\n", + "\"\"\"\n", + "\n", + "\"\"\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----\n", + "### Congratulations, we're done!\n", + "\n", + "Now, you just need to submit this assignment by uploading it to the course Desire2Learn web page for today's dropbox (Don't forget to add your names in the first cell).\n" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}