diff --git a/DGudilin_notebook.ipynb b/DGudilin_notebook.ipynb
new file mode 100644
index 0000000..2048ccc
--- /dev/null
+++ b/DGudilin_notebook.ipynb
@@ -0,0 +1,60408 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "626646d0",
+ "metadata": {},
+ "source": [
+ "# Курсовой проект для курса \"Python для Data Science\"\n",
+ "\n",
+ "## Info\n",
+ "\n",
+ "Задание:\n",
+ "Используя данные из train.csv, построить\n",
+ "модель для предсказания цен на недвижимость (квартиры).\n",
+ "С помощью полученной модели предсказать\n",
+ "цены для квартир из файла test.csv.\n",
+ "\n",
+ "Целевая переменная:\n",
+ "Price\n",
+ "\n",
+ "Метрика:\n",
+ "R2 - коэффициент детерминации (sklearn.metrics.r2_score)\n",
+ "\n",
+ "Сдача проекта:\n",
+ "1. Прислать в раздел Задания Урока 10 (\"Вебинар. Консультация по итоговому проекту\")\n",
+ "ссылку на программу в github (программа должна содержаться в файле Jupyter Notebook \n",
+ "с расширением ipynb). (Pull request не нужен, только ссылка ведущая на сам скрипт).\n",
+ "2. Приложить файл с названием по образцу SShirkin_predictions.csv\n",
+ "с предсказанными ценами для квартир из test.csv (файл должен содержать два поля: Id, Price).\n",
+ "В файле с предсказаниями должна быть 5001 строка (шапка + 5000 предсказаний)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 126,
+ "id": "497b5df9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "\n",
+ "from sklearn.cluster import KMeans\n",
+ "from sklearn.manifold import TSNE\n",
+ "\n",
+ "from sklearn.metrics import r2_score\n",
+ "from sklearn.metrics import mean_squared_error\n",
+ "\n",
+ "from sklearn.model_selection import StratifiedKFold\n",
+ "from sklearn.model_selection import train_test_split, cross_val_score\n",
+ "from sklearn.model_selection import KFold, GridSearchCV\n",
+ "\n",
+ "from sklearn.linear_model import LinearRegression\n",
+ "from sklearn.ensemble import RandomForestRegressor\n",
+ "from sklearn.ensemble import GradientBoostingRegressor\n",
+ "from sklearn.linear_model import LassoCV\n",
+ "from xgboost import XGBRegressor\n",
+ "from lightgbm import LGBMRegressor\n",
+ "\n",
+ "from scipy.stats import norm\n",
+ "from scipy import stats\n",
+ "\n",
+ "%matplotlib inline\n",
+ "%config InlineBackend.figure_format = 'svg'\n",
+ "plt.rcParams['font.size'] = '8'\n",
+ "\n",
+ "from datetime import datetime\n",
+ "import warnings"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f6228421",
+ "metadata": {},
+ "source": [
+ "дополнительные функции"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "f41d1f5c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# преобразование\n",
+ "def optimizing_df(df):\n",
+ " for col in df.columns:\n",
+ " if df[col].dtypes.kind == 'i' or df[col].dtypes.kind == 'u':\n",
+ " if df[col].min() >= 0:\n",
+ " df[col] = pd.to_numeric(df[col], downcast='unsigned')\n",
+ " else:\n",
+ " df[col] = pd.to_numeric(df[col], downcast='integer')\n",
+ "\n",
+ " elif df[col].dtypes.kind == 'f' or df[col].dtypes.kind == 'c':\n",
+ " df[col] = pd.to_numeric(df[col], downcast='float')\n",
+ "\n",
+ " elif df[col].dtypes.kind == 'O':\n",
+ " num_unique_values = len(df[col].unique())\n",
+ " num_total_values = len(df[col])\n",
+ " if num_unique_values / num_total_values < 0.5:\n",
+ " df[col] = df[col].astype('category')\n",
+ "\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "id": "92c4d645",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def model_test(model, name, test, valid):\n",
+ " model_pred = model.predict(test)\n",
+ " r2 = r2_score(valid, model_pred)\n",
+ " mse = mean_squared_error(valid, model_pred)\n",
+ " plt.scatter(valid, (model_pred - valid))\n",
+ " plt.xlabel(\"Predicted values\")\n",
+ " plt.ylabel(\"Real values\")\n",
+ " plt.title(name)\n",
+ " plt.legend([f'R2= {r2:.4f} and mse= {mse:.0e}'])\n",
+ " plt.axhline(0, color='red')\n",
+ " plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 129,
+ "id": "ef22d95a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def models_r2(models, test, valid):\n",
+ " scores = pd.DataFrame(columns=['name', 'r2', 'mse'])\n",
+ " for name, model in models.items():\n",
+ " test_pred = model.predict(test)\n",
+ " r2 = r2_score(valid, test_pred)\n",
+ " mse = mean_squared_error(valid, test_pred)\n",
+ " with warnings.catch_warnings():\n",
+ " warnings.filterwarnings(\"ignore\")\n",
+ " scores = scores.append(\n",
+ " {'name': name, 'r2': r2, 'mse': mse}, ignore_index=True)\n",
+ " \n",
+ " scores.sort_values('r2', ascending=False, inplace=True)\n",
+ " return scores"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2efb54f9",
+ "metadata": {},
+ "source": [
+ "загрузка данных"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "bee6ed0c",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train:\t10000\tстрок\t 20\t столбцов\n",
+ "Test:\t5000\tстрок\t 19\t столбцов\n"
+ ]
+ }
+ ],
+ "source": [
+ "train = pd.read_csv('data_set/train.csv');\n",
+ "test = pd.read_csv('data_set/test.csv');\n",
+ "\n",
+ "print(f\"Train:\\t{train.shape[0]}\\tстрок\\t {train.shape[1]}\\t столбцов\");\n",
+ "print(f\"Test:\\t{test.shape[0]}\\tстрок\\t {test.shape[1]}\\t столбцов\");"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "30985213",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Id | \n",
+ " DistrictId | \n",
+ " Rooms | \n",
+ " Square | \n",
+ " LifeSquare | \n",
+ " KitchenSquare | \n",
+ " Floor | \n",
+ " HouseFloor | \n",
+ " HouseYear | \n",
+ " Ecology_1 | \n",
+ " Ecology_2 | \n",
+ " Ecology_3 | \n",
+ " Social_1 | \n",
+ " Social_2 | \n",
+ " Social_3 | \n",
+ " Healthcare_1 | \n",
+ " Helthcare_2 | \n",
+ " Shops_1 | \n",
+ " Shops_2 | \n",
+ " Price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 9997 | \n",
+ " 5123 | \n",
+ " 27 | \n",
+ " 1.0 | \n",
+ " 47.939008 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " 12 | \n",
+ " 16.0 | \n",
+ " 2015 | \n",
+ " 0.072158 | \n",
+ " B | \n",
+ " B | \n",
+ " 2 | \n",
+ " 629 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " A | \n",
+ " 159143.805370 | \n",
+ "
\n",
+ " \n",
+ " | 9998 | \n",
+ " 5400 | \n",
+ " 75 | \n",
+ " 2.0 | \n",
+ " 43.602562 | \n",
+ " 33.840147 | \n",
+ " 8.0 | \n",
+ " 1 | \n",
+ " 5.0 | \n",
+ " 1961 | \n",
+ " 0.307467 | \n",
+ " B | \n",
+ " A | \n",
+ " 30 | \n",
+ " 5048 | \n",
+ " 9 | \n",
+ " 325.0 | \n",
+ " 2 | \n",
+ " 5 | \n",
+ " B | \n",
+ " 181595.339808 | \n",
+ "
\n",
+ " \n",
+ " | 9999 | \n",
+ " 6306 | \n",
+ " 128 | \n",
+ " 1.0 | \n",
+ " 38.666645 | \n",
+ " 21.157874 | \n",
+ " 8.0 | \n",
+ " 7 | \n",
+ " 17.0 | \n",
+ " 1990 | \n",
+ " 0.000000 | \n",
+ " B | \n",
+ " B | \n",
+ " 27 | \n",
+ " 4798 | \n",
+ " 0 | \n",
+ " 30.0 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " B | \n",
+ " 218714.077615 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n",
+ "9997 5123 27 1.0 47.939008 NaN 1.0 12 \n",
+ "9998 5400 75 2.0 43.602562 33.840147 8.0 1 \n",
+ "9999 6306 128 1.0 38.666645 21.157874 8.0 7 \n",
+ "\n",
+ " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n",
+ "9997 16.0 2015 0.072158 B B 2 \n",
+ "9998 5.0 1961 0.307467 B A 30 \n",
+ "9999 17.0 1990 0.000000 B B 27 \n",
+ "\n",
+ " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \\\n",
+ "9997 629 1 NaN 0 0 A \n",
+ "9998 5048 9 325.0 2 5 B \n",
+ "9999 4798 0 30.0 2 8 B \n",
+ "\n",
+ " Price \n",
+ "9997 159143.805370 \n",
+ "9998 181595.339808 \n",
+ "9999 218714.077615 "
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train.tail(n=3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "b8311efd",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Id | \n",
+ " DistrictId | \n",
+ " Rooms | \n",
+ " Square | \n",
+ " LifeSquare | \n",
+ " KitchenSquare | \n",
+ " Floor | \n",
+ " HouseFloor | \n",
+ " HouseYear | \n",
+ " Ecology_1 | \n",
+ " Ecology_2 | \n",
+ " Ecology_3 | \n",
+ " Social_1 | \n",
+ " Social_2 | \n",
+ " Social_3 | \n",
+ " Healthcare_1 | \n",
+ " Helthcare_2 | \n",
+ " Shops_1 | \n",
+ " Shops_2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 4997 | \n",
+ " 5783 | \n",
+ " 12 | \n",
+ " 3.0 | \n",
+ " 77.842178 | \n",
+ " 48.282625 | \n",
+ " 9.0 | \n",
+ " 23 | \n",
+ " 22.0 | \n",
+ " 1989 | \n",
+ " 0.090799 | \n",
+ " B | \n",
+ " B | \n",
+ " 74 | \n",
+ " 19083 | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 5 | \n",
+ " 15 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ " | 4998 | \n",
+ " 4780 | \n",
+ " 62 | \n",
+ " 2.0 | \n",
+ " 81.305222 | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ " 4 | \n",
+ " 0.0 | \n",
+ " 1977 | \n",
+ " 0.072158 | \n",
+ " B | \n",
+ " B | \n",
+ " 2 | \n",
+ " 629 | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " | 4999 | \n",
+ " 12504 | \n",
+ " 30 | \n",
+ " 2.0 | \n",
+ " 60.555693 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " 10 | \n",
+ " 17.0 | \n",
+ " 1977 | \n",
+ " 0.000078 | \n",
+ " B | \n",
+ " B | \n",
+ " 22 | \n",
+ " 6398 | \n",
+ " 141 | \n",
+ " 1046.0 | \n",
+ " 3 | \n",
+ " 23 | \n",
+ " B | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n",
+ "4997 5783 12 3.0 77.842178 48.282625 9.0 23 \n",
+ "4998 4780 62 2.0 81.305222 NaN 0.0 4 \n",
+ "4999 12504 30 2.0 60.555693 NaN 1.0 10 \n",
+ "\n",
+ " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n",
+ "4997 22.0 1989 0.090799 B B 74 \n",
+ "4998 0.0 1977 0.072158 B B 2 \n",
+ "4999 17.0 1977 0.000078 B B 22 \n",
+ "\n",
+ " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \n",
+ "4997 19083 2 NaN 5 15 B \n",
+ "4998 629 1 NaN 0 0 A \n",
+ "4999 6398 141 1046.0 3 23 B "
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.tail(n=3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "04eedfdc",
+ "metadata": {},
+ "source": [
+ "Приведение типов данных"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "4ea9db07",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 10000 entries, 0 to 9999\n",
+ "Data columns (total 20 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Id 10000 non-null int64 \n",
+ " 1 DistrictId 10000 non-null int64 \n",
+ " 2 Rooms 10000 non-null float64\n",
+ " 3 Square 10000 non-null float64\n",
+ " 4 LifeSquare 7887 non-null float64\n",
+ " 5 KitchenSquare 10000 non-null float64\n",
+ " 6 Floor 10000 non-null int64 \n",
+ " 7 HouseFloor 10000 non-null float64\n",
+ " 8 HouseYear 10000 non-null int64 \n",
+ " 9 Ecology_1 10000 non-null float64\n",
+ " 10 Ecology_2 10000 non-null object \n",
+ " 11 Ecology_3 10000 non-null object \n",
+ " 12 Social_1 10000 non-null int64 \n",
+ " 13 Social_2 10000 non-null int64 \n",
+ " 14 Social_3 10000 non-null int64 \n",
+ " 15 Healthcare_1 5202 non-null float64\n",
+ " 16 Helthcare_2 10000 non-null int64 \n",
+ " 17 Shops_1 10000 non-null int64 \n",
+ " 18 Shops_2 10000 non-null object \n",
+ " 19 Price 10000 non-null float64\n",
+ "dtypes: float64(8), int64(9), object(3)\n",
+ "memory usage: 3.0 MB\n"
+ ]
+ }
+ ],
+ "source": [
+ "train.info(memory_usage='deep')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "648a893d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 5000 entries, 0 to 4999\n",
+ "Data columns (total 19 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Id 5000 non-null int64 \n",
+ " 1 DistrictId 5000 non-null int64 \n",
+ " 2 Rooms 5000 non-null float64\n",
+ " 3 Square 5000 non-null float64\n",
+ " 4 LifeSquare 3959 non-null float64\n",
+ " 5 KitchenSquare 5000 non-null float64\n",
+ " 6 Floor 5000 non-null int64 \n",
+ " 7 HouseFloor 5000 non-null float64\n",
+ " 8 HouseYear 5000 non-null int64 \n",
+ " 9 Ecology_1 5000 non-null float64\n",
+ " 10 Ecology_2 5000 non-null object \n",
+ " 11 Ecology_3 5000 non-null object \n",
+ " 12 Social_1 5000 non-null int64 \n",
+ " 13 Social_2 5000 non-null int64 \n",
+ " 14 Social_3 5000 non-null int64 \n",
+ " 15 Healthcare_1 2623 non-null float64\n",
+ " 16 Helthcare_2 5000 non-null int64 \n",
+ " 17 Shops_1 5000 non-null int64 \n",
+ " 18 Shops_2 5000 non-null object \n",
+ "dtypes: float64(7), int64(9), object(3)\n",
+ "memory usage: 1.4 MB\n"
+ ]
+ }
+ ],
+ "source": [
+ "test.info(memory_usage='deep')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9ca3008f",
+ "metadata": {},
+ "source": [
+ "изменим некоторые типы данных"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "a7e1d2f7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train['Rooms'] = train['Rooms'].astype('int64')\n",
+ "test['Rooms'] = test['Rooms'].astype('int64')\n",
+ "\n",
+ "\n",
+ "train['HouseFloor'] = train['HouseFloor'].astype('int64')\n",
+ "test['HouseFloor'] = test['HouseFloor'].astype('int64')\n",
+ "\n",
+ "train = optimizing_df(train)\n",
+ "test = optimizing_df(test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "9f1f81d9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 10000 entries, 0 to 9999\n",
+ "Data columns (total 20 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Id 10000 non-null uint16 \n",
+ " 1 DistrictId 10000 non-null uint8 \n",
+ " 2 Rooms 10000 non-null uint8 \n",
+ " 3 Square 10000 non-null float32 \n",
+ " 4 LifeSquare 7887 non-null float32 \n",
+ " 5 KitchenSquare 10000 non-null float32 \n",
+ " 6 Floor 10000 non-null uint8 \n",
+ " 7 HouseFloor 10000 non-null uint8 \n",
+ " 8 HouseYear 10000 non-null uint32 \n",
+ " 9 Ecology_1 10000 non-null float32 \n",
+ " 10 Ecology_2 10000 non-null category\n",
+ " 11 Ecology_3 10000 non-null category\n",
+ " 12 Social_1 10000 non-null uint8 \n",
+ " 13 Social_2 10000 non-null uint16 \n",
+ " 14 Social_3 10000 non-null uint8 \n",
+ " 15 Healthcare_1 5202 non-null float32 \n",
+ " 16 Helthcare_2 10000 non-null uint8 \n",
+ " 17 Shops_1 10000 non-null uint8 \n",
+ " 18 Shops_2 10000 non-null category\n",
+ " 19 Price 10000 non-null float32 \n",
+ "dtypes: category(3), float32(6), uint16(2), uint32(1), uint8(8)\n",
+ "memory usage: 420.7 KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "train.info(memory_usage='deep')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "d4431418",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 5000 entries, 0 to 4999\n",
+ "Data columns (total 19 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Id 5000 non-null uint16 \n",
+ " 1 DistrictId 5000 non-null uint8 \n",
+ " 2 Rooms 5000 non-null uint8 \n",
+ " 3 Square 5000 non-null float32 \n",
+ " 4 LifeSquare 3959 non-null float32 \n",
+ " 5 KitchenSquare 5000 non-null float32 \n",
+ " 6 Floor 5000 non-null uint8 \n",
+ " 7 HouseFloor 5000 non-null uint8 \n",
+ " 8 HouseYear 5000 non-null uint16 \n",
+ " 9 Ecology_1 5000 non-null float32 \n",
+ " 10 Ecology_2 5000 non-null category\n",
+ " 11 Ecology_3 5000 non-null category\n",
+ " 12 Social_1 5000 non-null uint8 \n",
+ " 13 Social_2 5000 non-null uint16 \n",
+ " 14 Social_3 5000 non-null uint8 \n",
+ " 15 Healthcare_1 2623 non-null float32 \n",
+ " 16 Helthcare_2 5000 non-null uint8 \n",
+ " 17 Shops_1 5000 non-null uint8 \n",
+ " 18 Shops_2 5000 non-null category\n",
+ "dtypes: category(3), float32(5), uint16(3), uint8(8)\n",
+ "memory usage: 181.4 KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "test.info(memory_usage='deep')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ffe2f0bc",
+ "metadata": {},
+ "source": [
+ "DistrictId и Id нужно отнести к категориальным признакам."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "5fc60692",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 10000 entries, 0 to 9999\n",
+ "Data columns (total 20 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Id 10000 non-null object \n",
+ " 1 DistrictId 10000 non-null object \n",
+ " 2 Rooms 10000 non-null uint8 \n",
+ " 3 Square 10000 non-null float32 \n",
+ " 4 LifeSquare 7887 non-null float32 \n",
+ " 5 KitchenSquare 10000 non-null float32 \n",
+ " 6 Floor 10000 non-null uint8 \n",
+ " 7 HouseFloor 10000 non-null uint8 \n",
+ " 8 HouseYear 10000 non-null uint32 \n",
+ " 9 Ecology_1 10000 non-null float32 \n",
+ " 10 Ecology_2 10000 non-null category\n",
+ " 11 Ecology_3 10000 non-null category\n",
+ " 12 Social_1 10000 non-null uint8 \n",
+ " 13 Social_2 10000 non-null uint16 \n",
+ " 14 Social_3 10000 non-null uint8 \n",
+ " 15 Healthcare_1 5202 non-null float32 \n",
+ " 16 Helthcare_2 10000 non-null uint8 \n",
+ " 17 Shops_1 10000 non-null uint8 \n",
+ " 18 Shops_2 10000 non-null category\n",
+ " 19 Price 10000 non-null float32 \n",
+ "dtypes: category(3), float32(6), object(2), uint16(1), uint32(1), uint8(7)\n",
+ "memory usage: 547.4+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "train.DistrictId=train.DistrictId.astype('object')\n",
+ "train.Id=train.Id.astype('object')\n",
+ "train.info()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5991c5d7",
+ "metadata": {},
+ "source": [
+ "Посмотрим на распределение данных"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "bdd32427",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "digital_features=train.select_dtypes(exclude=['object'])\n",
+ "digital_features.hist(figsize=(12,10), bins=30)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "6141fa4e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " count | \n",
+ " mean | \n",
+ " std | \n",
+ " min | \n",
+ " 25% | \n",
+ " 50% | \n",
+ " 75% | \n",
+ " max | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Rooms | \n",
+ " 10000.0 | \n",
+ " 1.890500 | \n",
+ " 0.839512 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 1.900000e+01 | \n",
+ "
\n",
+ " \n",
+ " | Square | \n",
+ " 10000.0 | \n",
+ " 56.315712 | \n",
+ " 21.058718 | \n",
+ " 1.136859 | \n",
+ " 41.774879 | \n",
+ " 52.513309 | \n",
+ " 65.900627 | \n",
+ " 6.410652e+02 | \n",
+ "
\n",
+ " \n",
+ " | LifeSquare | \n",
+ " 7887.0 | \n",
+ " 37.199596 | \n",
+ " 86.241112 | \n",
+ " 0.370619 | \n",
+ " 22.769833 | \n",
+ " 32.781261 | \n",
+ " 45.128803 | \n",
+ " 7.480592e+03 | \n",
+ "
\n",
+ " \n",
+ " | KitchenSquare | \n",
+ " 10000.0 | \n",
+ " 6.273300 | \n",
+ " 28.561113 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 6.000000 | \n",
+ " 9.000000 | \n",
+ " 2.014000e+03 | \n",
+ "
\n",
+ " \n",
+ " | Floor | \n",
+ " 10000.0 | \n",
+ " 8.526700 | \n",
+ " 5.241148 | \n",
+ " 1.000000 | \n",
+ " 4.000000 | \n",
+ " 7.000000 | \n",
+ " 12.000000 | \n",
+ " 4.200000e+01 | \n",
+ "
\n",
+ " \n",
+ " | HouseFloor | \n",
+ " 10000.0 | \n",
+ " 12.609400 | \n",
+ " 6.775974 | \n",
+ " 0.000000 | \n",
+ " 9.000000 | \n",
+ " 13.000000 | \n",
+ " 17.000000 | \n",
+ " 1.170000e+02 | \n",
+ "
\n",
+ " \n",
+ " | HouseYear | \n",
+ " 10000.0 | \n",
+ " 3990.166300 | \n",
+ " 200500.261427 | \n",
+ " 1910.000000 | \n",
+ " 1974.000000 | \n",
+ " 1977.000000 | \n",
+ " 2001.000000 | \n",
+ " 2.005201e+07 | \n",
+ "
\n",
+ " \n",
+ " | Ecology_1 | \n",
+ " 10000.0 | \n",
+ " 0.118858 | \n",
+ " 0.119026 | \n",
+ " 0.000000 | \n",
+ " 0.017647 | \n",
+ " 0.075424 | \n",
+ " 0.195781 | \n",
+ " 5.218670e-01 | \n",
+ "
\n",
+ " \n",
+ " | Social_1 | \n",
+ " 10000.0 | \n",
+ " 24.687000 | \n",
+ " 17.532614 | \n",
+ " 0.000000 | \n",
+ " 6.000000 | \n",
+ " 25.000000 | \n",
+ " 36.000000 | \n",
+ " 7.400000e+01 | \n",
+ "
\n",
+ " \n",
+ " | Social_2 | \n",
+ " 10000.0 | \n",
+ " 5352.157400 | \n",
+ " 4006.799803 | \n",
+ " 168.000000 | \n",
+ " 1564.000000 | \n",
+ " 5285.000000 | \n",
+ " 7227.000000 | \n",
+ " 1.908300e+04 | \n",
+ "
\n",
+ " \n",
+ " | Social_3 | \n",
+ " 10000.0 | \n",
+ " 8.039200 | \n",
+ " 23.831875 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 2.000000 | \n",
+ " 5.000000 | \n",
+ " 1.410000e+02 | \n",
+ "
\n",
+ " \n",
+ " | Healthcare_1 | \n",
+ " 5202.0 | \n",
+ " 1142.904419 | \n",
+ " 1021.518982 | \n",
+ " 0.000000 | \n",
+ " 350.000000 | \n",
+ " 900.000000 | \n",
+ " 1548.000000 | \n",
+ " 4.849000e+03 | \n",
+ "
\n",
+ " \n",
+ " | Helthcare_2 | \n",
+ " 10000.0 | \n",
+ " 1.319500 | \n",
+ " 1.493601 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 6.000000e+00 | \n",
+ "
\n",
+ " \n",
+ " | Shops_1 | \n",
+ " 10000.0 | \n",
+ " 4.231300 | \n",
+ " 4.806341 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 6.000000 | \n",
+ " 2.300000e+01 | \n",
+ "
\n",
+ " \n",
+ " | Price | \n",
+ " 10000.0 | \n",
+ " 214139.218750 | \n",
+ " 92872.304688 | \n",
+ " 59174.777344 | \n",
+ " 153872.628906 | \n",
+ " 192269.648438 | \n",
+ " 249135.460938 | \n",
+ " 6.332334e+05 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " count mean std min \\\n",
+ "Rooms 10000.0 1.890500 0.839512 0.000000 \n",
+ "Square 10000.0 56.315712 21.058718 1.136859 \n",
+ "LifeSquare 7887.0 37.199596 86.241112 0.370619 \n",
+ "KitchenSquare 10000.0 6.273300 28.561113 0.000000 \n",
+ "Floor 10000.0 8.526700 5.241148 1.000000 \n",
+ "HouseFloor 10000.0 12.609400 6.775974 0.000000 \n",
+ "HouseYear 10000.0 3990.166300 200500.261427 1910.000000 \n",
+ "Ecology_1 10000.0 0.118858 0.119026 0.000000 \n",
+ "Social_1 10000.0 24.687000 17.532614 0.000000 \n",
+ "Social_2 10000.0 5352.157400 4006.799803 168.000000 \n",
+ "Social_3 10000.0 8.039200 23.831875 0.000000 \n",
+ "Healthcare_1 5202.0 1142.904419 1021.518982 0.000000 \n",
+ "Helthcare_2 10000.0 1.319500 1.493601 0.000000 \n",
+ "Shops_1 10000.0 4.231300 4.806341 0.000000 \n",
+ "Price 10000.0 214139.218750 92872.304688 59174.777344 \n",
+ "\n",
+ " 25% 50% 75% max \n",
+ "Rooms 1.000000 2.000000 2.000000 1.900000e+01 \n",
+ "Square 41.774879 52.513309 65.900627 6.410652e+02 \n",
+ "LifeSquare 22.769833 32.781261 45.128803 7.480592e+03 \n",
+ "KitchenSquare 1.000000 6.000000 9.000000 2.014000e+03 \n",
+ "Floor 4.000000 7.000000 12.000000 4.200000e+01 \n",
+ "HouseFloor 9.000000 13.000000 17.000000 1.170000e+02 \n",
+ "HouseYear 1974.000000 1977.000000 2001.000000 2.005201e+07 \n",
+ "Ecology_1 0.017647 0.075424 0.195781 5.218670e-01 \n",
+ "Social_1 6.000000 25.000000 36.000000 7.400000e+01 \n",
+ "Social_2 1564.000000 5285.000000 7227.000000 1.908300e+04 \n",
+ "Social_3 0.000000 2.000000 5.000000 1.410000e+02 \n",
+ "Healthcare_1 350.000000 900.000000 1548.000000 4.849000e+03 \n",
+ "Helthcare_2 0.000000 1.000000 2.000000 6.000000e+00 \n",
+ "Shops_1 1.000000 3.000000 6.000000 2.300000e+01 \n",
+ "Price 153872.628906 192269.648438 249135.460938 6.332334e+05 "
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train.describe().transpose()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a856dcd3",
+ "metadata": {},
+ "source": [
+ "### Square, LifeSquare, KitchenSquare"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "3f3a684b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2113\n",
+ "1041\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(train['LifeSquare'].isnull().sum())\n",
+ "print(test['LifeSquare'].isnull().sum())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b0f1aba2",
+ "metadata": {},
+ "source": [
+ "LifeSquare имеет значение NULL в тестовых и в тренировочных данных."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "1d0d7ae7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train.loc[train['LifeSquare'].isnull(), 'LifeSquare'] = 0\n",
+ "test.loc[test['LifeSquare'].isnull(), 'LifeSquare'] = 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "caab9a71",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " count | \n",
+ " mean | \n",
+ " std | \n",
+ " min | \n",
+ " 25% | \n",
+ " 50% | \n",
+ " 75% | \n",
+ " max | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Id | \n",
+ " 5000.0 | \n",
+ " 8412.595400 | \n",
+ " 4832.674037 | \n",
+ " 1.000000 | \n",
+ " 4221.750000 | \n",
+ " 8320.500000 | \n",
+ " 12598.250000 | \n",
+ " 16795.000000 | \n",
+ "
\n",
+ " \n",
+ " | DistrictId | \n",
+ " 5000.0 | \n",
+ " 51.279200 | \n",
+ " 44.179466 | \n",
+ " 0.000000 | \n",
+ " 21.000000 | \n",
+ " 37.000000 | \n",
+ " 77.000000 | \n",
+ " 212.000000 | \n",
+ "
\n",
+ " \n",
+ " | Rooms | \n",
+ " 5000.0 | \n",
+ " 1.910000 | \n",
+ " 0.838594 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 17.000000 | \n",
+ "
\n",
+ " \n",
+ " | Square | \n",
+ " 5000.0 | \n",
+ " 56.449501 | \n",
+ " 19.092793 | \n",
+ " 1.378543 | \n",
+ " 41.906230 | \n",
+ " 52.921339 | \n",
+ " 66.285130 | \n",
+ " 223.453690 | \n",
+ "
\n",
+ " \n",
+ " | LifeSquare | \n",
+ " 5000.0 | \n",
+ " 28.630507 | \n",
+ " 21.613903 | \n",
+ " 0.000000 | \n",
+ " 17.873732 | \n",
+ " 29.118838 | \n",
+ " 41.769526 | \n",
+ " 303.071106 | \n",
+ "
\n",
+ " \n",
+ " | KitchenSquare | \n",
+ " 5000.0 | \n",
+ " 5.976800 | \n",
+ " 9.950147 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 6.000000 | \n",
+ " 9.000000 | \n",
+ " 620.000000 | \n",
+ "
\n",
+ " \n",
+ " | Floor | \n",
+ " 5000.0 | \n",
+ " 8.632000 | \n",
+ " 5.483228 | \n",
+ " 1.000000 | \n",
+ " 4.000000 | \n",
+ " 7.000000 | \n",
+ " 12.000000 | \n",
+ " 78.000000 | \n",
+ "
\n",
+ " \n",
+ " | HouseFloor | \n",
+ " 5000.0 | \n",
+ " 12.601000 | \n",
+ " 6.789213 | \n",
+ " 0.000000 | \n",
+ " 9.000000 | \n",
+ " 12.000000 | \n",
+ " 17.000000 | \n",
+ " 99.000000 | \n",
+ "
\n",
+ " \n",
+ " | HouseYear | \n",
+ " 5000.0 | \n",
+ " 1984.392600 | \n",
+ " 18.573149 | \n",
+ " 1908.000000 | \n",
+ " 1973.000000 | \n",
+ " 1977.000000 | \n",
+ " 2000.000000 | \n",
+ " 2020.000000 | \n",
+ "
\n",
+ " \n",
+ " | Ecology_1 | \n",
+ " 5000.0 | \n",
+ " 0.119874 | \n",
+ " 0.120070 | \n",
+ " 0.000000 | \n",
+ " 0.019509 | \n",
+ " 0.072158 | \n",
+ " 0.195781 | \n",
+ " 0.521867 | \n",
+ "
\n",
+ " \n",
+ " | Social_1 | \n",
+ " 5000.0 | \n",
+ " 24.933800 | \n",
+ " 17.532202 | \n",
+ " 0.000000 | \n",
+ " 6.000000 | \n",
+ " 25.000000 | \n",
+ " 36.000000 | \n",
+ " 74.000000 | \n",
+ "
\n",
+ " \n",
+ " | Social_2 | \n",
+ " 5000.0 | \n",
+ " 5406.900000 | \n",
+ " 4026.614773 | \n",
+ " 168.000000 | \n",
+ " 1564.000000 | \n",
+ " 5285.000000 | \n",
+ " 7287.000000 | \n",
+ " 19083.000000 | \n",
+ "
\n",
+ " \n",
+ " | Social_3 | \n",
+ " 5000.0 | \n",
+ " 8.262600 | \n",
+ " 23.863762 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 2.000000 | \n",
+ " 5.000000 | \n",
+ " 141.000000 | \n",
+ "
\n",
+ " \n",
+ " | Healthcare_1 | \n",
+ " 2623.0 | \n",
+ " 1146.657227 | \n",
+ " 1044.744995 | \n",
+ " 0.000000 | \n",
+ " 325.000000 | \n",
+ " 900.000000 | \n",
+ " 1548.000000 | \n",
+ " 4849.000000 | \n",
+ "
\n",
+ " \n",
+ " | Helthcare_2 | \n",
+ " 5000.0 | \n",
+ " 1.319400 | \n",
+ " 1.479940 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 2.000000 | \n",
+ " 6.000000 | \n",
+ "
\n",
+ " \n",
+ " | Shops_1 | \n",
+ " 5000.0 | \n",
+ " 4.242800 | \n",
+ " 4.777365 | \n",
+ " 0.000000 | \n",
+ " 1.000000 | \n",
+ " 3.000000 | \n",
+ " 6.000000 | \n",
+ " 23.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " count mean std min 25% \\\n",
+ "Id 5000.0 8412.595400 4832.674037 1.000000 4221.750000 \n",
+ "DistrictId 5000.0 51.279200 44.179466 0.000000 21.000000 \n",
+ "Rooms 5000.0 1.910000 0.838594 0.000000 1.000000 \n",
+ "Square 5000.0 56.449501 19.092793 1.378543 41.906230 \n",
+ "LifeSquare 5000.0 28.630507 21.613903 0.000000 17.873732 \n",
+ "KitchenSquare 5000.0 5.976800 9.950147 0.000000 1.000000 \n",
+ "Floor 5000.0 8.632000 5.483228 1.000000 4.000000 \n",
+ "HouseFloor 5000.0 12.601000 6.789213 0.000000 9.000000 \n",
+ "HouseYear 5000.0 1984.392600 18.573149 1908.000000 1973.000000 \n",
+ "Ecology_1 5000.0 0.119874 0.120070 0.000000 0.019509 \n",
+ "Social_1 5000.0 24.933800 17.532202 0.000000 6.000000 \n",
+ "Social_2 5000.0 5406.900000 4026.614773 168.000000 1564.000000 \n",
+ "Social_3 5000.0 8.262600 23.863762 0.000000 0.000000 \n",
+ "Healthcare_1 2623.0 1146.657227 1044.744995 0.000000 325.000000 \n",
+ "Helthcare_2 5000.0 1.319400 1.479940 0.000000 0.000000 \n",
+ "Shops_1 5000.0 4.242800 4.777365 0.000000 1.000000 \n",
+ "\n",
+ " 50% 75% max \n",
+ "Id 8320.500000 12598.250000 16795.000000 \n",
+ "DistrictId 37.000000 77.000000 212.000000 \n",
+ "Rooms 2.000000 2.000000 17.000000 \n",
+ "Square 52.921339 66.285130 223.453690 \n",
+ "LifeSquare 29.118838 41.769526 303.071106 \n",
+ "KitchenSquare 6.000000 9.000000 620.000000 \n",
+ "Floor 7.000000 12.000000 78.000000 \n",
+ "HouseFloor 12.000000 17.000000 99.000000 \n",
+ "HouseYear 1977.000000 2000.000000 2020.000000 \n",
+ "Ecology_1 0.072158 0.195781 0.521867 \n",
+ "Social_1 25.000000 36.000000 74.000000 \n",
+ "Social_2 5285.000000 7287.000000 19083.000000 \n",
+ "Social_3 2.000000 5.000000 141.000000 \n",
+ "Healthcare_1 900.000000 1548.000000 4849.000000 \n",
+ "Helthcare_2 1.000000 2.000000 6.000000 \n",
+ "Shops_1 3.000000 6.000000 23.000000 "
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.describe().transpose()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "980ca1c5",
+ "metadata": {},
+ "source": [
+ "В тестовых данных показатель 'Square' максимально равно 223,5. Необходимо понять, сколько объектов с большей площадью в тренировочных данных.\n",
+ "\n",
+ "В тестовых данных показатель 'LifeSquare' максимально равно 303,5. Необходимо понять, сколько объектов с большей площадью в тренировочных данных.\n",
+ "\n",
+ "В тестовых данных показатель 'KitchenSquare' максимально равно 620. Скорее всего это ошибочное значение, но оно есть в\n",
+ "тестовых данных. Необходимо понять, сколько объектов с большей площадью в тренировочных данных."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "295cd4ef",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Всего 10 Элементов, удалим их из выборки\n"
+ ]
+ }
+ ],
+ "source": [
+ "sq = train.loc[train['Square'] > 223.5, 'Square']\n",
+ "lsq = train.loc[train['LifeSquare'] > 303.5, 'LifeSquare']\n",
+ "ksq = train.loc[train['KitchenSquare'] > 620, 'KitchenSquare']\n",
+ "\n",
+ "all_data = pd.concat((sq, lsq, ksq), sort=False).reset_index(drop=True)\n",
+ "#len(all_data.unique())\n",
+ "\n",
+ "print(f'Всего {len(all_data.unique())} Элементов, удалим их из выборки')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "a6976c0c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "9992"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train = train.loc[train['Square'] < 223.5]\n",
+ "train = train.loc[train['LifeSquare'] < 303.5]\n",
+ "train = train.loc[train['KitchenSquare'] < 620]\n",
+ "train.index.size"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0edafb5a",
+ "metadata": {},
+ "source": [
+ "### HouseYear"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "ed9833f5",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "--- HouseYear ---\n",
+ "1497 20052011\n",
+ "4189 4968\n",
+ "Name: HouseYear, dtype: uint32\n"
+ ]
+ }
+ ],
+ "source": [
+ "print('--- HouseYear ---')\n",
+ "print(train.loc[train['HouseYear'] > datetime.now().year, 'HouseYear'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "a50a5c5c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# всего 2 выброса - справимся в ручную - заменим\n",
+ "train.loc[train['HouseYear'] == 20052011, 'HouseYear'] = 2005\n",
+ "train.loc[train['HouseYear'] == 4968, 'HouseYear'] = 1968"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7b976628",
+ "metadata": {},
+ "source": [
+ "### Rooms"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "ebea7f62",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2 3878\n",
+ "1 3702\n",
+ "3 2233\n",
+ "4 150\n",
+ "5 17\n",
+ "0 8\n",
+ "10 2\n",
+ "19 1\n",
+ "6 1\n",
+ "Name: Rooms, dtype: int64"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train['Rooms'].value_counts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "179af69a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.0"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# в выбросы подставим медиану\n",
+ "train.loc[train['Rooms'].isin([0, 6, 10, 19]), 'Rooms'] = train['Rooms'].median()\n",
+ "train['Rooms'].median()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b904a246",
+ "metadata": {},
+ "source": [
+ "### Foor, HouseFloor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "5e22fa8d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1822\n"
+ ]
+ }
+ ],
+ "source": [
+ "# этаж выше общего количества этажей. странные данные.... но пока оставим\n",
+ "print(train.loc[train['Floor'] > train['HouseFloor']].index.size)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "305c41fe",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "884\n"
+ ]
+ }
+ ],
+ "source": [
+ "# такие данные есть и в тестовых\n",
+ "print(test.loc[test['Floor'] > test['HouseFloor']].index.size)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ea0eaca5",
+ "metadata": {},
+ "source": [
+ "### Healthcare_1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "150f2b54",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "HC_Null = train.loc[train['Healthcare_1'].isnull(), ['DistrictId']].astype('int64')\n",
+ "HC_Fill = train.loc[train['Healthcare_1'].notnull(), ['DistrictId']].astype('int64')\n",
+ "\n",
+ "plt.hist(HC_Null['DistrictId'].to_numpy(), bins=30, density=True, alpha=0.5, label='NULL', color='grey')\n",
+ "plt.hist(HC_Fill['DistrictId'].to_numpy(), bins=30, density=True, alpha=0.5, label='Not NULL', color='green')\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8cc1f821",
+ "metadata": {},
+ "source": [
+ "Видно, что основная часть незаполненных (серых) значений находятся в кварталах с начальными номерами от 0 до 100\n",
+ "то и NULL вполне может быть правильным значением, заменим его на \"0\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "b2503ed8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train.loc[train['Healthcare_1'].isnull(), 'Healthcare_1'] = 0\n",
+ "test.loc[test['Healthcare_1'].isnull(), 'Healthcare_1'] = 0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0aa308b6",
+ "metadata": {},
+ "source": [
+ "что мы имеем по незаполненыь данным"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "1fc628e9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Id 0\n",
+ "DistrictId 0\n",
+ "Rooms 0\n",
+ "Square 0\n",
+ "LifeSquare 0\n",
+ "KitchenSquare 0\n",
+ "Floor 0\n",
+ "HouseFloor 0\n",
+ "HouseYear 0\n",
+ "Ecology_1 0\n",
+ "Ecology_2 0\n",
+ "Ecology_3 0\n",
+ "Social_1 0\n",
+ "Social_2 0\n",
+ "Social_3 0\n",
+ "Healthcare_1 0\n",
+ "Helthcare_2 0\n",
+ "Shops_1 0\n",
+ "Shops_2 0\n",
+ "Price 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "d63832bc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Id 0\n",
+ "DistrictId 0\n",
+ "Rooms 0\n",
+ "Square 0\n",
+ "LifeSquare 0\n",
+ "KitchenSquare 0\n",
+ "Floor 0\n",
+ "HouseFloor 0\n",
+ "HouseYear 0\n",
+ "Ecology_1 0\n",
+ "Ecology_2 0\n",
+ "Ecology_3 0\n",
+ "Social_1 0\n",
+ "Social_2 0\n",
+ "Social_3 0\n",
+ "Healthcare_1 0\n",
+ "Helthcare_2 0\n",
+ "Shops_1 0\n",
+ "Shops_2 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "test.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f8288396",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "919eae2c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "corrmat = train.corr()\n",
+ "plt.subplots(figsize=(12, 10))\n",
+ "sns.heatmap(corrmat, cmap='coolwarm', annot = True, linewidths=0.3, square=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "39797bdc",
+ "metadata": {},
+ "source": [
+ "###### Коэффициенты коррекляции в с показателем 'Price' больше всего у параметров 'Rooms' и 'Square'. Но, если выводить эти таблицы для каждого из кварталов, то картина будет немного иной и будет не совсем верно игнорировать тот факт, что цена хорошо корреклирует с общей площадью в рамках каждого квартала.\n",
+ "Поэтому добовляем столбец 'PriceForMetr'. Рассчитываться это значение будет для каждого кваратала \"DistrictID\". И будет добавлено в тестовый набор."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "665ffa87",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "8"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gp1 = train.groupby(['DistrictId'])['Square'].sum()\n",
+ "gp2 = train.groupby(['DistrictId'])['Price'].sum()\n",
+ "gp3 = gp2 / gp1\n",
+ "\n",
+ "train['PriceForMetr'] = train['DistrictId'].map(gp3.to_dict())\n",
+ "test['PriceForMetr'] = test['DistrictId'].map(gp3.to_dict())\n",
+ "\n",
+ "#test.info(memory_usage=\"deep\")\n",
+ "test['PriceForMetr'].isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "4e0a8dcc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# есть незаполненые значения - заполним их медианой\n",
+ "test.loc[test['PriceForMetr'].isnull(), 'PriceForMetr'] = test['PriceForMetr'].median()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "140432e8",
+ "metadata": {},
+ "source": [
+ "преобразуеь 'Ecology_2', 'Ecology_3', 'Shops_2' в бинарные признаки."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "4e9a176b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Ecology_2 in train \n",
+ "\n",
+ "B 9895\n",
+ "A 97\n",
+ "Name: Ecology_2, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n",
+ "Ecology_2 in test \n",
+ "\n",
+ "B 4952\n",
+ "A 48\n",
+ "Name: Ecology_2, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n",
+ "Ecology_3 in train \n",
+ "\n",
+ "B 9718\n",
+ "A 274\n",
+ "Name: Ecology_3, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n",
+ "Ecology_3 in test \n",
+ "\n",
+ "B 4851\n",
+ "A 149\n",
+ "Name: Ecology_3, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n",
+ "Shops_2 in train \n",
+ "\n",
+ "B 9168\n",
+ "A 824\n",
+ "Name: Shops_2, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n",
+ "Shops_2 in test \n",
+ "\n",
+ "B 4588\n",
+ "A 412\n",
+ "Name: Shops_2, dtype: int64\n",
+ "****************************************************************************************************\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "for cat_colname in ['Ecology_2', 'Ecology_3', 'Shops_2']:\n",
+ " print(str(cat_colname) + ' in train \\n\\n' + str(train[cat_colname].value_counts()) + '\\n' + '*' * 100 + '\\n')\n",
+ " print(str(cat_colname) + ' in test \\n\\n' + str(test[cat_colname].value_counts()) + '\\n' + '*' * 100 + '\\n')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "d1f72ce1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "train['Ecology_2_bin'] = train['Ecology_2'].replace({'A':0, 'B':1})\n",
+ "train['Ecology_3_bin'] = train['Ecology_3'].replace({'A':0, 'B':1})\n",
+ "train['Shops_2_bin'] = train['Shops_2'].replace({'A':0, 'B':1})\n",
+ "\n",
+ "test['Ecology_2_bin'] = test['Ecology_2'].replace({'A':0, 'B':1})\n",
+ "test['Ecology_3_bin'] = test['Ecology_3'].replace({'A':0, 'B':1})\n",
+ "test['Shops_2_bin'] = test['Shops_2'].replace({'A':0, 'B':1})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8588b213",
+ "metadata": {},
+ "source": [
+ "## МОДЕЛЬ"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "c007dbdb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict = {}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "463a71bb",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['Rooms', 'Square', 'LifeSquare', 'KitchenSquare', 'Floor', 'HouseFloor', 'HouseYear', 'Ecology_1', 'Social_1', 'Social_2', 'Social_3', 'Healthcare_1', 'Helthcare_2', 'Shops_1', 'PriceForMetr']\n"
+ ]
+ }
+ ],
+ "source": [
+ "features = train.select_dtypes(exclude=['object', 'string', 'category']).columns.tolist()\n",
+ "features.remove('Price')\n",
+ "print(features)\n",
+ "\n",
+ "target = 'Price'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "8fb0b73d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = train_test_split(\n",
+ " train[features], train[target], test_size=0.3, random_state=42)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "0033e835",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Int64Index: 6994 entries, 3174 to 7276\n",
+ "Data columns (total 15 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Rooms 6994 non-null uint8 \n",
+ " 1 Square 6994 non-null float32\n",
+ " 2 LifeSquare 6994 non-null float32\n",
+ " 3 KitchenSquare 6994 non-null float32\n",
+ " 4 Floor 6994 non-null uint8 \n",
+ " 5 HouseFloor 6994 non-null uint8 \n",
+ " 6 HouseYear 6994 non-null uint32 \n",
+ " 7 Ecology_1 6994 non-null float32\n",
+ " 8 Social_1 6994 non-null uint8 \n",
+ " 9 Social_2 6994 non-null uint16 \n",
+ " 10 Social_3 6994 non-null uint8 \n",
+ " 11 Healthcare_1 6994 non-null float32\n",
+ " 12 Helthcare_2 6994 non-null uint8 \n",
+ " 13 Shops_1 6994 non-null uint8 \n",
+ " 14 PriceForMetr 6994 non-null float64\n",
+ "dtypes: float32(5), float64(1), uint16(1), uint32(1), uint8(7)\n",
+ "memory usage: 334.7 KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "X_train.info()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "79f4145d",
+ "metadata": {},
+ "source": [
+ "## Linear Regression"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "bd6efb33",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "LinearRegression()"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "line_regression_model = LinearRegression()\n",
+ "line_regression_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "19c6a858",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['Linear Regression'] = line_regression_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "550ec302",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(line_regression_model, 'Linear Regression', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1968f6c6",
+ "metadata": {},
+ "source": [
+ "## Random Forest Regressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "24499b5c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "RandomForestRegressor()"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "random_forest_regressor_model = RandomForestRegressor()\n",
+ "random_forest_regressor_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "f12c76db",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['Random Forest Regressor'] = random_forest_regressor_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "4202e128",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(random_forest_regressor_model,\n",
+ " 'Random Forest Regressor', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0497dd8a",
+ "metadata": {},
+ "source": [
+ "## Gradient Boosting Regressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "id": "7ee99f3f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GradientBoostingRegressor()"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gradient_boosting_regressor_model = GradientBoostingRegressor()\n",
+ "gradient_boosting_regressor_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "id": "b8f7f41c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['Gradient Boosting Regressor'] = gradient_boosting_regressor_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "id": "2615039b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(gradient_boosting_regressor_model,\n",
+ " 'Gradient Boosting Regressor', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "38106a47",
+ "metadata": {},
+ "source": [
+ "## LassoCV"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "01cbb842",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "LassoCV()"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lasso_cv_model = LassoCV()\n",
+ "lasso_cv_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "id": "3ace9270",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['LassoCV'] = lasso_cv_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "4b6b72e3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(lasso_cv_model, 'LassoCV', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d5a914f8",
+ "metadata": {},
+ "source": [
+ "## LGBMRegressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "id": "1d5b6f17",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "LGBMRegressor()"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lgbm_regressor_model = LGBMRegressor()\n",
+ "lgbm_regressor_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "id": "422c9904",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(lgbm_regressor_model, 'LGBMRegressor', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "99c110c9",
+ "metadata": {},
+ "source": [
+ "#### Tunning LGBMRegressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "id": "daada10a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lgbm_regressor_model.get_params"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "id": "e7bccecb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0.01, 0.02, 0.03, 0.04])"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.arange(0.01, 0.05, 0.01)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "id": "66062abb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "parameters = [{\n",
+ " 'max_bin': np.arange(90, 120, 10),\n",
+ " 'n_estimators': np.arange(4000, 7000, 1000),\n",
+ " 'learning_rate': np.arange(0.01, 0.05, 0.01)\n",
+ "}]\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "53ab888a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "clf = GridSearchCV(\n",
+ " estimator=LGBMRegressor(random_state=42),\n",
+ " param_grid=parameters,\n",
+ " scoring='neg_mean_squared_error',\n",
+ " cv=4,\n",
+ " n_jobs=-1,\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "id": "40ad3650",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "GridSearchCV(cv=4, estimator=LGBMRegressor(random_state=42), n_jobs=-1,\n",
+ " param_grid=[{'learning_rate': array([0.01, 0.02, 0.03, 0.04]),\n",
+ " 'max_bin': array([ 90, 100, 110]),\n",
+ " 'n_estimators': array([4000, 5000, 6000])}],\n",
+ " scoring='neg_mean_squared_error')"
+ ]
+ },
+ "execution_count": 60,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "clf.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "id": "9fb4f9d1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " param_learning_rate | \n",
+ " param_max_bin | \n",
+ " param_n_estimators | \n",
+ " mean_test_score | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 6 | \n",
+ " 0.01 | \n",
+ " 110 | \n",
+ " 4000 | \n",
+ " -2.088079e+09 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 0.01 | \n",
+ " 110 | \n",
+ " 5000 | \n",
+ " -2.109738e+09 | \n",
+ "
\n",
+ " \n",
+ " | 0 | \n",
+ " 0.01 | \n",
+ " 90 | \n",
+ " 4000 | \n",
+ " -2.110668e+09 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.01 | \n",
+ " 100 | \n",
+ " 4000 | \n",
+ " -2.116463e+09 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 0.01 | \n",
+ " 110 | \n",
+ " 6000 | \n",
+ " -2.128995e+09 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0.01 | \n",
+ " 90 | \n",
+ " 5000 | \n",
+ " -2.131810e+09 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.01 | \n",
+ " 100 | \n",
+ " 5000 | \n",
+ " -2.135978e+09 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.01 | \n",
+ " 90 | \n",
+ " 6000 | \n",
+ " -2.150383e+09 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.01 | \n",
+ " 100 | \n",
+ " 6000 | \n",
+ " -2.153554e+09 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " 0.02 | \n",
+ " 110 | \n",
+ " 4000 | \n",
+ " -2.163152e+09 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " param_learning_rate param_max_bin param_n_estimators mean_test_score\n",
+ "6 0.01 110 4000 -2.088079e+09\n",
+ "7 0.01 110 5000 -2.109738e+09\n",
+ "0 0.01 90 4000 -2.110668e+09\n",
+ "3 0.01 100 4000 -2.116463e+09\n",
+ "8 0.01 110 6000 -2.128995e+09\n",
+ "1 0.01 90 5000 -2.131810e+09\n",
+ "4 0.01 100 5000 -2.135978e+09\n",
+ "2 0.01 90 6000 -2.150383e+09\n",
+ "5 0.01 100 6000 -2.153554e+09\n",
+ "15 0.02 110 4000 -2.163152e+09"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cv_results = pd.DataFrame(clf.cv_results_)\n",
+ "param_columns = [\n",
+ " column\n",
+ " for column in cv_results.columns\n",
+ " if column.startswith('param_')\n",
+ "]\n",
+ "\n",
+ "score_columns = ['mean_test_score']\n",
+ "\n",
+ "cv_results = (cv_results[param_columns + score_columns]\n",
+ " .sort_values(by=score_columns, ascending=False))\n",
+ "\n",
+ "cv_results.head(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "id": "9ec4c48e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'learning_rate': 0.01, 'max_bin': 110, 'n_estimators': 4000}"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "clf.best_params_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e4dde9fb",
+ "metadata": {},
+ "source": [
+ "#### Test tunning LGBMRegressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "id": "81c1ad27",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "LGBMRegressor(learning_rate=0.01, max_bin=110, n_estimators=4000, num_leaves=4)"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lgbm_regressor_model = LGBMRegressor(\n",
+ " max_bin=110,\n",
+ " num_leaves=4,\n",
+ " n_estimators=4000,\n",
+ " learning_rate=0.01\n",
+ ")\n",
+ "lgbm_regressor_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "id": "284d4b6d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(lgbm_regressor_model, 'LGBMRegressor', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "id": "4dd74a5a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['LGBMRegressor'] = lgbm_regressor_model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6e1b3c14",
+ "metadata": {},
+ "source": [
+ "### XGBRegressor"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "id": "20ba592a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "XGBRegressor(base_score=0.5, booster='gbtree', callbacks=None,\n",
+ " colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1,\n",
+ " early_stopping_rounds=None, enable_categorical=False,\n",
+ " eval_metric=None, feature_types=None, gamma=0, gpu_id=-1,\n",
+ " grow_policy='depthwise', importance_type=None,\n",
+ " interaction_constraints='', learning_rate=0.300000012, max_bin=256,\n",
+ " max_cat_threshold=64, max_cat_to_onehot=4, max_delta_step=0,\n",
+ " max_depth=6, max_leaves=0, min_child_weight=1, missing=nan,\n",
+ " monotone_constraints='()', n_estimators=100, n_jobs=0,\n",
+ " num_parallel_tree=1, predictor='auto', random_state=0, ...)"
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "xgboost_model = XGBRegressor()\n",
+ "xgboost_model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "id": "e659f3d7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_dict['XGBRegressor'] = xgboost_model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "id": "40264a30",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(xgboost_model, 'XGBRegressor', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c5c6e349",
+ "metadata": {},
+ "source": [
+ "# Резульитаты"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7c10701a",
+ "metadata": {},
+ "source": [
+ "найдем лучшее"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 130,
+ "id": "10e6da3c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "models_score_test = models_r2(models_dict, X_test, y_test)\n",
+ "models_score_train = models_r2(models_dict, X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 131,
+ "id": "6ccb6d3f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " r2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2 | \n",
+ " Gradient Boosting Regressor | \n",
+ " 0.752612 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " LGBMRegressor | \n",
+ " 0.752397 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Random Forest Regressor | \n",
+ " 0.751699 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " XGBRegressor | \n",
+ " 0.743216 | \n",
+ "
\n",
+ " \n",
+ " | 0 | \n",
+ " Linear Regression | \n",
+ " 0.667146 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " LassoCV | \n",
+ " 0.652968 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name r2\n",
+ "2 Gradient Boosting Regressor 0.752612\n",
+ "4 LGBMRegressor 0.752397\n",
+ "1 Random Forest Regressor 0.751699\n",
+ "5 XGBRegressor 0.743216\n",
+ "0 Linear Regression 0.667146\n",
+ "3 LassoCV 0.652968"
+ ]
+ },
+ "execution_count": 131,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "models_score_test[['name', 'r2']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 132,
+ "id": "d55a394e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "r2_max_test = models_score_test['r2'].max()\n",
+ "r2_max_train = models_score_train['r2'].max()\n",
+ "plt.barh(models_score_test['name'], models_score_test['r2'],\n",
+ " alpha=0.5, color='red', label=f'Test Data: R2 max: {r2_max_test:.4f}')\n",
+ "plt.barh(models_score_train['name'], models_score_train['r2'],\n",
+ " alpha=0.5, color='grey', label=f'Train Data: R2 max: {r2_max_train:.4f}')\n",
+ "plt.title('R2')\n",
+ "plt.legend()\n",
+ "plt.axvline(0.6, color='red')\n",
+ "plt.axvline(r2_max_test, color='yellow')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 133,
+ "id": "6ea21b25",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "mse_min_test = models_score_test['mse'].min()\n",
+ "mse_min_train = models_score_train['mse'].min()\n",
+ "plt.barh(models_score_test['name'], models_score_test['mse'],\n",
+ " alpha=0.5, color='red', label=f'Test Data MSE min: {mse_min_test:.0e}')\n",
+ "plt.barh(models_score_train['name'], models_score_train['mse'],\n",
+ " alpha=0.5, color='grey', label=f'Train Data MSE min: {mse_min_train:.0e}')\n",
+ "plt.title('Mean squared error')\n",
+ "plt.legend(loc=2)\n",
+ "plt.axvline(mse_min_test, color='yellow')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "39b6cf09",
+ "metadata": {},
+ "source": [
+ "### Выбор\n",
+ "Gradient Boosting Regressor - не применяем по условию задания!\n",
+ "выберем следуюющий это \"LGBMRegressor\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 134,
+ "id": "dbd2dc85",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "best_model = models_dict['LGBMRegressor']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 135,
+ "id": "58539fae",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " name | \n",
+ " importances | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Rooms | \n",
+ " 322 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Square | \n",
+ " 1492 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " LifeSquare | \n",
+ " 927 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " KitchenSquare | \n",
+ " 815 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Floor | \n",
+ " 573 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " HouseFloor | \n",
+ " 920 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " HouseYear | \n",
+ " 1502 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " Ecology_1 | \n",
+ " 1254 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " Social_1 | \n",
+ " 614 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " Social_2 | \n",
+ " 199 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " Social_3 | \n",
+ " 364 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " Healthcare_1 | \n",
+ " 740 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " Helthcare_2 | \n",
+ " 143 | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " Shops_1 | \n",
+ " 273 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " PriceForMetr | \n",
+ " 1862 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " name importances\n",
+ "0 Rooms 322\n",
+ "1 Square 1492\n",
+ "2 LifeSquare 927\n",
+ "3 KitchenSquare 815\n",
+ "4 Floor 573\n",
+ "5 HouseFloor 920\n",
+ "6 HouseYear 1502\n",
+ "7 Ecology_1 1254\n",
+ "8 Social_1 614\n",
+ "9 Social_2 199\n",
+ "10 Social_3 364\n",
+ "11 Healthcare_1 740\n",
+ "12 Helthcare_2 143\n",
+ "13 Shops_1 273\n",
+ "14 PriceForMetr 1862"
+ ]
+ },
+ "execution_count": 135,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.DataFrame({'name': list(X_train.columns),\n",
+ " 'importances': list(best_model.feature_importances_)})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 136,
+ "id": "709fe251",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model_test(best_model, 'best_model', X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7f8f48ea",
+ "metadata": {},
+ "source": [
+ "### Вывод в файл"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "id": "960996db",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "test_features = list(X_train.columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "id": "769b58d1",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 5000 entries, 0 to 4999\n",
+ "Data columns (total 15 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 Rooms 5000 non-null uint8 \n",
+ " 1 Square 5000 non-null float32\n",
+ " 2 LifeSquare 5000 non-null float32\n",
+ " 3 KitchenSquare 5000 non-null float32\n",
+ " 4 Floor 5000 non-null uint8 \n",
+ " 5 HouseFloor 5000 non-null uint8 \n",
+ " 6 HouseYear 5000 non-null uint16 \n",
+ " 7 Ecology_1 5000 non-null float32\n",
+ " 8 Social_1 5000 non-null uint8 \n",
+ " 9 Social_2 5000 non-null uint16 \n",
+ " 10 Social_3 5000 non-null uint8 \n",
+ " 11 Healthcare_1 5000 non-null float32\n",
+ " 12 Helthcare_2 5000 non-null uint8 \n",
+ " 13 Shops_1 5000 non-null uint8 \n",
+ " 14 PriceForMetr 5000 non-null float64\n",
+ "dtypes: float32(5), float64(1), uint16(2), uint8(7)\n",
+ "memory usage: 190.6 KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "test[test_features].info()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "id": "4a2e7bf3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "test['Price'] = best_model.predict(test[test_features])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "id": "16dfa624",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "mu = 215623.41 and sigma = 80260.29\n"
+ ]
+ },
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/svg+xml": [
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "price_log = np.log1p(test['Price'])\n",
+ "#sns.distplot(price_log, fit=norm)\n",
+ "sns.histplot(price_log, kde=True)\n",
+ "#sns.displot(price_log, kde=True)\n",
+ "\n",
+ "mu, sigma = norm.fit(test['Price'])\n",
+ "\n",
+ "print(f'mu = {mu:.2f} and sigma = {sigma:.2f}')\n",
+ "\n",
+ "plt.legend(\n",
+ " [f'Normal dist. ($\\mu=$ {mu:.2f} and $\\sigma=$ {sigma:.2f} )'], loc='best')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.title('Price distribution')\n",
+ "\n",
+ "# QQ-plot\n",
+ "fig = plt.figure()\n",
+ "res = stats.probplot(price_log, plot=plt)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 137,
+ "id": "c1b045a3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "test[['Id', 'Price']].to_csv('DGudilin_predictions.csv', index=None)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bdc710c9",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "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.9.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/DGudilin_predictions.csv b/DGudilin_predictions.csv
new file mode 100644
index 0000000..5c3a32a
--- /dev/null
+++ b/DGudilin_predictions.csv
@@ -0,0 +1,5001 @@
+Id,Price
+725,146764.72335214875
+15856,217291.77539680796
+5480,263587.53889699944
+15664,336397.9274232199
+14275,136702.26178660136
+7633,204833.87911788782
+13329,153626.80064178264
+5502,220916.56214540062
+4220,274879.40319104906
+11538,207779.475161359
+15975,261075.7616036934
+3310,217684.10480171567
+9286,145347.75213184787
+11260,186210.173858061
+5214,107931.45135277549
+11307,187839.31583947616
+13543,388182.198303467
+615,180944.00615410932
+3495,214504.07590563572
+2321,240390.41630157738
+12046,201004.1385419476
+16688,135672.843185147
+12694,223226.46979961527
+783,152060.3240820544
+8968,165315.5985007556
+13454,166028.60454864005
+12190,218194.8905003009
+11160,110128.01028262326
+10291,189553.744625526
+891,271165.0355898892
+2982,175881.74651383416
+3818,292940.64772924024
+2449,195735.10343127858
+8317,169068.10522102637
+4922,185390.94028280128
+1257,240320.0656261766
+9348,204399.63979610216
+4176,169630.01788836624
+10704,155629.919006543
+6624,114661.24862600538
+5428,178009.30034951723
+12749,182835.6507505188
+8994,209883.0858695404
+11513,135246.84927962912
+3047,206065.37281762378
+9519,197702.2989059107
+12309,269036.2426755088
+14081,254580.5821155172
+8334,275658.1379119048
+6343,174828.96748937748
+14788,125006.6381848302
+15748,313111.16400007246
+153,236618.16829518776
+14149,184849.73107347108
+269,183390.33519508218
+5452,109155.14871507772
+721,164341.04853800856
+5079,313796.3231775762
+2831,136211.1662994294
+10614,112341.27916449842
+10131,308365.6576090955
+9996,322866.1393319656
+3061,195782.80605793756
+11733,330939.4357398687
+3726,256085.87899855047
+10929,208505.9635924266
+9011,177760.48671952766
+16182,257495.71135532964
+4976,156154.85863483892
+9897,243786.84105972026
+1872,162157.04757090038
+9205,395108.08192425413
+5403,449804.8486835442
+14074,171025.39878533102
+6268,155440.70266941292
+14232,170492.48698764818
+8532,225695.11212637305
+7034,358002.3652477516
+6553,454101.9491885142
+3133,163565.03817915698
+8596,194397.41982219272
+12389,274607.2913056811
+14462,171032.90675024356
+8860,377282.56875499425
+8377,272542.17929581465
+6367,365396.74165239447
+6917,238853.10663009077
+4216,193477.78540857835
+5806,161384.80647350173
+5438,170148.7333195945
+6632,195935.62017870272
+2650,162010.35960905894
+5396,186107.27226318142
+4044,151420.00349804328
+1345,229715.1017308412
+856,177821.22316696227
+12791,281371.0929726367
+12499,213594.80307925906
+12249,131972.49667195353
+14641,144049.22859401078
+1919,160515.57026989406
+7848,187530.75243140175
+10749,158523.27035117045
+15554,186225.61180339663
+15834,195679.15851885517
+1355,170337.9166927611
+15451,195309.61548497187
+12401,218163.9004677214
+10290,172683.422873848
+9462,137487.7551334734
+3103,233373.9967971109
+3420,134834.37096588704
+12262,237639.7511818559
+5032,142652.98958351067
+8949,322178.5790615281
+15567,224960.54426490585
+16389,163201.44416225865
+7809,95668.54120539459
+8990,156594.5049971628
+16089,282692.5865739278
+12743,106803.58468144674
+5132,129337.09518135617
+1619,276002.22749704524
+2428,93939.40808311266
+16741,163279.17842914464
+13193,216004.7855676771
+12588,486240.6962585155
+5067,162020.43692941073
+14685,125505.70928629968
+2292,155996.68530185815
+5746,129794.48931755056
+12578,143517.07700884517
+14834,161289.30395318943
+2147,154938.13446583503
+8222,135169.19292648422
+10419,259591.3554402491
+11492,208585.18296238186
+3006,234575.2709312925
+8761,196248.08284571412
+15371,357932.1288779669
+16367,146841.28519579998
+6317,263816.4006797001
+10878,289982.0916679603
+3895,165321.15007749802
+8041,173232.19121196753
+13428,420242.60250250006
+14669,144270.50672460438
+1006,174589.34562619787
+12271,168569.51046212993
+3764,391212.27079904417
+7675,199728.325974436
+11709,304598.3831811023
+8629,156501.43276942067
+1105,350133.5527028574
+6096,181043.16694342883
+11727,214759.84314048773
+5157,146524.91239787484
+3679,139096.86982870288
+1755,134184.62385047384
+7391,210714.01204339968
+7425,107628.52828689883
+6882,402823.0275850537
+10752,376555.0692335734
+7472,227288.49306092213
+14320,101121.5266889427
+9596,158314.19789614636
+5317,212266.10522822425
+7378,86059.1875217138
+16154,177761.04583973376
+3464,183513.58398456586
+4197,245180.0273621531
+9477,123685.3366057951
+12705,187438.80218226954
+16426,205815.00482437987
+1481,81306.3623598334
+9946,234836.01033708456
+12025,222108.81314070884
+5341,239719.47265007786
+9923,299536.633033775
+7953,198496.3849632624
+11066,246746.18240640423
+5037,187173.00015962587
+2509,183075.6418555336
+4937,356563.6076811127
+12089,388251.36581430223
+4964,177196.38935880625
+16500,261357.534470623
+4625,135557.28872329317
+2363,428687.9331970944
+8148,196923.87335451806
+3804,178561.10912187022
+4584,159782.2859974524
+10694,126335.31665716339
+2691,167523.5645200069
+2983,206001.15878395116
+13563,340266.99159041623
+10747,218683.0898877956
+1721,196580.19940383243
+2789,248974.83008237317
+7214,252420.12560481418
+8659,227827.8123608527
+5107,312978.8519913319
+3843,224921.1726138657
+14610,380546.9602388639
+15505,179952.01309940167
+5060,255337.69316100885
+16055,258495.73788454998
+14963,201043.90253099796
+4118,143780.56507582552
+1672,197355.92289885416
+3209,174402.8783088272
+16515,139447.2990074632
+973,165371.0441941247
+12529,192907.9199309861
+5896,123171.24847241076
+5450,255632.8318516648
+3249,185219.55211677108
+8911,183330.5572274366
+5898,226623.5201527109
+1024,191609.76344143992
+4766,209534.20485052417
+15804,179031.85233239387
+14303,201985.12967138257
+10707,184072.56420263796
+6605,215275.8543257974
+1138,433592.53159281064
+14088,394560.3809481511
+9154,175614.38349971804
+8190,186604.99581966264
+398,239448.47082583723
+13302,277374.57612057065
+9696,150146.7118314741
+16786,123150.93451438413
+16230,161032.05764294014
+6552,186972.5767491918
+923,240162.45256287657
+9602,299004.48735906946
+5857,261079.74266641404
+8120,165828.32263867662
+7134,181806.56404810713
+11726,186910.71654253246
+8069,124912.31796924112
+12420,186400.7252822668
+8604,184966.29866952397
+4854,295658.5652885678
+12212,191658.02317292645
+12099,379434.03818642546
+3882,416748.1393220376
+6995,388183.1936429003
+10172,213098.29696640847
+11672,327901.1391940105
+12897,284414.22971254773
+16097,198238.36922175283
+6779,237702.13218230722
+11199,201571.50733243913
+10816,359088.4176698829
+143,428801.5851012465
+5399,245283.13083056122
+3286,154273.24134839463
+13706,174603.34769441953
+1935,399263.6715956349
+16000,157948.62853647358
+2860,207165.55893038624
+11407,155882.49292324384
+16378,272408.4661650488
+12278,179631.95840350178
+3842,181553.59291630753
+2692,345393.30226747954
+7699,188276.86182033608
+6825,275889.3012927196
+7268,336249.4834039169
+1477,444231.3838876628
+9887,172648.61670739064
+9436,178116.33696133585
+3179,245629.4450989292
+1350,477213.2383879685
+10643,172722.17932153397
+5793,266001.77725540736
+11494,410151.1172873581
+4206,205245.78597642545
+12419,241162.30713119733
+8530,231013.90254775854
+5985,156664.98742636782
+8908,207728.92625294987
+256,128545.64682423607
+7234,167890.0302009532
+5648,206195.99654492002
+3014,241464.5716261548
+2184,182753.97809273077
+9189,278657.72568169463
+14884,197655.312788956
+10333,173509.57818625882
+15896,150778.15987413152
+13269,153742.34341543022
+8603,227022.2686362794
+15087,177770.14658871767
+4344,180354.24726420254
+7981,91302.44769812508
+10908,228067.68594021106
+6190,155583.81878185534
+11742,202043.71173791145
+9224,148427.7222851598
+14667,181359.00396260002
+458,196989.83251283344
+2464,358042.3784522919
+12320,232620.33543999208
+278,183047.44115230482
+2912,186950.22300862943
+6698,201163.47112147225
+4510,134872.66277960368
+4183,193111.85702651905
+5551,219966.43554995832
+12187,142832.47871948738
+7948,223577.55689445863
+10808,185268.3038088767
+12432,174978.7588433582
+5356,178378.17726697942
+8984,528813.8771826164
+9203,182538.95976221724
+15412,92424.93652004961
+12041,138130.6135858912
+7644,260098.98934248186
+7071,197814.48710029724
+10685,175748.90099021653
+6763,280464.2518870959
+940,135649.9345476457
+14959,196580.19940383243
+1338,143195.92207292747
+5351,139117.2217393568
+6524,200380.90658310338
+12516,153311.01135522412
+3288,264087.37766500766
+3146,237944.8258429858
+3954,172340.7835221112
+11955,155837.89896686663
+1211,231020.52773864643
+15668,196959.31213865976
+1320,100444.34248192362
+9108,161228.55044797604
+16482,227983.9769494018
+5017,143674.14247309565
+8290,209329.60449379327
+4304,423096.4998499987
+1930,209450.31137238862
+12530,181113.7280011344
+11295,300274.5040628576
+3002,146917.86146772915
+15483,158779.06989517022
+11525,201452.80652268138
+13978,131538.00468340446
+4885,149142.73831719294
+8325,166631.39065229153
+3630,130771.98731771653
+9165,183964.8613931606
+13945,232939.66454756583
+10663,195600.3448314931
+14803,173940.34450164353
+7621,169858.79200293444
+8205,233180.60243246687
+10387,195947.32988389046
+5457,144529.31472198473
+10234,310465.0720802767
+6251,166871.77946096484
+701,265302.452584141
+7930,183986.33333054275
+15028,138258.99726040484
+12172,74969.11503155036
+5805,181658.7674654899
+7411,303864.15641292883
+14806,186960.51629020722
+7890,178517.6449785578
+10440,125803.98142055655
+14926,159025.5002088951
+5381,166598.86131641726
+3800,376577.2015270826
+10511,237091.4329491292
+9324,245341.80869044195
+3313,207363.56558510914
+7351,147316.6334758637
+8459,176290.1075650693
+9957,112815.964060061
+12024,191010.26673101276
+4380,246771.44285385575
+5042,163143.74705700335
+13289,146516.28285282155
+13407,365180.3714540436
+13258,151754.96398292034
+15993,302969.65372594027
+12525,190161.01033338526
+4062,241548.49127033414
+12065,237045.92618059742
+8227,175645.6012781234
+11333,161071.03784329398
+2867,131612.40417869017
+3319,253444.4991960505
+3523,302332.62263483566
+7055,196183.74728169234
+14930,177994.48681527918
+3444,142143.90744602415
+2940,310923.58496194443
+6935,380192.70133156376
+16116,317835.16635401064
+13370,231136.74555006664
+6103,228093.41191378311
+7446,191267.0773230418
+1859,172238.37583706225
+4079,180719.15076549156
+3228,183092.99135406205
+9665,162076.43093267854
+15957,391474.3213110888
+11533,164455.69502736692
+2314,129767.17413314938
+4096,209373.13725218503
+13437,188355.4277709247
+5980,222078.34038432664
+2008,195018.5896203962
+6754,184191.79832683693
+4129,156671.78502695262
+14557,293632.3485744853
+7096,340975.548332276
+14297,270533.5541159909
+3967,231508.91708047647
+16485,127741.64745610725
+13075,303145.5684119526
+14289,204356.15260068956
+10988,155421.40135943404
+3230,139396.29541013445
+13250,191345.52896787567
+2559,185830.17509735897
+7739,345522.0517045425
+7213,168753.67689681103
+6639,238954.38666814263
+3164,318474.6698034135
+15207,148110.5346178614
+5113,189158.23452476802
+3929,165141.97086813382
+14493,240625.13425038013
+11110,174857.26957770134
+2033,187439.36949498128
+16057,206515.83515379
+16709,212825.8381192049
+14313,150597.4835375123
+1028,324126.8259848267
+7187,99286.28293165019
+3738,335026.98181592167
+9869,324137.02569487615
+12644,187345.11535917278
+3686,124437.4558593461
+9196,262863.9007641912
+12326,199436.92763472095
+4936,195091.53122089265
+13314,181273.79171701038
+9857,374107.16083043045
+519,178593.715672941
+8410,176711.365040852
+1720,171711.8502623687
+10341,208286.31530326168
+14415,175561.3362722116
+10613,305522.84128018154
+8027,227534.99229224544
+15539,248357.98151178026
+7431,250016.444727523
+1370,151260.89961311014
+12708,148707.34176146518
+2250,209457.09764667298
+14758,135782.69660371044
+8525,373939.7280484526
+1538,293477.2549030515
+1142,157332.3972351506
+1152,241139.29085731469
+9802,178327.20191755757
+3331,292466.13863416313
+15203,182275.33249765923
+4247,180048.83699909356
+1976,471175.3946953685
+2346,193460.70231989407
+10078,237447.11010591185
+1938,207222.93127323166
+7819,194773.4902082959
+2168,251182.7965256442
+15634,216726.78964386485
+8465,238456.8928223168
+9313,151564.16561121776
+6539,135944.82132892098
+6325,107028.94705292022
+13442,307476.8134160361
+9967,198318.99078553426
+7893,229950.75827378163
+2861,182643.4028523018
+11031,295891.2291320855
+15073,110677.82236510068
+13837,167379.6894868237
+2524,253802.90895065517
+8617,208986.61645848528
+13513,177784.53132158288
+3081,232529.3812342076
+10675,391480.6139207826
+1907,77647.6175127931
+4872,248855.18565226253
+16274,415046.1749834833
+11837,237044.67086799652
+16577,227896.6226357829
+5231,368935.1402462527
+11315,209900.3137276901
+273,195947.32988389046
+8363,238840.87938563369
+4255,218391.81039816426
+16330,243930.4316113751
+11528,172079.81514937137
+14799,250393.68603847252
+1611,302620.0549546097
+9234,179805.54875394958
+1633,118829.30098916305
+6791,209427.23167058534
+11567,334541.36346111674
+3070,198434.27151330956
+12094,235923.67820437736
+14335,300855.78972517815
+137,164651.67347068765
+7182,153370.82581367585
+11718,181935.14126224307
+5194,72460.04566136906
+97,381386.9303246591
+5118,417586.6007521079
+13920,300530.030043066
+9952,183070.0728630066
+15337,200247.9299919802
+10243,217565.27010528606
+4048,393881.11968126125
+171,169382.30786918086
+11378,155086.5904043031
+14190,171665.77627018554
+15265,140665.5171951439
+2740,126537.25201688669
+5573,288302.54857807985
+4481,232197.80527870974
+2631,152576.72568154626
+4984,241438.475953505
+16466,186093.36653564993
+16716,120469.6513376188
+15325,190668.68870887172
+10115,180702.39715426834
+117,495731.1375495432
+5476,117302.30685867647
+11757,170510.17419965434
+12359,118433.24550908213
+15546,189674.88879268995
+8133,161434.3311753166
+9018,387312.3347055182
+2075,165290.8586668014
+11170,350907.40609209775
+15733,204041.8309780125
+9280,151673.89558605687
+10734,326358.2939356358
+14071,153289.83613672576
+7373,242823.5308598855
+14736,189474.65236957057
+3458,126794.05817115783
+6183,169988.3773187044
+7825,222934.35762456848
+16775,201449.56508367008
+5717,178244.98386001488
+12397,137257.528423295
+8189,470747.69359075336
+4423,203228.40342082607
+3994,112579.14159314074
+10342,192996.10666945064
+10051,178897.28056098305
+9453,141964.73085878434
+12593,447086.05713143386
+1274,89082.29980748841
+6933,325417.77431096433
+1761,146793.97775929287
+7157,350846.46004178876
+15169,151091.23216084606
+6792,372843.10069873976
+13830,172683.422873848
+7240,197252.50299246743
+3051,267849.2532317937
+6550,119055.13596186011
+4603,204409.92105520304
+5729,178087.1043426861
+13473,310045.54591714113
+15104,131504.8628379091
+6599,381874.9024371234
+2216,341507.4707896014
+8721,299557.244574732
+3645,200809.32082743125
+8664,204293.73153887232
+11001,211015.65474146497
+753,163985.92726522946
+8129,226414.57509332904
+15235,164737.40966714264
+3359,241568.9258240821
+10424,228868.64153841414
+10226,234098.93188979063
+9252,208843.58141266913
+3008,279307.0216634509
+5849,176048.61716111106
+8494,159575.4386235648
+6764,290797.8286363793
+12445,323377.4541190624
+11716,182397.76941712078
+4508,122758.09303060565
+5669,191066.43152549202
+11427,121058.56733586562
+11065,184640.31490579684
+8910,211711.63631544742
+16401,99931.48717560299
+11913,154273.24134839463
+6221,183898.3921150117
+10839,198806.0425972311
+2809,200908.78475339245
+13311,149350.35520962116
+6866,177823.12283871864
+6019,177446.6580129004
+3024,161232.30719992376
+1391,237715.49493566868
+15904,211679.53384926534
+15858,283363.6014282449
+9911,220122.67645545737
+16579,205038.1675742762
+4394,319101.8665164651
+1468,505624.6632525626
+12965,151891.7476203353
+2249,208730.44206285337
+14384,150244.57918620916
+13040,138539.58327744933
+8872,141373.69764167236
+12864,239221.1939202252
+15712,169168.89509345975
+14049,151067.90783747644
+1840,98062.8705221787
+12019,165504.53332114604
+8948,160634.34528252247
+15154,214584.4233664093
+6943,148951.01516691386
+12564,357296.0306976806
+12766,169600.91488734412
+7255,225692.10315928177
+7962,153603.16826418298
+709,145359.35770676198
+4634,147909.28130674976
+889,227459.16843387394
+4774,138730.69252025505
+13890,174419.22510271997
+15431,149666.85125512263
+8726,349231.7271509081
+10373,141119.12396850553
+6413,185472.04397178578
+9761,139465.26704502394
+15864,159852.9150233402
+6147,143154.35721224785
+3384,231939.52139646414
+320,275750.5076511823
+8006,182402.47969127249
+14395,174275.13444739202
+14976,106277.798588428
+12185,218908.77736818808
+4779,130880.2839961065
+8551,143407.14681911204
+9025,199057.77701881697
+10616,230260.04022127268
+7475,118775.99143397088
+6341,322316.4492518457
+14163,145533.814561549
+2211,203047.92338751248
+10532,318441.4702854974
+14338,126310.82816554102
+831,179086.29812570207
+3382,167787.17308021747
+9209,297549.3351493431
+7188,215922.08796085356
+7197,213993.2718747815
+11270,181379.35730303772
+15918,113886.15535816431
+6937,475200.5317697571
+6178,189166.42897348522
+10668,125811.99290822593
+1413,271501.7894512616
+6884,304620.78858961863
+8266,216455.965756342
+14019,213948.03757139735
+16764,146271.47414990776
+15306,170640.99107274
+3740,227045.38355585127
+5298,171474.78779586955
+8319,191076.7685507455
+4229,180984.4340011302
+13429,197860.03240683704
+1753,400990.78979063703
+860,251891.78805717788
+14219,146592.46249576844
+12113,192624.69528494452
+11309,120747.5658878157
+9930,215664.0226590458
+10570,213603.7324112159
+2839,135032.2357739388
+6699,123240.56121106884
+16647,121577.56306403168
+5325,237079.6759950859
+13733,155205.00516593328
+7818,379319.385473096
+12505,230206.07285470955
+9489,193263.59785006187
+10106,192822.97399286894
+7864,189305.628718554
+5134,231534.76838280063
+11859,161250.25114228905
+7440,367585.7876784539
+1525,351257.0048634283
+7339,179883.37111775822
+8,341108.72936074116
+3248,101152.32515834742
+8995,254994.1428935806
+15178,70351.15333116043
+8594,159214.96068767927
+15770,243095.02450237356
+15859,361282.593369639
+1735,308175.08713161986
+11410,506943.4319024993
+16397,158817.5813642297
+3572,147963.84713715242
+5501,117761.32314173518
+969,177125.59523357332
+6977,488717.3128623483
+1233,190392.37159280607
+4258,168642.3565738543
+90,317590.49504260294
+16650,168701.22940939842
+197,113894.63199793018
+12514,267234.6991387885
+4367,186714.9208657855
+3199,182536.39372249073
+5600,201034.5486815826
+11641,206043.94228175038
+14609,116025.18150740294
+12775,152060.43389311802
+14240,163126.70078888393
+7933,194367.31268109137
+6945,383655.84341976815
+14006,206457.88817996607
+6320,275156.64995325
+12061,174927.12412996378
+16369,216671.18417170897
+16354,345328.9564568682
+3970,327045.3523593724
+1048,195947.32988389046
+3639,216009.10090508542
+14448,219005.9979455687
+2812,384908.230105045
+3932,148751.77038437375
+14875,351487.57262141636
+8883,118725.51681521788
+7622,335197.61591787566
+7252,114908.38114949968
+9751,177245.8810678591
+2378,196004.48387218354
+6816,240312.25828811442
+15358,212961.37785007988
+7843,165038.30188781206
+10448,391468.57778118306
+7840,323487.87213395844
+8880,217028.28557246958
+12551,370217.19626239996
+15470,189206.77580376918
+16207,205221.82562923786
+12123,120181.34493295528
+15247,402132.66150087496
+7481,217250.5093953205
+16171,348913.3136455486
+7461,324286.0710365386
+902,273192.6307640526
+13094,139749.53625884917
+11584,239443.8000533896
+4462,202533.0609932981
+15576,142932.4142945077
+16606,249583.6099855135
+5427,342201.9175147086
+7725,162234.62644760485
+5409,129978.38563234429
+12579,130971.06733481283
+12013,245555.74497827372
+11321,188873.8761801884
+9932,150654.13741008958
+591,149259.5947039872
+10357,198900.61977202934
+3336,245935.48949033738
+13,182717.38299293083
+4809,206225.37843066294
+7555,176894.35163673986
+15172,369596.5505519291
+6989,154888.97950876833
+4707,169555.35183596762
+2046,226593.99461912882
+6495,119575.84002689802
+3873,177027.103738479
+7061,196580.19940383243
+12112,211657.49265225185
+8917,286038.0426107592
+7735,151570.1196512573
+16442,216009.10090508542
+4244,166588.15871897727
+3747,237595.94711546117
+11086,181237.56398003778
+10080,205823.9894101983
+15057,283209.1846129055
+1331,183301.96129511457
+8891,163759.10660590365
+13411,224130.59832260155
+16730,229379.29702470373
+2267,186349.09308760497
+3022,196611.99952305577
+11190,217565.27010528606
+11857,174774.19896863724
+9318,164778.91236322414
+16512,189089.72821688076
+2053,219348.05245161837
+13707,132674.73694460542
+12143,167647.86860378922
+14080,156854.57940544834
+6130,185039.26706264375
+7936,80811.91968220167
+10101,175786.46388860221
+5663,209424.83284583973
+14811,123240.56121106884
+1366,180097.9713576978
+908,192597.11141160375
+2953,129173.57669334412
+14629,147703.52543015208
+15096,263170.73298431444
+2115,202374.82564956002
+11770,171708.82759050585
+12701,180669.3707686352
+14584,134992.611807875
+1893,397361.9362378108
+9501,500071.49582455715
+2138,102662.95865596646
+9346,202669.4588413036
+15960,373807.86619550415
+8230,156765.76685644273
+13843,197481.96876288825
+13810,236046.26121073376
+15650,182062.92924303227
+9974,125914.20020044464
+12200,193938.57101331162
+538,212054.71089246016
+5334,193119.5490283099
+14823,129288.58766607901
+4817,169200.48057498594
+9041,236990.88125798755
+4359,263149.5796464376
+4852,199868.32032349
+10141,134084.21314723892
+1503,186429.925202315
+16256,486093.0717260559
+683,104387.04802807918
+14382,192558.30822791738
+7248,208951.64903199353
+1200,171301.94077753258
+3563,182542.95771861047
+3681,392935.63705663366
+3053,256007.52183740924
+4099,208477.12344723326
+807,118561.94785005378
+4658,307824.4587544952
+3535,162263.6459517289
+12548,156400.00975645115
+10488,204204.6208003692
+5851,146060.5025968379
+13736,228811.92786036376
+875,159449.94893801707
+14449,154539.96154321873
+3958,372111.94543028245
+10727,186607.84811131403
+11296,129987.5692249696
+13646,231746.63059615943
+9599,207561.8789853222
+7135,243453.9857887908
+5943,312515.773917437
+2695,255412.98326597188
+6766,217371.1653041659
+5630,179955.33845498483
+13586,206973.5011668352
+3507,408194.47420007206
+10014,140837.87352763885
+459,256502.86581856752
+3582,228916.16816332206
+8560,247837.8698758493
+3372,185316.60412266693
+13109,261115.90791742015
+8160,233264.33959098486
+10706,217222.58077414805
+9104,301599.5381587183
+2870,217792.4712710646
+13712,173943.89583196075
+13924,130955.81889345468
+798,319121.23726290354
+9750,398848.81116305495
+16248,389095.7319597035
+3170,167461.70991072129
+12700,191736.60556380494
+10601,126371.28997486849
+514,204359.88304142316
+4010,316027.5093012944
+8124,155405.77352218088
+10800,170046.13318335745
+13628,199444.21699200006
+11637,137134.3140360487
+781,168588.58701258077
+16156,194666.92771974677
+12618,257785.70631267098
+9766,186581.13804649457
+15987,269850.4313550904
+11051,319057.7367898391
+7673,206456.48240546428
+1245,361147.56359109137
+2443,158713.55999404818
+7413,92803.22696431757
+310,144781.4115316224
+10921,215595.59255720742
+8709,98138.05154866216
+12404,354018.9236642464
+14986,209483.38341471858
+10714,310145.7465716298
+14286,223597.4687454751
+13828,362033.30905317195
+8926,414356.2403686143
+12233,178254.4532952123
+3913,197454.7648689484
+5221,186751.79016950034
+14965,91429.63242678708
+862,213474.31464218834
+13907,146648.68891050143
+5418,206936.1741990979
+2045,169083.1542196663
+13321,189294.64498240768
+2762,252092.3517433395
+13888,196134.47672073563
+14962,162782.99997839486
+13305,344431.8852370759
+8487,277354.4386440579
+7146,162732.1922793577
+1134,185273.06817290175
+15092,359897.36694505543
+13760,236523.49973356663
+11958,410157.3402815682
+3177,187502.6633507574
+11350,199726.8285749819
+1524,117853.51702760314
+5527,280303.11725899106
+2872,190278.56649994772
+8602,377166.29123583314
+3067,336943.11294167035
+10435,200689.25025038305
+11222,212189.87968839562
+8700,133878.30066754384
+10961,212830.40573348166
+14305,186432.2485854523
+8362,258261.72115055833
+4979,170602.07517607594
+7180,359848.10288349167
+5763,136100.98939804613
+2192,218844.18820070178
+13581,183150.9680666668
+10720,162846.115858843
+1358,245737.68052837512
+13366,362423.2028145751
+13539,364872.63069211424
+12849,186447.28652522483
+6794,181935.14126224307
+525,465782.9317971575
+12223,383188.14755337266
+16271,126383.30831724864
+5818,123021.89834706995
+16588,286105.0574726404
+8981,129928.12839846822
+16476,129540.19788508811
+14663,184849.73107347108
+3,135754.68176990282
+6615,133103.6307763894
+12215,269717.0185183503
+304,246036.07304376928
+13634,274250.99459283275
+9208,186190.1406920547
+2175,161961.32708562084
+250,213332.5954113328
+6045,192962.17265183484
+10516,168475.48171233197
+1852,454795.01881459967
+1573,208527.26556172443
+15079,158991.70228024892
+5500,175493.90190391568
+15775,168418.09911897898
+3198,154253.03342286442
+6718,192436.28045382877
+4149,174839.2168913936
+9627,268001.0652209963
+7595,307360.5343425131
+4538,187079.85896372446
+3555,179913.19332985746
+10483,362416.6580060489
+8834,181346.64167103084
+16412,184458.8653901781
+6449,146663.72475113967
+2767,179763.68149238467
+11498,152596.8698887236
+16472,144011.56509956208
+178,386701.12597392965
+10948,191019.99167283566
+13313,302692.586227509
+8065,158742.61808527916
+102,151864.91828348063
+14428,175547.10891918652
+11973,130887.91889318569
+6663,182959.15382952744
+15989,123324.37916847454
+10955,423944.7765292653
+11772,144293.92238648803
+11364,271454.9710510836
+7082,169634.874979925
+7749,484138.9208030285
+6428,136492.2636257115
+6869,104866.01390490159
+295,171804.2617119426
+12266,245557.3858098582
+11129,262931.02114006196
+826,358531.4690127317
+3262,239719.47265007786
+15641,354960.1600314999
+1662,466655.6406846006
+10926,214838.74923247867
+10232,232814.70459177313
+6376,191928.43373930882
+7817,185090.05292482724
+354,192987.17237065404
+10076,194513.72825051108
+11379,355928.20021060744
+10184,119703.63162637378
+4696,386654.14941778895
+13562,448597.9934385531
+5436,192958.28299402224
+13196,126921.18479994677
+14939,234295.77101416228
+14004,222960.08916051168
+5916,194218.75075454693
+7229,217821.02577332
+9143,152382.37694556167
+3440,188055.69147480183
+319,166125.86075038006
+11683,229569.23584882298
+12647,251027.56279544818
+12788,171533.74916018904
+13662,231967.41550485793
+423,276046.91940502095
+5222,215993.10369340066
+9242,194477.6419370088
+2641,188129.4014413629
+4855,175665.2256111015
+5360,210023.38129967113
+9799,141132.5132156609
+5526,244587.70869957758
+10309,155365.13914023153
+2144,438715.53358920006
+7191,189554.34165722484
+6732,161615.11781117343
+14789,146877.13203602764
+13525,149070.9275473408
+4066,292644.9483472509
+16422,194119.83613423142
+14890,181681.17002060462
+2922,224684.79508183195
+3601,139985.89585506415
+13416,121331.98681024698
+14363,190136.3615956797
+9496,289455.4974360311
+7115,338194.0723783411
+8615,166451.68460488756
+5218,63385.887756557175
+9493,194981.97675023458
+10623,196374.50632369224
+2272,136032.12332429521
+3352,323257.1323691892
+84,183014.67654475596
+8086,130103.89054172847
+2595,240674.6758396509
+3531,158441.65943460257
+7460,325911.8785027078
+9214,260386.45205252568
+2790,241105.13893560125
+10548,230085.73893824668
+9218,162199.88453601237
+7435,183321.70832043793
+15780,180180.27319925878
+7640,214984.621833992
+6223,202490.49856444623
+3425,118418.70809872175
+10582,152306.76510599884
+702,255446.2708781964
+2111,174378.5586070425
+11730,180667.69278750342
+9865,237741.6845224801
+16478,336854.0052814809
+1885,212593.357732316
+3956,374083.35801319516
+16735,134553.29373387533
+15264,196056.45098860664
+15971,156697.47377330755
+5584,210958.47300128717
+15242,203208.83879631024
+14358,183819.02258064743
+11300,229127.28205994074
+5446,185698.2711995851
+3934,168859.72830169857
+6610,161521.98881571123
+10164,239997.93046744927
+4646,191050.85417479908
+13304,184073.6159902316
+1985,193845.80767332859
+4746,137134.3140360487
+7963,197434.35661371096
+14083,272288.93215144967
+13140,310834.1426847322
+15023,258013.89286938158
+13093,229580.81816974233
+7160,189693.32826393007
+7407,193167.61037805423
+16056,187133.4410334407
+751,432262.31835245003
+6179,95478.73261093628
+9137,272828.96422396647
+10992,295840.12984266994
+5744,487427.3775036496
+10884,177098.0340687517
+12858,266727.66213997384
+13005,294262.61516323115
+16714,191952.62831634347
+1419,240475.1615228356
+6064,202545.50178794115
+3771,209291.81356066949
+5945,467653.84667616285
+8453,68236.99973556215
+3806,157744.13004887375
+16748,258198.52984796793
+11380,211801.517142569
+3107,191374.06025889178
+12003,195947.32988389046
+14567,291300.12463165115
+1079,200234.2923248672
+11705,135437.55750492596
+7814,200952.27593820842
+10174,151474.09893264322
+5514,241153.36640865376
+5265,246928.49171466497
+10520,349934.94829916884
+13195,215783.84179940168
+14601,389285.1665971311
+6012,161684.18145768315
+13079,163336.07057865508
+9009,130934.44297256855
+3122,181102.34260165552
+5470,242306.22149835364
+4840,166671.263879564
+6270,264580.46072274196
+9158,97921.35309922627
+10120,118867.98704745939
+10672,275978.05974459223
+4573,135519.02730721078
+12118,298037.5564266949
+7447,125935.02115535495
+2171,225353.56211964643
+6126,377909.19271249307
+2836,170499.93939935762
+1457,244929.98627687112
+11165,220411.34402819746
+5923,187141.20493158247
+1813,211776.0560066242
+3492,250310.4513080629
+1917,236345.25689218083
+965,431736.8036405528
+15795,145485.64341017316
+821,202140.71467505663
+4568,181404.6046824398
+9078,236692.5464124743
+11371,130103.89054172847
+5149,189165.94319640755
+281,205709.13634071412
+1918,249062.01057258068
+776,131772.6050359476
+210,207792.65403854157
+10782,172843.16050406013
+9653,184761.352732082
+9372,168490.87725794554
+5868,172477.1074275372
+6176,134467.01396933384
+3969,126794.05817115783
+7427,148181.6514473009
+8544,420175.0706448374
+5219,240180.69869489816
+16488,143023.07293982472
+5855,226623.03210847013
+15920,128555.56373912003
+4393,443268.53214408836
+5770,147706.37611551178
+2900,143071.1244404829
+8622,82786.13802062685
+11610,262703.59152546106
+10969,114012.41315706026
+11029,147248.24225121894
+6193,272530.339955358
+14087,467021.9731535615
+13623,170096.4978505946
+16689,171219.84768490194
+1027,226045.9211171321
+949,148247.34398006735
+672,124325.65120822558
+13832,147313.75582861083
+2471,201686.31849013627
+8728,295932.8131144759
+7742,217844.6444971891
+2698,210301.7792400336
+9084,166784.34276610377
+6075,283070.4146833255
+2874,170640.66956696365
+13119,144329.85103351527
+5010,200037.3933002306
+1284,179631.95840350178
+1151,163270.4495653587
+5110,405356.72456006875
+11386,155311.86268127785
+8019,198508.60229043022
+2859,135528.51170984533
+16110,167645.73810001957
+16027,244870.16197030403
+14902,184400.5537879489
+14301,206990.17183800403
+2451,218212.13436478752
+13596,112727.4651230564
+1464,139327.39304267228
+7927,427421.87487895053
+9638,234960.7480891965
+8009,268933.17081756575
+11903,154711.24101528552
+9243,116169.6770735929
+547,183660.18298822202
+5511,135772.28669765164
+11247,185021.38371481714
+15928,410096.70011590543
+3434,218580.89502600027
+7614,123869.21230778802
+1380,198924.41497851463
+2770,140796.6775785604
+111,182568.01078218504
+5994,112620.85592825126
+12341,201168.18339936942
+2787,261931.2132713174
+14410,313116.31618072605
+15983,132605.3661918955
+14876,170906.04038721928
+653,138282.24334184916
+2174,272263.0877460944
+2575,327339.2941614768
+7976,162214.20947046223
+5812,343667.77491140907
+13589,309803.6162147513
+9122,128726.18765880959
+8159,430918.82252150844
+8754,250098.5356314634
+9321,239034.36012704993
+13535,160487.5057535784
+2083,166485.15476097338
+2689,362671.7632101811
+2248,256959.3007969209
+11649,156502.03608538312
+11045,297911.9004663724
+1276,102789.52290348521
+5962,127755.3787335677
+13012,163351.51500775715
+4642,181495.46464924287
+179,163527.595384256
+15347,463805.45590708277
+3339,165289.1545482604
+8166,185010.37004809198
+11617,162828.31613318378
+52,333864.7090268894
+4395,208753.73069737872
+2183,204740.3597754218
+16045,166669.27289305296
+15719,170025.25019555137
+9864,196959.31213865976
+1903,454673.0304651165
+13451,175238.81489667794
+3640,165537.14583870798
+16551,184753.55304855728
+2343,155120.8122155396
+10528,196821.73689241137
+134,231292.76660354258
+13966,327136.9419071041
+2366,161237.30988996555
+1198,223569.01871843255
+12627,89783.8410486454
+11623,229138.71657087927
+8267,123477.20427683547
+56,273943.0936856783
+2988,268620.9384668542
+8843,247654.35760327824
+3043,246570.37826886712
+16486,373989.12068417104
+1241,173493.87816688904
+11180,297980.6579647739
+1984,183054.9383690597
+7364,144094.41612627078
+10769,135819.50388902077
+16617,231474.22349301074
+9007,316660.21847799385
+12953,393392.0632179933
+11366,170029.0695558184
+16483,185355.7743438552
+2326,202466.59634247306
+14195,126327.12269296967
+3484,227414.18817074082
+15257,181389.71018420506
+11920,261621.0947843349
+1359,185824.7797437761
+10353,161053.7665503923
+15614,132281.20720076433
+15101,244192.30448990336
+12755,309081.879750917
+6252,185928.15406571474
+7485,188136.3354833221
+12603,163433.61494675063
+5281,421237.2369369262
+10708,152556.44919764757
+12563,156378.21070859212
+4592,193546.48275539416
+3390,502927.4795483625
+1986,163726.17921192467
+5745,135136.7117895518
+14108,201061.54787415487
+9693,108420.29755604874
+669,151024.81409989798
+7320,266761.32866399706
+10258,141221.83207334168
+507,179226.43908943707
+10365,172847.14205530702
+9363,189273.05483027152
+8736,134744.71477340386
+15100,192922.31776459902
+13420,146034.35945637248
+13248,268487.5466611961
+1972,336499.81806404
+9258,215951.24559293044
+16455,286822.74988469324
+6150,214805.8168241867
+6283,197396.96508595502
+14979,234449.94238865864
+13935,214919.23293417646
+4985,150265.2389861039
+5393,114742.45488453927
+1730,144471.17490465983
+14129,198016.83454610483
+6254,191622.09934471868
+4173,388879.7588941268
+4910,264862.6752134694
+1297,173597.57653984168
+3366,132292.07608853435
+6044,342801.0816460817
+6259,137819.7083171827
+3852,143315.08073398698
+8723,213071.51830953747
+16109,215550.23541052043
+3721,196359.5347677976
+13453,266670.6128487724
+11962,218010.5920876767
+12998,142362.06388741863
+6886,205974.00816015198
+8200,308174.05752582574
+51,226996.83830840228
+3930,283559.76463568973
+6310,211604.73079275075
+6112,195947.32988389046
+5135,141535.10829676906
+7522,347690.28996566875
+9825,237880.68906675695
+2411,239093.2799042415
+14940,507548.6793017905
+15970,147357.80123470395
+9894,253483.9601261285
+2564,182442.77233559164
+7095,228639.0341790935
+16754,210304.67694117365
+16195,141024.09887034178
+1770,249083.11565685898
+5363,364495.4748041523
+11360,249565.72381451336
+13034,321231.61784781556
+6542,155769.16505302975
+15870,255984.3812417366
+217,253054.06400108425
+6490,315667.05011680344
+6692,333472.98373811896
+2235,159095.44646419334
+16732,246948.3364477145
+11499,191008.15863659614
+12617,210721.9886008585
+9060,275173.50805656234
+12017,152840.5183451886
+16750,163332.73624980418
+12230,146210.95243044212
+2158,167599.66277611555
+15184,135499.04779800642
+2981,186580.17806913643
+10281,195913.53195524428
+16596,194770.82510542672
+6976,429850.48560353747
+14680,160982.24829123146
+10618,174999.49740528467
+271,248612.75058104566
+10817,201564.49777400217
+1823,386747.95725648035
+9549,127726.42361336299
+1201,152077.07836463308
+2112,209776.88968384452
+2951,158229.8231225214
+7183,179533.77234642764
+11404,137011.42651154756
+5473,300595.592980219
+9232,264535.95793528756
+3033,271418.67129811435
+11002,172875.21021800383
+8299,238433.97712406234
+15417,194016.99771107128
+15612,252773.00530200815
+6168,173380.5820194464
+13751,219159.88076870076
+764,165325.11117577727
+12833,88848.03252136832
+2009,82854.94235589654
+1005,377320.0777175971
+10740,176507.14272139643
+15323,315329.3290915708
+9884,126076.569937404
+6185,270464.7258307425
+2311,168342.34680894704
+7538,448043.3089135535
+6256,198788.78124516364
+619,436582.0048747226
+1968,242365.3349233923
+10168,125788.1835656881
+10762,217653.68106522964
+12392,154091.57281275632
+8877,296899.13118375774
+2441,234552.70074415364
+4974,175516.76505509153
+12450,194205.4481203188
+15837,204348.10172942627
+5260,397856.87214369804
+6591,165097.73842707876
+11688,237195.98522269813
+9940,177484.59081613083
+12070,177983.86748468017
+12876,133015.0350329569
+6858,226470.8062965796
+2385,212322.3208292849
+3596,193228.58885638037
+13540,138142.0892800661
+2077,139498.3648073817
+5654,392589.5006558813
+14029,216869.62486647264
+16140,116510.75556668252
+13303,526698.1929783857
+7289,146099.01502857378
+15226,160882.70842859318
+3330,189918.88322783617
+15642,292599.5448117063
+16217,302426.07702734234
+7330,208916.98054862703
+3894,120007.06039348978
+6719,188701.6629247644
+13013,173901.7334374585
+15835,186109.2665422325
+10873,371767.6886018932
+16379,219706.85052389777
+10771,255345.95480082565
+13943,159456.014159111
+5139,248310.1533085517
+5309,203114.40422565394
+14227,377089.69644904026
+16292,201609.2715809871
+14968,219355.5851432749
+13277,204599.06994478227
+1731,94404.65675188511
+7286,150718.92969912247
+7455,187095.33592704608
+3250,210522.78517060733
+1659,183553.12924631246
+15806,278147.55773190636
+7491,235872.88153918638
+1990,206982.97640344928
+7769,376747.2465005829
+9694,231292.76660354258
+11961,227326.94929071094
+4669,207470.6492809863
+13826,336957.11724634044
+1691,207184.33542131388
+3986,129154.68641097721
+1407,165896.8201478458
+5517,169463.4583723567
+8432,186967.99398888065
+2214,175345.6097035819
+10449,172917.35138502103
+2941,193863.41435593425
+5944,175201.9258566007
+1555,257157.86043307005
+6105,153844.81405269218
+4453,237133.2170222863
+5892,238272.6207017979
+5000,288573.2255964471
+12995,186242.823855499
+8905,204506.67623435368
+11440,143077.11984929306
+419,264993.80325543834
+4712,162164.60621405623
+2094,154273.24134839463
+4567,178575.74810625805
+10717,176181.13928887405
+1248,392083.4515514517
+12405,184987.67957107737
+8331,461347.98148339713
+3113,161020.0428043248
+6926,278584.25055315654
+6777,463411.9607284059
+4060,175524.84543859065
+11547,243151.7226890738
+15199,143937.48424704937
+9282,183353.07719103573
+16123,241476.66016457506
+14094,185847.91179279867
+8770,274544.56674109795
+1054,313336.0684412657
+11363,187744.6158605649
+8756,125788.1835656881
+4800,159854.2321074634
+7620,103242.60650687065
+9101,177537.55824459167
+13954,235923.67820437736
+13600,371062.9117683583
+2893,195635.7476992056
+763,225425.72461121497
+5347,191243.40761727613
+12096,106798.33079927793
+16333,207476.11843943558
+16432,335034.16224902397
+3513,110288.78996837765
+13494,196972.6683661106
+8690,199521.96589572227
+7266,166612.94646561032
+3472,166575.6458587809
+7021,195024.0302036318
+12952,221651.95925081513
+2774,206902.9109583804
+607,200682.27644296293
+6897,207117.160137273
+8220,221210.13612109367
+8071,163344.72158443404
+7091,270034.25975824095
+1805,323796.9745238626
+3594,196054.41778734478
+13103,253243.03344641038
+2203,139447.2990074632
+12622,172361.58435291512
+13270,230485.63238226876
+9461,141904.53793322493
+7759,132128.38831095552
+4256,201211.03594724543
+9093,195459.31831825073
+6033,274479.7233306806
+7734,178895.07431644396
+12368,451049.5195382178
+11740,221797.19710767208
+9907,158106.0902520855
+12398,294007.5653771346
+6290,249532.61710307084
+2882,241648.70436040108
+5091,193229.01031117592
+7228,238272.6207017979
+5953,360541.7289819343
+5707,309320.5925730029
+10159,212690.89054772846
+7813,216552.1039113789
+6463,179977.08338293756
+7264,151562.72385096966
+5405,184078.93951761216
+7543,179009.77816940594
+13702,266934.1345908463
+5538,209941.08178348592
+6762,117047.67126713386
+9416,186316.0389372572
+10415,371242.4082871035
+2139,294543.7333509775
+13151,151432.8828271197
+10301,200356.84018951692
+13273,223161.1252200991
+7609,126606.6975381104
+4884,165459.6468410599
+3438,232352.92368086008
+2215,174428.1946366424
+1723,130583.46568187901
+2340,207654.9853784827
+3950,325222.79408479773
+7312,198140.39364292196
+3602,343958.7669660508
+12053,143378.6955796201
+16240,176451.73858234708
+8301,196580.19940383243
+14068,190807.49437385032
+6216,381916.8937058683
+12910,211918.80499898302
+7656,417827.9710721345
+7854,212442.53120679277
+14636,165662.47437049472
+12267,264681.1323963543
+11334,353331.6514839611
+9326,313902.42563631316
+5935,180115.81445718725
+16132,142520.53167360593
+8318,148467.2120944898
+5009,171491.0392592274
+3883,217308.68422385803
+7565,170239.70472540474
+7960,137260.27094712574
+16736,181731.0958740602
+15284,175530.84414125612
+4301,252134.57229353153
+4273,432543.0549891698
+8436,196573.37451778518
+2113,326654.9740668094
+8469,254345.91330247413
+648,210633.71048819498
+7526,196203.6666145742
+9656,209446.75229855336
+516,160343.12735954236
+6849,422569.3641227093
+7013,217384.6046067318
+13741,413729.32879539405
+13281,193458.25326309097
+12374,281384.7489407755
+11855,462386.6311055382
+2759,128101.49066752482
+6759,115980.06441464894
+1667,150512.11393696704
+5138,328773.18839637906
+2452,162394.27898701958
+13027,126759.14182881797
+2493,171279.24783711883
+9899,135813.1769873235
+8151,208895.64378301764
+5349,135400.45349422478
+3926,283654.6662452514
+6394,310366.7314575331
+11720,176282.03239533075
+578,196170.62268356493
+4001,167994.96440960525
+13504,199303.1244463229
+14836,315229.7950413131
+1741,163482.70713085745
+1278,194253.19715027534
+11890,197566.33004890612
+1803,231968.42935535617
+11418,198183.50639062538
+13693,206578.96136260527
+7321,223673.683322543
+12575,169497.4040411945
+6966,196260.5879909642
+16613,164907.6730960152
+3148,431721.4241830563
+8920,153040.036599027
+13984,419487.7577365518
+802,245748.473690104
+13893,180961.5765445068
+2495,155663.50055035762
+1695,165030.00102489936
+14995,291584.7012863674
+10890,239364.30854242996
+5282,297284.3629753056
+13487,230070.98732031835
+16615,334539.7726618468
+4545,377306.3430939932
+14032,135782.67339366264
+15707,310822.2832252558
+13931,187211.18343394628
+946,175770.09283117644
+11500,455747.1901565093
+10220,113834.88960377351
+2604,192717.30876609258
+10761,301644.06765234517
+10982,294527.57315772003
+11729,190730.97296299838
+8152,129886.5947028195
+5323,174579.12149030046
+9448,167087.67104898408
+14935,147883.56407637591
+385,271208.14942506567
+7039,298438.53194938984
+9366,202593.9130252249
+15823,234394.11576872223
+8993,178405.61288984714
+1282,167416.2141384558
+437,151097.98561447987
+11011,133755.66859553586
+10104,178359.2642248325
+16321,145269.61494536235
+11188,238021.62868719702
+14291,162395.83653278998
+7781,159256.69308156555
+1203,181930.6590933314
+3731,234432.46969436112
+9037,341472.20341279
+12937,143110.09480788064
+5196,199352.6155531918
+1746,190404.60920842752
+6345,127339.42427982324
+7950,293910.16293554055
+11552,208202.88572336687
+11950,87948.7152807497
+4805,394050.92117382976
+9152,291858.2847348682
+555,344706.46216925484
+6765,130467.92139608889
+8515,271408.1348945482
+13915,198847.25172801304
+16036,159361.99496956507
+16625,189151.0045911747
+11870,266070.9921981061
+3304,150287.19784015758
+9636,252426.12350852735
+5232,447313.38594045135
+8878,212524.18897467028
+2756,206396.743465277
+5140,144585.23101606232
+375,175524.0461727715
+7149,234333.69950664596
+16353,277111.2351874238
+15742,181173.69452816516
+5957,177403.03374540296
+12580,181221.92338164282
+10409,237064.8062391135
+13766,177070.15154196942
+7778,200707.0584305713
+9028,215696.07796351807
+14213,182855.60507554185
+12691,207837.72295830498
+1658,164154.40065938883
+15352,238437.30794023638
+10670,200275.91523345048
+14260,184164.2279141363
+8870,184180.75956024864
+12054,180464.08788410635
+9386,354386.72075986245
+14378,366059.33287475526
+2080,176964.78945642358
+12729,231341.69166622724
+932,126196.72124360657
+3149,232264.81379105142
+245,223399.53503006787
+6334,172221.92968918485
+11684,379494.52239723544
+5099,130971.06733481283
+1828,144819.75008218616
+13464,180212.38467657042
+4023,263731.89756782894
+6563,152926.32445287684
+13207,178980.06000142088
+14075,544486.4622855999
+5722,187706.11047769868
+2308,225771.17927995356
+8169,261665.23680772298
+3341,260175.7903779937
+7693,87978.27001392248
+2549,253168.2018347954
+11576,342032.5802522863
+8010,260887.41227461467
+605,273459.2044131725
+1580,277054.9927512834
+1588,360905.47711368196
+15197,188872.7803361185
+190,175622.05942403444
+12488,128181.36468548355
+12254,205658.12300318648
+3991,200165.10098741826
+5076,215524.5151899785
+3214,130089.43424188705
+2348,191304.6662702875
+13573,199157.8108347517
+14296,169590.72708759634
+4207,227756.9762378472
+6529,230497.8710099393
+16043,164725.2060380284
+2508,195913.53195524428
+12297,171526.07657726124
+10012,206883.50458069428
+1874,171989.04544241642
+8451,214573.82575304282
+16108,218972.80554221338
+7200,395082.21827184886
+859,456311.8002605767
+8415,238343.5717472625
+1649,77694.20198373611
+6269,369412.659770465
+8350,167899.7880230208
+10978,195947.32988389046
+16751,181753.7586419207
+10133,128496.61373907815
+11908,186933.3642431882
+15627,130980.56096059553
+14923,79629.21371574151
+3669,365848.92823040136
+8316,124029.25318382363
+5702,329797.466398301
+3480,181187.39360233588
+11965,187339.36211409952
+5869,121306.10373665244
+11147,291746.96569004655
+6505,169525.73813979173
+13797,331302.7037609339
+14915,187535.2579074178
+8221,165873.12452766878
+5873,159471.28664166757
+13900,230297.66602737395
+13804,287448.5148297529
+994,166493.59284583252
+2118,181918.80080005608
+15158,216460.85435145226
+9898,119367.25665178052
+3509,503704.69949896645
+10228,103053.80461318778
+12409,357170.11664018035
+9260,212716.47397243048
+11462,171262.9302947187
+3265,216955.3733578
+54,252732.41013959583
+9316,337686.64696731186
+16208,360742.3143549333
+16582,166339.09542296856
+6338,252264.174382753
+699,187634.8563956168
+3396,120028.09650908828
+13995,174257.4131789011
+8971,140938.13013488578
+6068,237800.480411894
+7020,186575.31384819988
+14015,175285.85515387263
+4172,233460.1193600737
+12959,436662.91965996387
+5659,186045.03626551433
+14766,124891.16899767114
+14402,175475.56195029913
+6611,164911.099781527
+3213,273408.7208636031
+13306,191442.74005895518
+5966,211371.16160703747
+3685,395628.57835578214
+10994,218677.11949196408
+13564,202807.02665393238
+6507,169239.4111347799
+3196,284806.1105346154
+1771,149993.42466760965
+13367,336283.82948616525
+1529,132082.73734990176
+11128,171139.14724781073
+11948,252942.51963918278
+3798,135131.72484798572
+11443,176887.93737730666
+15581,145776.54199119832
+15056,260686.3369180647
+5114,333763.2123288543
+12195,178423.74432289274
+2044,317581.43901998387
+13169,100408.4713525482
+15180,357838.76841394696
+15543,144527.718829388
+3770,146516.28285282155
+772,292876.0148683014
+990,172701.53718496521
+5567,211379.69852850257
+10805,285128.7048064492
+3951,256705.2191763199
+9484,180098.69811354319
+3867,307488.72159890056
+15605,204004.56004572866
+3805,276383.1096161449
+7254,257332.88583492284
+2179,223214.20202112236
+12745,193438.45245321825
+16545,241202.5723541447
+7310,217814.67737479843
+8539,159658.36972883707
+222,180237.5934100394
+14084,368453.14405868296
+15453,134116.67398494636
+12318,251878.7663113649
+7368,402250.17727631854
+4027,217918.55985893458
+4106,141782.76797340496
+506,193753.92442204955
+1995,238731.73422478157
+7165,230445.44058531625
+12615,168836.00830326206
+16792,181474.14430095724
+221,268361.61222149397
+9710,153938.0080636431
+4364,158526.25172625217
+3379,331132.25623248896
+8954,199880.25972684188
+16630,166567.59196147844
+9624,363697.326480774
+6967,261040.14346498338
+8070,201094.39390009118
+933,194063.10773159462
+8155,239098.94001085885
+6771,156084.26452884896
+16477,173184.2800328814
+675,230907.9528351175
+7201,182495.4866337571
+8254,173381.0698260892
+11325,188027.44372309785
+14018,160756.96307176616
+5190,368147.767430152
+5505,126470.84526938853
+2886,236727.98519929618
+6941,93222.72295857925
+2668,174294.06808238613
+13831,175388.54918289612
+11036,260823.95194594387
+13691,107190.39141209878
+2007,242105.42497806612
+6442,142849.16945781122
+10010,204097.19007848875
+3259,243477.30380806403
+14013,184024.56678296687
+2261,467977.07261098275
+4110,211636.56200637357
+13293,120904.20693722003
+14931,233206.01760490212
+12293,153334.82310420525
+16398,284030.33139325044
+7132,166553.49226240627
+2780,185921.46893970922
+5700,216111.25558012168
+8186,193965.82023390115
+7031,128174.62103974484
+11269,431707.5100383212
+632,136731.72232216308
+6330,355648.29025046394
+10905,175431.06398967849
+6313,228199.94009357155
+13396,186270.887359679
+13414,193034.68534189372
+4270,155440.70266941292
+926,147470.82157059902
+11452,72712.65501074234
+16228,426196.8352203763
+1781,219258.37613951866
+16492,194373.91277883874
+14594,177678.8080682655
+4485,190117.3197539626
+8306,188500.30428029544
+2071,185771.97271306213
+9895,220502.57892444258
+10544,203140.1669149779
+11253,373130.0807085378
+15213,287866.9962664337
+2990,141735.60698962802
+4518,298641.0021976818
+2766,154983.44013926954
+3275,232421.680022732
+14971,175249.35875900957
+14863,121268.5552156641
+1352,190344.75535563473
+3423,157209.90274940082
+13021,234608.52265960502
+10489,155181.41554172517
+12055,180757.47063924174
+13089,72113.08059696897
+16275,241465.6142035929
+4272,162646.15026965976
+3204,210793.82189592806
+863,301846.27095535456
+3289,121631.37285947835
+9557,238731.1815958613
+14381,207902.3880730376
+15208,427921.59071231674
+8030,258918.79092500304
+8080,138533.4185043798
+9876,271244.2573296761
+5571,259465.67848092355
+5439,223811.202153823
+10689,177191.74264099743
+9919,178694.45829938838
+7348,274852.81024486996
+11686,246849.1524533594
+16643,371162.0238395657
+164,125651.27415184576
+15912,263531.03379634843
+14237,190640.64604388038
+7965,242775.31850594678
+9778,150489.58093011158
+14321,136949.68776313748
+10617,172712.91525765826
+12007,156584.60862520017
+1415,110694.33147747416
+12912,312328.62654123845
+12062,303762.7680542324
+7762,206964.3680303237
+4381,447626.2323115454
+7986,164542.9348180269
+10647,240390.27226705858
+13452,184568.21621644823
+230,264181.63205822156
+9285,241858.6911347688
+4221,373887.16468212986
+16384,169938.62603085375
+14645,210513.95284646805
+778,156315.91421764082
+6633,251778.2880655703
+15137,115216.33185627375
+62,180409.02912973685
+10606,381083.3977392134
+7791,116284.90027888966
+4161,176392.8843489102
+5553,257337.48180452143
+9433,86620.93457937859
+7363,216897.21601382442
+10162,194707.96166188028
+9568,195074.34057253363
+9901,208469.68323549925
+8047,153983.99990769938
+12954,145796.5020336097
+12479,186478.34970513263
+3357,312950.2863394626
+15088,173975.9560832817
+163,272733.40531951474
+988,248997.9697365479
+5877,281490.1109625122
+1683,213526.94239363945
+5206,182974.39899189235
+11155,170362.30900738138
+15339,197139.94323651376
+1590,210839.0548648761
+11100,171749.3455882093
+11216,183259.82935538932
+1624,217221.0990591092
+6113,243916.00557976417
+2181,335190.49411485007
+1023,269262.2442433011
+8673,129538.22117045835
+1646,330299.80247968127
+11608,111282.08281844293
+5988,175319.11799445344
+14354,234930.16599731156
+6369,121398.75150971803
+15936,215783.84179940168
+13240,379626.49281296297
+3481,153026.3442167724
+3479,242978.57254968202
+1698,338245.8960194068
+13154,251251.48917776797
+7802,182129.13565401649
+9702,175239.88147017366
+12895,304714.8031209966
+5728,162220.55969079988
+10793,232508.44668306902
+13529,187548.35031430036
+746,173999.60278475287
+2610,167032.71181407
+10932,169468.465765503
+15350,268969.0721234375
+15692,178077.1561426698
+5484,173415.4448513593
+15608,202035.91012464315
+5253,267313.1524550527
+1686,258874.30801900607
+10624,433812.1727518753
+267,147833.35372377196
+3295,321382.27377740893
+9481,318874.52618846606
+732,230040.9206208449
+10022,397275.9125093517
+6135,305161.2743113062
+7224,242823.0482357739
+14887,199143.004857678
+7382,198327.0171282352
+3242,129657.8281560936
+3106,199806.82930446925
+14678,186694.10251080297
+6626,199114.56627794568
+6576,198473.03479921524
+9008,198557.09082987884
+2931,298053.7773798218
+10023,176067.65329416323
+14964,151143.95962343566
+796,270237.08403397654
+5169,91337.00608117257
+1814,136373.70661077462
+7372,210673.3460606891
+13672,165276.94580625
+4124,200739.1100134098
+1095,151066.95317399225
+15950,77330.61640207183
+817,415381.60927345615
+15779,129451.05111330698
+11506,228769.83710076043
+8689,331914.96050986816
+10077,239824.2759943772
+10514,211243.1477034232
+2198,507418.22051649593
+8005,188929.90689587078
+625,318129.23477210227
+9420,178442.56002960316
+10350,188500.2766126056
+14494,182054.8131389464
+11615,294883.33403527265
+93,346873.13860736316
+950,225091.47488879465
+3325,167273.89533140903
+14459,137852.10162187982
+16531,210409.55032811267
+11228,199114.56627794568
+11761,215150.9722794597
+12629,214851.59046314206
+10339,234651.06544985098
+12203,129886.5947028195
+16744,205503.43438720203
+2786,194044.452929395
+316,111914.4873679275
+11424,186255.52782619235
+8021,131504.8628379091
+12679,523046.9513251337
+1871,157794.19077465974
+5767,207425.68212709538
+4047,273712.61260657106
+16235,229465.4497114591
+10604,231716.47593315158
+1510,254104.81810893863
+854,165970.25027247684
+1860,178274.76384911145
+1593,203492.71807204344
+381,181935.14126224307
+10375,180822.60205706133
+15149,233228.11801316414
+11375,182219.14833707287
+3912,139562.89714556854
+12097,369781.0141953299
+16743,229946.8453491205
+146,246415.63927692216
+5308,131538.00468340446
+4125,187119.0661924933
+7671,387495.7392196777
+12609,120197.62613354808
+4353,175327.42069034072
+6287,183470.35816626376
+2264,302935.6960765557
+3457,147632.55648454875
+12935,127581.81256143372
+8958,184962.5601278314
+4532,162604.28756625496
+14857,216396.43664113997
+11376,199562.06245535347
+13713,211354.43549863397
+181,240196.49194908512
+10858,124934.70369872006
+5160,204860.7492131666
+6642,186128.48476292592
+9312,476605.2171653366
+7736,196147.64911857253
+4326,223770.67646735877
+1802,180242.22652958476
+16115,175807.53095292626
+16787,286270.1187661169
+7107,153947.01006161456
+6902,159194.64506677992
+8950,323525.51981245866
+9922,185479.53361090753
+11453,283798.7418692092
+10033,208419.36437473923
+12131,390757.13184272347
+11879,257247.89287226644
+8986,149952.04973476275
+82,183036.7549567147
+7664,174700.47901043206
+11116,297505.76676044526
+14096,168290.39977203924
+11577,216976.11863655277
+1908,167528.0440247626
+3658,172143.61566211804
+6148,179831.338149245
+1324,203655.1404683037
+8792,269496.77107685036
+5883,367667.8042427684
+15245,270400.64428776567
+16382,135522.34503515906
+2131,197422.4879545213
+7581,267627.4728234609
+11488,391540.1925425743
+6091,276991.84937714617
+7295,200881.96277095974
+6427,172079.26508720964
+4558,90878.24038965181
+14436,192645.56700947328
+8373,248222.31613232056
+917,329166.16544591944
+9837,384803.58248031343
+5619,147389.9554856325
+4530,181326.15607087166
+11486,200897.88685260966
+8575,172269.87863713442
+3540,411075.62087631796
+4509,318103.6023899444
+4709,158093.31529465664
+10148,264855.42483183194
+11077,214632.9312706909
+609,146723.96435325986
+14733,213246.31478811728
+10609,145179.9919812369
+3616,147953.6007319778
+8805,246430.3822906996
+13799,212285.37952024894
+5886,261365.67047146664
+15836,142227.44093810717
+11792,147714.02321413995
+9404,266144.93376670236
+6456,168146.60847837952
+2569,126138.57880624167
+16727,255015.9096270008
+12353,178060.26837251356
+9841,234615.35323357687
+2725,191304.36885972394
+3388,244954.9060306066
+9476,185034.54926644368
+13550,113964.86652949011
+11934,242145.44246648173
+3375,178040.70716475544
+2932,297486.7192115529
+9972,210420.16740247025
+876,171352.97706502595
+13649,203281.04619146688
+13444,366721.6802247959
+12748,216319.2869994122
+2003,178484.0252945921
+2376,218998.30576146557
+15961,181769.3917194247
+1221,248125.73747937815
+7064,285797.77137189393
+7799,152436.77393604338
+4549,459930.11464961787
+11061,173978.63944954594
+2132,390179.0528923828
+10692,169820.6744961714
+14546,286144.1845321917
+11088,209438.30584902278
+4819,296045.28068803373
+13682,145602.49484952126
+7127,431811.02128735
+6245,158007.23475053214
+10845,150777.3471286126
+3285,131581.01233489416
+11384,212068.58840065956
+10897,184740.5942614782
+8533,116848.42816569432
+15341,244830.7726718999
+3821,148540.0723100457
+14130,164170.9575527986
+4306,417079.54194133455
+113,172743.00029344787
+14997,181102.34260165552
+1482,224153.2423672358
+14780,356136.1993071105
+997,235137.805535281
+7991,172366.05045214153
+15592,173024.29086115598
+11143,211695.06584032747
+12472,159908.29917071786
+13991,267731.205392414
+13399,399434.9521132077
+2588,349945.5696387511
+14274,362215.8738468807
+11491,330233.4802739458
+4755,169920.77901332924
+7939,143703.20402840961
+1779,167963.60677521766
+11924,179568.5191828082
+12713,220981.68835417292
+12486,410835.6502560448
+13149,257594.13085257405
+4847,218401.5113574309
+7638,358637.19015933084
+15228,284679.21790119336
+10069,219570.75939435835
+2219,354511.49098396424
+956,281556.0019116998
+13680,134305.0316574431
+106,212856.15785849266
+13101,91622.41864561696
+7540,270257.71375051665
+16138,373764.09512846515
+4890,282214.6967436091
+13752,265437.032739869
+14622,185127.5357220357
+7871,172962.3128931815
+3957,232817.17663467277
+9987,243292.49288807408
+8884,171841.16600424785
+11715,263701.5796983387
+10612,180883.23079793382
+12945,185653.47253033487
+5034,203703.26762061802
+4463,379550.71884729643
+3476,218735.98860596502
+4846,240566.66885381492
+2372,194840.06983480003
+2873,216063.16078867004
+512,195024.0302036318
+16198,203408.90800700983
+9155,302208.3327254259
+16464,88213.62230254049
+6904,176643.59138438295
+3151,178912.14830634618
+1816,148158.2954794669
+16214,428339.93353163823
+6264,307785.70041437953
+254,216324.19271797567
+5848,142006.56716161434
+4357,171672.25622759893
+14265,139777.76218715514
+12235,159849.5522483419
+11342,119003.41314822179
+6679,226372.67874044378
+5377,228467.15470176
+7636,147814.01904407088
+12798,154587.32377784513
+16349,207109.46107220737
+3028,139601.39422087272
+12810,406674.147521837
+15064,159681.57929855256
+13801,115187.20878232038
+13387,227671.7226728111
+371,207296.62042757188
+1161,128731.23810161366
+14593,151713.2783946643
+12144,185528.06036860068
+5555,440001.259633679
+13493,159914.72560856858
+11130,280542.33057731437
+8658,130104.13910207598
+6491,211591.96503036187
+303,197862.24534741297
+1897,189000.22607472524
+9583,123103.55357728306
+4515,144534.56605641232
+1411,170846.92492095704
+8534,133162.84329621072
+7227,204287.3574185484
+13478,185115.25730617985
+7546,284259.0530600485
+2798,101670.46315981877
+10267,403323.4353902399
+4519,132619.2387440909
+12184,205854.54644467172
+1895,348988.17120781983
+13019,357239.1553207897
+8845,200661.4720549079
+1929,271823.39658104477
+1966,140488.8480660396
+5268,99818.04394624615
+11402,142538.39374679586
+13503,185911.598334776
+14413,172030.456424964
+15419,142257.01211858488
+11573,110008.05852357787
+270,165289.1545482604
+9733,174860.63367224592
+2729,198346.77525622063
+10123,250770.7083743294
+9331,214765.0643432463
+4342,148860.6094628412
+4248,289157.38063398405
+446,202943.80023574864
+6677,200132.341478023
+8324,248883.9265391709
+9666,374471.2830612021
+7303,177819.8624438967
+2710,320200.6489450991
+3334,169426.25916965815
+11464,325889.2100802487
+12220,405852.92306063016
+14064,184046.30972747528
+14350,171999.46172056487
+2858,272456.7301380136
+13014,402952.91351095657
+13732,175573.9136588669
+3371,311916.3456167612
+5912,237260.57327152725
+5881,182355.81649509878
+6199,287542.7871812827
+7344,185067.6944767303
+6180,180719.85017884476
+3343,204786.65705036174
+12103,177543.5226578206
+5177,176785.79812504468
+7000,185836.73998085153
+3990,202844.17139580267
+11689,142111.04609455157
+5624,168161.36408328306
+7497,99769.7189205454
+618,150826.42841791693
+6909,199822.57674545067
+3346,140885.64090370128
+12521,162877.37925884803
+11871,378318.2681034149
+10610,168557.76142709446
+14869,154663.0107483642
+2268,116036.638015335
+12058,143898.40292652659
+12426,197532.09613956904
+10662,142429.16603272216
+12512,116753.03725770836
+14852,187981.34194591953
+10876,153790.8187674404
+7720,179602.7303626492
+4334,84378.37450861132
+12275,306045.79518765595
+12228,515243.9653539382
+3715,199926.3164621199
+9534,233829.00984360228
+2333,152811.77123585567
+15628,151314.05535221047
+5043,176159.34913613452
+16704,450672.7557183968
+2891,214413.37438570827
+14478,170900.00604211542
+4429,180702.39715426834
+5929,137542.83453557684
+1845,152245.94629038818
+3001,155158.17780757224
+6741,151752.93019167669
+2202,152621.06578584266
+15490,213040.48931905904
+3752,202444.2320971854
+4620,195611.05754110563
+12795,227052.01325372956
+2662,136764.97560689543
+12845,183553.47803996995
+5604,269991.4101614143
+4861,145292.1837008297
+8100,251666.3486218483
+15990,244362.67795547404
+6561,152551.13761900406
+14107,124378.85195515423
+6274,125276.77814139034
+4428,122577.23360545594
+3184,196013.20443572383
+9247,245074.9536689796
+15016,191100.2216642981
+6009,191189.80557546284
+3190,188893.96465159414
+3386,158779.0228174462
+11984,179572.44640429405
+16215,176284.78545208674
+5506,240686.91852762425
+10016,182905.44008560161
+15394,273158.57689348597
+15724,320333.89840475
+9409,143632.91307369224
+12634,173125.11192435405
+14316,173435.31064967235
+8675,170370.9392353854
+15231,166233.234957661
+3236,169806.0345454673
+10087,236510.32665389965
+5018,162255.0728313304
+2728,160955.2716512954
+8092,189758.10672216697
+10698,174745.3244648549
+5859,165652.0804409902
+4198,89284.2512807036
+861,186186.20034940285
+7990,379358.0487588772
+4009,197619.8415445559
+10964,137481.34878993983
+2114,293793.2722025718
+1139,184854.6611559143
+13921,191382.29611475705
+15030,124248.28435377376
+2122,130641.58193556171
+1602,254239.289481913
+15032,430920.9447188898
+5694,110588.02809164731
+14026,212578.38098374417
+1132,191658.63963278924
+15469,289300.1251808391
+10223,183063.28372001814
+3303,228102.5098809548
+12655,268867.85761481593
+16151,147134.37507742297
+14649,173056.81244316138
+9533,182671.08739587956
+2229,144538.67989245337
+7652,246227.7806445763
+14523,199822.57674545067
+12991,192443.2177280862
+4539,177020.32768535506
+395,154708.67652485915
+4853,261596.16666223796
+12082,162354.88581891073
+1406,262744.41871961195
+7788,201048.29754933648
+2143,142006.56716161434
+11089,126138.57880624167
+16693,150967.89222302992
+14701,143855.46755801653
+13689,194758.90003907142
+4262,213074.87851196353
+1046,197104.43226677607
+12001,362134.5650943713
+10729,209435.16927883308
+11822,260941.9477409202
+9132,309700.8599575954
+14150,207002.62811363678
+15217,172197.16027294064
+4752,181366.9569691594
+5875,163255.48890692333
+7873,272354.1879209035
+16046,150918.458133414
+321,241403.0170360879
+15077,324308.3199993768
+9148,247072.46439710498
+10272,247976.6921377157
+9490,168163.25002104364
+5856,195315.75828942575
+2436,165459.74905796486
+526,201674.2618543083
+9067,138715.24022425828
+1166,276036.56269253057
+13029,217128.3572538631
+8264,316645.76986834774
+13499,274974.06310295395
+14681,218934.78146244003
+10625,359554.8572627214
+13668,268311.29769993084
+4126,231161.28577251278
+1527,156209.32371289787
+12829,190352.81590064554
+6074,98885.02906323344
+16629,175593.86350933916
+3231,386438.12266050634
+6218,140307.3761776915
+15050,249972.06339432212
+16053,493800.72461834847
+16745,155975.42656094482
+11336,72883.97812875018
+1318,250369.79069091164
+7424,147831.5549409106
+8102,171458.2096265952
+5468,186578.98089281103
+9942,337792.80775710114
+1001,224207.61039242084
+6010,290110.52984685
+7766,174566.37197025807
+10266,170550.11428501917
+3139,402181.7671820207
+4759,189256.90130790943
+6760,200268.43576135972
+5682,313558.70261911454
+1648,239276.6525155022
+10363,169786.70876639077
+7551,128766.37853062217
+12901,156151.07072029472
+7938,283080.8346027977
+15709,449071.8228017743
+9663,224852.1052262142
+14868,222827.1210821637
+7617,311040.46231617616
+5755,377968.58686854655
+11519,446970.2309414833
+6954,173797.0965957791
+7463,354074.68299604167
+138,213764.0660532415
+1499,219695.45850734547
+14579,191663.9098956597
+30,159025.5002088951
+6991,270770.56558391196
+16283,149151.34700682483
+15305,387469.58409989707
+12736,264174.7498809226
+1506,442744.06505671685
+4302,144801.9614930788
+8170,231779.56660325936
+14230,185569.02284825817
+14438,260705.55278270584
+15974,185721.1572444128
+3263,177542.16162912076
+11227,159871.74992579623
+9355,121257.00155376592
+326,151097.98561447987
+13155,175418.02388419557
+13238,338290.6346477689
+2785,337374.7268698972
+7047,204542.86025099005
+4222,230258.7268958024
+14734,112183.08713880517
+4224,130665.96244402611
+11259,140796.6775785604
+6174,120885.68905837693
+14057,172244.1447523765
+5181,161901.84048472522
+5926,249458.0673164012
+193,216164.03012760647
+12528,159449.5921559189
+5128,387462.1755993478
+13462,227329.04940159895
+5845,159690.0363839453
+6872,261697.42118049497
+8821,229079.726548066
+5106,172412.02757134562
+8164,287711.89547100704
+5679,237707.3271746642
+2985,135237.8423079911
+2106,198272.7527255957
+12494,344010.3610068076
+15150,156048.573299751
+187,189920.51725150124
+15095,210486.302179817
+15289,145017.65921338077
+497,175321.42378364073
+10048,140616.4793678353
+15012,136510.73691771866
+11229,175157.85577850274
+15927,191334.01393945536
+12092,178814.2734313947
+11174,199114.56627794568
+13967,178540.88883213702
+6693,201807.0149442412
+92,281433.94155813986
+13961,128429.72521930908
+16220,445472.5442583596
+13333,216260.0018488753
+7730,157875.0921318835
+15250,146133.7700741288
+16392,184787.04437008203
+14544,188488.8436528398
+7261,223153.11802028524
+16105,205328.77494857108
+2984,142597.60037872632
+3162,226556.75334212588
+2260,189940.40399273788
+7004,369139.28091135126
+452,188999.79824849978
+7828,403877.58163680916
+626,200927.31744139135
+4583,281696.7646548258
+3725,118968.799973048
+5894,204006.85702993124
+3316,189062.43325248017
+6887,161156.59030518465
+2492,274238.18797773554
+9133,200908.78475339245
+15655,182229.33059363416
+12639,211449.4165572491
+3848,90779.3369405955
+11820,171671.49062365692
+15254,201486.41947481985
+10750,96430.51491030966
+1156,300066.2382330137
+2910,166142.08287656822
+8591,261654.63688041773
+14247,219282.52858862025
+1425,153067.8217245048
+16660,152513.9379736111
+1837,176493.83085284647
+6461,188876.6314190711
+2580,177667.6738491079
+1052,140418.741414848
+577,283807.53986579087
+2825,279601.52540629223
+2746,428278.22113512066
+2291,363103.70617713715
+10962,254326.91668221084
+8547,214271.9939238561
+10019,176848.0666925892
+756,317296.7487878323
+1709,369371.24759000674
+9076,328516.92991313763
+3211,156247.24616546274
+2535,153304.99623089793
+10943,244651.9438731396
+4830,153491.93058140881
+9928,143029.09680828953
+16143,219269.40236109748
+16784,230895.3871162715
+16434,240402.58740096109
+436,181277.53420931747
+1226,273043.59943854663
+1259,368945.85433500796
+15299,146868.87769174256
+4343,147685.04267889675
+14661,172720.91473531225
+1988,195129.88238863394
+10173,154486.75560860877
+11746,213034.984369795
+8412,181364.9486912998
+9281,148778.75726993676
+6246,191017.1070933266
+5440,173358.96477491187
+15301,207062.23895494192
+1223,223785.72203680518
+2714,328279.40408296103
+3077,98350.60661476423
+5549,215345.97745559603
+16626,321504.79786721594
+382,160239.66675319782
+5635,69937.52376073615
+186,243466.78939156543
+4839,126470.84526938853
+433,246906.67264499993
+7210,155384.48316995657
+15243,297866.0565346635
+9993,228958.61832238693
+7529,130262.92987124076
+14506,149392.51123915045
+5807,201935.67984432404
+2373,216813.92646157282
+13618,89957.67512435847
+9908,190855.3668253829
+5404,202075.8230412602
+11023,196162.20281498134
+9678,193815.90141580137
+6160,227203.4916006748
+4181,149365.96208809232
+4230,179802.87257722524
+13858,145633.0224746085
+15871,310934.1547244162
+7564,407736.11181669636
+14463,444334.0497349394
+15115,228328.5231627731
+7533,154853.29799072273
+9862,167412.63143848418
+5708,331073.97828862874
+272,204627.26999572985
+4612,199612.12772543624
+13336,195646.03010265785
+13944,185671.05842506612
+3517,237826.79617665723
+422,313043.5565198522
+12769,150890.7539921766
+16079,272671.1806241064
+4398,210965.1105718202
+8250,136171.14913538346
+8900,172038.00526212857
+10819,209693.97719508558
+10551,151746.64479999818
+3418,337297.6570486033
+3889,157203.24258985126
+1186,185844.54428998416
+15227,480670.83454902685
+13432,423174.08439344214
+10654,356038.6914138431
+7306,162214.20947046223
+16325,267277.8740521302
+7510,269807.57299472345
+7237,133935.9095681612
+11812,418391.07272619766
+7823,200011.7988502194
+10691,244317.25597729086
+12699,83285.22842770345
+914,201525.9610951117
+12160,217322.13446682526
+4600,257776.67257270304
+5649,144739.69929314932
+4896,192832.07089557374
+800,244025.68372050626
+10111,189556.37457509976
+3690,201440.93112562608
+10150,375855.2846943438
+8099,139303.53229359208
+9526,212975.47306834525
+7301,333902.1103053854
+655,108671.6105959541
+6187,414215.8369049493
+839,223683.35351951598
+10505,144292.9469946023
+3830,129329.02881912602
+11301,135554.75988314362
+11895,181806.56404810713
+3102,134629.77285499065
+12351,125419.28024873933
+15378,477580.7319161451
+9593,275553.1803523965
+5302,143229.09025337556
+7585,412214.33223593596
+6785,183901.17906094846
+3611,235134.95276061396
+15888,156120.12864344558
+13152,218965.69141647348
+6208,192116.31382044242
+13734,149254.46239738638
+9212,319149.79136656894
+6098,241073.80329791585
+12314,227949.77668521748
+8848,208249.6770466249
+8951,160438.70429580196
+13572,162851.53876798213
+15907,307809.2033900488
+12325,199114.56627794568
+14000,326181.972133535
+9515,166538.0976540269
+4514,236020.28504088384
+11968,380134.17352167406
+12452,188857.12275478215
+2163,262140.10088754247
+14538,172546.61477533556
+11324,183557.95247887404
+10441,167151.057614526
+1952,177421.84072941326
+11680,161878.33302168
+16190,274886.94099202263
+7649,196022.5110427925
+5839,133784.95102922374
+4659,170020.84526944853
+2273,376174.3695298286
+1829,139398.42766985207
+3776,241487.87448938895
+6607,137245.42957679366
+10395,138104.95724170527
+10667,357327.10747967305
+10950,218709.02484741993
+6339,160468.46312272077
+12038,287496.4102956779
+16128,173242.02526953586
+9406,274837.69575971866
+13386,180491.85016290337
+13063,210671.43651204035
+7319,136894.06749836175
+11475,144473.117656517
+4109,179172.46323925673
+466,180497.19265603292
+7169,138648.33234836804
+450,161516.34261995272
+509,263678.71258525236
+14114,210789.31674517528
+10865,164428.6113148432
+3497,186833.21515449043
+9089,199287.34592733538
+13675,203471.60522846383
+6672,211177.99956612877
+5464,211038.99844453207
+16267,178266.0011376668
+6372,432271.43320115516
+4499,232492.34322661257
+16547,196106.4169955343
+11454,430682.0072882122
+16645,400394.78088766034
+9569,192974.1875778985
+3279,259105.83984180755
+12042,199644.1237039494
+2547,174632.19406978783
+16013,247690.6500131033
+12929,201053.2771880257
+12343,251324.24230305606
+10359,194315.38132873943
+12543,193227.32056602568
+14928,449337.7391043159
+11319,214053.78759745962
+14724,203559.42660616303
+2850,213747.2421163183
+10775,302597.2634532079
+8462,188540.5716105051
+4724,226979.45063026837
+6723,178685.94314932683
+14180,234862.77703117137
+5593,370884.8997904293
+9151,403891.3683119948
+8697,468297.8643152078
+10758,475539.0029891467
+4276,220016.20665034046
+13655,317151.579751434
+13674,206024.3044545434
+10057,127972.8329597435
+10732,168946.6462769484
+160,181648.05449217258
+7451,174818.86565679856
+3512,374793.5626684296
+3925,163390.45681665654
+14897,144112.43552094922
+15963,227824.00736613365
+13805,110855.31517800076
+6894,135024.2714333477
+14327,174214.30071478352
+11838,146480.71122401644
+12255,157063.73564140717
+6587,187561.32188853077
+6923,165874.33165953043
+8885,136282.66548771967
+10486,132545.76769568372
+4722,487824.68735452753
+14740,204158.41317417723
+4754,157597.74497574868
+8674,201735.0015613376
+13252,180436.70030003268
+1905,173896.82551636035
+8585,206009.76184913793
+11503,174999.49740528467
+8979,216121.85457458743
+3879,294533.0559009375
+5165,199191.5109875218
+4200,189022.77631704553
+15206,142615.02503540416
+927,180963.31403679072
+13132,179427.07344064093
+8640,305032.85968764336
+14157,195024.0302036318
+2991,444182.4115567658
+15401,222075.13417822056
+16356,186272.60732359643
+10857,120749.74128918287
+5651,152436.76764378854
+14405,197260.33018754717
+9176,350048.08400969073
+16326,146273.04793176925
+10397,176364.50571797285
+14371,167388.01830599122
+10577,124814.13278293009
+10605,271439.3208921054
+8441,191981.39658094634
+9546,115032.76877390279
+15433,259842.637714613
+14106,196353.12771827204
+13791,216406.70846614885
+123,197119.51867851574
+6786,184464.61515052925
+4618,129599.38811820745
+6750,179055.01425690952
+2188,171776.7511867558
+4729,236609.26988082906
+11082,137496.2314745259
+947,276856.02439190797
+1066,170083.58608045767
+13916,320584.1352151157
+13134,355664.27975730394
+15755,157622.60042225407
+14683,244227.55260236087
+5590,191939.23487312015
+11704,262363.84120638116
+11544,156252.7617972193
+9457,158206.7236157192
+336,236665.4639823381
+8667,352889.4999933898
+9989,407330.72763195063
+3786,92334.38321591643
+1467,404561.9046792628
+15239,252279.65122315532
+6380,245232.36798475066
+15200,415711.0366987839
+10378,264749.98936523526
+9867,210638.94322337204
+12443,208969.43661789023
+15298,313207.9313094163
+9136,176130.5728173571
+6713,289138.7637132761
+15472,222071.80254928148
+4064,175795.85201688774
+13576,266844.15662110795
+10634,327921.489396434
+13257,124133.40280565666
+14535,220926.53464134876
+13262,324701.78007876396
+13852,123123.35076065181
+3238,185127.15868440166
+2029,210150.32671565056
+1542,273937.5972467335
+5796,176920.126476003
+6273,191489.00817980937
+8207,89358.18640505736
+13913,155469.88636097984
+14113,108218.4298291429
+11094,165253.74327570508
+3598,402949.4732281082
+11881,152639.80711489264
+4186,343896.1010780712
+105,294316.9001992146
+12712,195389.80373995224
+10699,208822.84538415427
+1522,117845.04864723329
+6406,165448.76755254378
+2600,261216.6251298042
+12800,213078.53846559563
+14794,156835.04110197845
+832,160783.59830677795
+11005,190469.33726243462
+1329,192319.90875738754
+9621,117689.54680066927
+3543,191713.03294817006
+1234,204002.28586711566
+14715,268750.5540118153
+13218,204577.19739362798
+12522,118828.19960489111
+15168,218568.6397998944
+3344,159658.36972883707
+7989,160373.2765776157
+13592,389957.9494706682
+2349,95888.19138547359
+87,72986.69278204959
+3648,163922.0356783901
+15383,186073.19794327937
+4245,146894.28212461388
+3037,346197.5039323537
+4963,232592.68065107876
+12513,193997.15478981019
+11906,427247.98264047044
+6321,260079.61470841567
+15889,175106.9673949501
+16390,207972.82007393532
+11080,237639.7511818559
+4201,105334.70624369704
+3696,195785.79695782348
+15188,347579.597380435
+1475,341756.1443763363
+15248,461752.6038128316
+5836,195379.04401835648
+621,353924.22461646306
+15618,127169.55649996764
+11070,492360.0161872698
+5126,334620.02159761573
+3191,241873.86257252737
+4786,235324.47402382884
+6620,246994.8452232701
+9169,187384.07576546556
+15908,205689.84958531093
+5512,135314.4112110505
+16496,187709.75066673904
+4052,357668.0251416736
+1158,195615.60202552058
+5860,157396.58758879936
+907,193405.27219914907
+10880,303436.65203708113
+2406,340280.33012314193
+16135,212716.65105037653
+16655,246297.1745725697
+15009,153962.36223833542
+9075,147393.34077679834
+15211,259406.45826279235
+11972,164040.22962075213
+7343,167365.65428646264
+10693,237417.85276288533
+16611,140651.60807361355
+11189,130046.68811661724
+14873,196719.72099819666
+2863,206454.5501392808
+1616,137236.8804277961
+6932,110217.2517272928
+10136,141024.09887034178
+430,194796.70612154764
+2978,222887.10064150975
+9667,169251.37015001656
+1215,133495.889142135
+8651,137361.83888306198
+11529,153731.47152599317
+14115,186147.5257648306
+13842,105194.03737088197
+12668,214611.59864193352
+11298,189297.34883068156
+14801,197560.4096339976
+12346,255424.4304867386
+7741,189472.3060681548
+9160,170381.71834846947
+4285,207976.41521997875
+1738,242306.22149835364
+16527,195518.22245894224
+11797,113886.15535816431
+11537,136503.18981751858
+11661,148291.61275966204
+16296,286105.0574726404
+9835,185065.40167964314
+11551,194211.0817029585
+7868,451587.0576678996
+6828,147866.0550630681
+4870,152347.68106580994
+14037,197511.08449121952
+10255,228037.57160271067
+13980,142362.0862766672
+12720,167342.02839703322
+4391,127044.2395025406
+15559,172153.4978181984
+11971,283748.96528626344
+1294,212572.7211402262
+4639,213906.04736458522
+10815,230716.66777362485
+12270,254782.52298329415
+9322,277041.78295371507
+14633,164380.87322479373
+3733,200882.32724146947
+9311,165730.20817201238
+14855,319196.37510496174
+13819,150721.94487648434
+912,354751.7746384779
+13565,114458.60664572901
+5546,232581.161560805
+14337,226840.50436504083
+5902,171862.40233901952
+3939,172474.64612342327
+12958,190022.6574894785
+6810,166404.94218097642
+6464,317008.9921247488
+15753,240686.80261817604
+8295,195685.2427637253
+4190,141570.50885596455
+13160,174766.95519078837
+11609,281564.16864897945
+6477,141136.6616331651
+7833,152214.19110403006
+8088,237639.7511818559
+7090,190109.92210538164
+4818,201208.7123643755
+3010,230129.248433282
+2954,237884.07301770794
+16552,181209.77930548094
+563,199263.95994774945
+13208,275134.93077164295
+12886,125011.72147509624
+9235,145902.17394677817
+2397,242374.13915727395
+3059,211752.67318236944
+8245,189815.7170290249
+11636,206977.04091174222
+694,219658.3755015131
+7222,196328.24405876856
+13986,323671.3501049045
+6083,104045.0490229912
+9782,167389.75541769742
+13060,204423.8806034417
+6144,295241.70622110995
+15637,216360.54587611748
+987,388032.4361684712
+10696,276162.59175870614
+5319,141373.69764167236
+16119,395242.5109316761
+8198,146772.83238569752
+14721,236655.33570064817
+4704,205034.18265432827
+8806,337259.67229363177
+14764,144739.9105074642
+14233,125011.72147509624
+14252,264269.0935603366
+9139,121137.304423668
+9297,287917.66559828253
+8288,247013.2309153743
+4879,326321.8544896804
+6384,177659.16191197242
+7438,187914.76606346777
+116,219043.3229817252
+364,163264.84426391748
+2690,157179.53511189533
+2193,411690.6784974171
+1228,186365.6490642184
+7607,233482.9937210044
+6378,154972.0007393111
+16520,193681.8149346017
+7737,231234.54756864093
+15652,163071.1537493549
+15578,177183.57198987447
+10823,131972.49667195353
+11027,130382.66268335926
+7076,203161.07726236962
+6451,238395.34527812363
+15589,181740.42850615652
+9532,168563.03272629605
+4148,208738.23708125277
+1222,295730.4241774077
+8066,179374.4499571999
+2227,141893.95152936561
+8814,297210.0943984474
+7121,177763.7795672403
+8265,122705.19644236451
+2848,180441.106104435
+7971,176538.3267796318
+15812,293011.05545669765
+2238,202815.8107044085
+11569,216267.8531116135
+13631,155028.47092127474
+13209,190694.71225963082
+5448,189021.87078196998
+5974,390404.2875562226
+10379,170932.693851571
+13829,162687.58420570538
+7552,427376.28135633306
+11205,163702.80178548678
+12787,175331.68325053895
+12773,401615.7939551924
+1501,318797.8714280442
+3650,196966.7203095389
+14850,230215.04957974574
+8174,83120.56978933667
+5565,175946.74424840487
+11832,175640.70353949835
+15866,158975.2167829911
+8742,104902.22620222306
+5271,147758.37886068856
+11697,250120.24693085073
+13516,182217.1149919952
+6408,171162.8760368804
+15545,200400.68772844586
+11148,128536.8711819871
+1585,284922.10920755053
+4609,173317.1845657951
+3174,371314.76789885515
+13784,237253.24090022518
+7889,104277.69821066862
+9385,335158.9469058914
+4058,333049.11336941336
+6783,187944.7172860068
+14676,142257.01211858488
+3284,145460.74383625342
+4988,175040.49239429933
+13369,180534.11229501298
+10107,228873.0360371331
+11456,164797.81653286132
+5837,403725.1763085763
+2637,166392.6472435024
+10785,380634.4856609474
+109,390112.40972641046
+5968,74113.27874738062
+976,138326.3840037445
+882,132626.7764868724
+624,162911.68556910838
+11904,319146.44775086816
+15314,113007.9130549004
+6579,87088.94158420121
+9199,144308.03136915315
+12611,134502.22721522884
+2898,179653.90283627866
+8461,210264.10637490224
+15020,190847.84120279696
+5652,109293.30486439508
+14262,226439.80924565464
+10156,370157.3595802704
+4461,172100.14410593614
+16666,391504.51988351333
+15818,183330.5572274366
+4940,209346.96323288878
+9403,185732.75726534377
+13638,327067.25341245433
+6918,235065.18813307225
+16307,183524.49892358747
+4133,107917.84378473675
+12316,424666.4468564634
+1655,282387.019605867
+9398,176848.98433286033
+4271,233330.97928765815
+7584,273047.8528616833
+16502,461733.07979941025
+7732,173874.89478947784
+14812,319195.6696532337
+5083,254722.54740236656
+4385,262753.29205530003
+4024,188575.39575637324
+5925,122918.02905525321
+5603,272152.0848563138
+9172,251356.5149324371
+9485,236083.58198165527
+337,167148.64999802184
+9767,187122.31697634337
+8228,216373.96915017968
+14346,176885.5361740744
+8946,187158.64456562093
+11285,332908.14464199665
+10588,347120.0425889017
+16737,194421.39419988863
+2262,347477.9539908164
+12102,210492.3937909542
+9851,155037.84138636512
+941,236769.61322508552
+10571,339139.4798559687
+11487,251532.4028654808
+12137,474706.5294611272
+10549,123962.89861238745
+11359,125370.33026457249
+7724,172979.32881550587
+6877,128966.08864341825
+12946,135427.94429711503
+10555,231575.85425070004
+2733,142168.67998510363
+734,227069.04018005944
+4572,140665.929128247
+9888,363999.05869408965
+5547,248381.1202568572
+9473,139900.28220157573
+10427,280637.0844083613
+12081,219300.2456007279
+10888,385246.89718524256
+4834,192821.347251844
+7141,139486.2328852528
+3282,129321.26687949062
+10028,398939.4886582951
+13941,141867.91530699297
+3897,174235.5801416603
+3838,144131.42205467264
+15315,140329.67897770848
+4623,342694.73020211654
+1119,211484.6096790095
+6031,216878.4737091402
+8516,127162.8113156848
+9415,151114.3989714855
+10798,115568.53079577882
+13666,126874.73160085737
+11068,328713.4505761497
+1489,170638.84720046024
+9467,307119.89135443355
+1946,280105.703922552
+6511,165036.75155698255
+306,186703.36780193678
+2837,337940.5577606295
+9949,174586.64851387034
+12571,272704.97069014004
+9991,215256.03854198864
+10974,203058.27942934024
+5102,227207.25703757032
+15565,139160.74631052927
+8320,198134.66632215292
+4205,238492.87505550688
+14341,278595.2748574816
+12738,465373.09091280174
+7959,104962.60118427605
+15526,314481.3881141584
+9391,210344.1356985201
+13904,142006.56716161434
+5423,199110.85243981064
+7852,183216.33369386417
+16525,82110.45162614736
+3823,187673.03549196696
+1858,196388.86710512382
+8638,386949.4158646727
+5777,186480.8724979599
+10277,187313.64464727594
+8002,293490.70725505985
+11877,192740.04839639566
+3964,188291.80183158236
+16783,323049.1514943976
+9896,197104.08668667212
+1733,145571.43232569072
+12470,242680.06532080626
+12569,267340.12104490725
+744,161963.9103331286
+13608,221808.6729644889
+3980,230990.46318340782
+13468,153737.87069522103
+15482,341413.2180018419
+4135,170855.59658823954
+8982,504015.325100733
+1928,211539.82653230175
+12408,198222.87360392665
+2316,83730.49395199955
+3340,168189.9132483802
+7512,128431.55408960322
+10170,239368.61449044585
+2558,140837.87352763885
+16236,182333.8061812759
+9115,94852.80735106918
+11183,385983.36543958104
+6603,268434.2670366512
+8548,387788.5237918967
+13883,187245.31390838246
+10766,241573.86631499077
+9575,268317.28477480175
+12048,162845.45139217385
+928,196123.88722099504
+3068,236431.93671917153
+7603,180486.03554534182
+12725,167642.72770636066
+14089,163325.19579957728
+13055,171882.58311845778
+16602,185273.06817290175
+2797,253892.4668142487
+7467,124186.54764580716
+651,195271.92714616636
+16374,184689.07676759662
+16544,174899.4097581646
+3098,172810.01257086318
+3015,212493.63313270194
+13224,202417.76986587388
+11299,196231.0883220764
+14583,128574.12306771192
+4033,139447.2990074632
+12076,264102.92375574337
+15017,181379.35730303772
+13881,253093.76466489572
+13000,175239.88147017366
+676,228269.9339016805
+6331,417955.7793721931
+7681,238710.8636092428
+1435,284902.00377992605
+2966,237449.03711341266
+5825,239430.99960217313
+5422,390778.61221508804
+1663,163853.9033038312
+15561,150750.5959057982
+10062,262598.62232077576
+6476,174283.86569888203
+1957,170799.82834977366
+10795,173754.95860998475
+16197,111270.89577488766
+14421,242869.8846543063
+12994,190427.96934073613
+3493,179111.62430968642
+11545,150413.01365545634
+6726,144186.53551086143
+9513,209391.39258388075
+12556,121062.90970422108
+9553,161769.02659937664
+3734,377288.3938323165
+3109,283434.95534294244
+16319,193031.75277193845
+5959,216482.06429612622
+6683,241153.36640865376
+9438,159425.67917240484
+15857,254562.80752539416
+2421,279318.84034575504
+11540,219205.2029457887
+264,229760.15157988272
+16561,234785.0924932249
+12288,216317.77203911386
+9570,185592.56865424913
+5936,162706.90369881468
+11390,120614.6645178859
+6551,192283.55544846025
+3946,221873.39202961553
+7746,201753.3373108067
+2838,158870.5093823647
+2472,199189.7072255087
+3520,193318.66887129738
+1341,324414.2710579234
+3910,351264.69975886494
+5208,144906.76443690667
+12599,186871.02709426108
+2475,228973.57791708567
+10966,177102.49159585242
+5910,237236.66821130837
+11910,196821.08371673038
+16221,122820.25216490928
+10591,171045.35077830995
+3744,209688.32880956138
+6618,376388.29788514174
+8676,466023.21581846237
+11193,180549.37894278707
+12659,238272.6207017979
+14101,187591.39382307458
+14483,159096.23707780917
+8107,257721.74904711338
+10681,180089.8845869396
+10126,210721.46929002504
+4527,269785.85625258146
+16537,206243.33364470527
+15403,165292.1469503493
+11124,307279.2300253593
+7468,161229.39010518524
+3172,168260.85184383983
+15847,154301.08097012577
+8211,498432.83183111437
+9459,230456.6337247685
+5903,251535.79692874165
+7232,163907.28674385505
+3180,179601.62319759262
+7147,383536.44736180385
+10105,173241.51644666278
+7338,123500.5332857147
+2446,223573.13069350892
+6466,133979.55787182625
+5782,141257.92039927206
+6526,114857.54096057336
+14982,215932.26992755916
+14639,225161.64288302462
+16052,227466.58463560505
+12587,173315.44662278955
+13192,93991.20037133587
+9342,259170.99843006968
+6052,126970.407929712
+7987,201111.5864464943
+12165,336862.3449735549
+15151,419945.5507540205
+16728,171298.9219513274
+12735,196736.09519439915
+939,166133.3268399211
+10983,159963.30385224076
+1385,149064.3877643806
+1892,172668.97729110962
+8352,119607.55765155163
+79,163997.3050485772
+7171,188452.0787392653
+6194,212475.14169702277
+6973,160471.3021838122
+13786,165164.13402833752
+2578,281798.01844775863
+11344,161171.0476107732
+14536,235596.70725952083
+13518,221970.53615217112
+15855,344704.39635928534
+4387,267674.3872639021
+1596,251014.30204173192
+4699,387095.587206285
+4559,406355.32016380783
+6613,231934.54432376084
+7489,134553.916556409
+2127,253780.13493779703
+16668,431410.6131257382
+5919,107469.62360594777
+7696,161278.19137201205
+12287,245599.9866710191
+1053,230116.16821100158
+7924,232078.5359875265
+16365,297577.9425059707
+13988,394320.24677177664
+7415,224241.6535354712
+6661,140955.54922232224
+14496,172706.36492651506
+15112,152782.76710894075
+16444,159722.63701302648
+8992,236006.10684983403
+11054,348233.8438060736
+3570,152870.7885857945
+11016,75455.73925885993
+10455,148133.0155829271
+10478,208540.05092851043
+7751,177636.9725825397
+7913,407008.52624138515
+4883,186031.77291200252
+12728,407088.86323399836
+11482,174187.2092291162
+12561,149124.3901429182
+2207,237042.05726491462
+11946,144149.04039356072
+10552,248131.05700216527
+14673,140867.38308333437
+6914,160849.61019197828
+15988,138516.03298002976
+3878,180963.35463483343
+13937,181173.69452816516
+11208,207917.22048451123
+3466,110427.68233899851
+2799,180217.3815979822
+13802,251447.35670999004
+15790,129529.86271501209
+845,294397.29870592
+13261,212584.45845357733
+9986,188010.5303094188
+4771,272472.54360785376
+11763,393855.685007183
+13249,510137.97355057375
+15982,212294.76422877522
+5295,159896.56893335158
+2828,279771.0352233485
+12717,246067.91286824504
+14541,141444.33526815203
+12898,145894.87280456594
+15190,393566.9086046409
+13553,247813.04779591662
+11589,267921.03116781916
+13168,193658.02995326617
+14224,178101.4701969045
+11844,207723.54744057832
+14578,155011.72024706664
+6770,252040.88727189077
+1003,131538.00468340446
+6716,155938.2940539253
+6204,371081.1967371878
+10213,279086.4115795126
+2961,186468.1985836164
+14134,177476.64068466023
+9134,176785.18389361654
+9906,290769.49363376916
+12114,201162.4527857858
+12706,162858.98516451463
+192,230390.46796044678
+11022,180328.923369745
+14712,281922.0338689323
+2659,449379.8283198735
+7602,195947.32988389046
+3009,122898.95234583189
+4533,478630.26889495394
+5620,171919.56429282695
+12312,154654.22181419373
+10896,167695.62461487338
+7532,155924.9170773304
+5696,436437.7616398804
+10743,417858.7545120604
+16708,179334.41401629953
+5430,162610.75602697104
+4362,181827.33782549563
+15599,172770.0559164074
+8197,148262.00712580563
+8502,79285.7660856475
+554,120997.0263442137
+16301,164082.88993710798
+6206,407839.3610366571
+10523,216788.87819657524
+7221,202288.37267030773
+5906,187595.31518474207
+6724,164846.6670313914
+9167,213293.6441756739
+10380,219947.32329396435
+6209,142580.17280254958
+14298,125360.10161443402
+6854,180223.68589864642
+15218,182054.8131389464
+5081,174833.11071998146
+14572,213048.00831402134
+7743,202168.9409148536
+11071,228111.8664491475
+10673,154018.07212202656
+16276,351796.34910577437
+2840,202673.8731298686
+14414,420762.4362079792
+15739,242002.22197780345
+4743,172484.3421244147
+3156,306883.2753710279
+14879,184151.5420375997
+758,137395.41911576613
+14304,177072.0407060108
+1210,360653.6209123677
+1137,160793.6344395445
+6026,200456.08224859272
+841,161175.0451620716
+3993,130222.81650804839
+16554,322289.02785553347
+27,152241.3463916659
+13015,193237.7446993461
+9428,153160.94098795636
+6885,172363.75668272696
+2410,172876.20089898564
+743,272464.72038880666
+9361,306369.4371542376
+14016,186798.27328000794
+5040,408146.4145898687
+14255,164286.09267927357
+291,230599.70145623622
+3937,196248.47154546255
+13374,287935.48756759305
+14948,206935.69628182892
+37,127169.29566715221
+8226,262288.1726689601
+9547,144468.12492257645
+1000,262355.36606332846
+12406,148707.34176146518
+8314,227598.50950675344
+960,155272.81257732975
+31,205374.17648475742
+5905,127969.55114511414
+15833,293955.4219689941
+8146,238272.6207017979
+16718,131613.4985505789
+2231,174609.41375533325
+11286,196966.8705767199
+8275,150995.34497902734
+16706,526952.6129816503
+6594,122878.93018466442
+15521,317150.1672009012
+1131,237116.5918298248
+9595,179279.74609554827
+8354,201984.78368384883
+15777,117475.95737175245
+2330,223266.6054020781
+13382,212531.07587924314
+16721,92901.33338031854
+11393,184347.3702334746
+7009,209159.55112817156
+1474,164053.07420674988
+5816,152926.86592631944
+16032,230731.2977528393
+3422,255787.23603571593
+7231,172906.02770630168
+1565,143805.67994806787
+10574,132857.7105528809
+1107,165802.77108498343
+1458,147480.43594076048
+12716,527131.7511712498
+14039,158067.190776492
+7099,272832.6310241776
+4498,320748.0121006275
+16394,89048.42202253322
+8760,173188.76100092186
+5016,131504.8628379091
+1097,93072.43492532759
+5433,182689.3795018283
+7847,207726.48878224182
+2903,371483.4493872199
+15929,214961.64477034006
+9066,406753.9194893529
+16152,239367.61443073634
+12383,294268.262854021
+7591,282300.5300791293
+15435,120931.87989459927
+1556,263368.2912983537
+10644,238770.5933786636
+5333,167683.55514038604
+4266,196304.54902367984
+7946,233392.7648722129
+15594,178078.33227239578
+12127,201914.37123605772
+7697,458441.09249588515
+10020,185041.92013284215
+8999,285165.2298348083
+15708,163638.76340029662
+510,221079.7095221874
+7239,134546.0453338592
+414,321330.5801410496
+9095,163358.51224602136
+6136,193223.30172715624
+12482,207972.31211397474
+1254,142862.3049436046
+12989,212277.00972311533
+2923,439959.8930886781
+13845,132362.28595491115
+11169,174900.89095592537
+3031,420770.0146237519
+12704,276619.0747648972
+3430,162837.1940976042
+4483,140086.02433676654
+1438,163796.57497640178
+7790,144897.4679432956
+10260,173874.89478947784
+8340,193233.19903208403
+11099,135875.00311520524
+4392,163325.19579957728
+1551,195913.53195524428
+6566,243751.04875563964
+12689,137843.14966760384
+16117,191118.24107756664
+2800,350913.3887436017
+7779,239436.8582669576
+4546,185333.71495068446
+16734,228269.67684555575
+2506,146099.01502857378
+12457,160148.3660461895
+14626,125805.677504674
+9816,186150.4680810523
+5055,173915.05243560576
+13894,176189.8485067714
+2676,182487.07927127206
+13860,222043.40918687943
+3029,191512.84735642135
+5048,263009.9808620882
+12857,148980.13008089204
+15813,155046.33613971886
+9973,154094.65192182796
+6664,279969.77078782703
+2764,227633.88761717395
+10746,121963.44855712882
+1068,300186.83731576864
+6797,240877.72072864376
+384,145632.79224157397
+16012,85431.3245018397
+10891,294037.01527283
+1110,129173.57669334412
+10284,380447.56437441515
+15508,186101.7311939485
+6000,74879.57853996656
+15275,210860.68762492662
+5312,115949.13200946305
+391,152926.32445287684
+10154,163772.5851975447
+7256,190712.55559125956
+7947,176392.8843489102
+4097,208448.17256415237
+1526,339778.34681634395
+16261,238707.0223287807
+8470,153214.69604792312
+3270,223620.57050361694
+11212,259186.28957180018
+1261,194508.0588086817
+13456,124864.71303962336
+3862,199336.9223749691
+13241,197652.93179244702
+8526,253297.19528033154
+5013,271120.5713555987
+10205,392589.5006558813
+1346,235198.40041851896
+12977,247737.19864825677
+10073,157028.2011895574
+9623,215138.94687258036
+10590,197929.36433153407
+2773,233773.7085019993
+4444,285214.4783461066
+442,175331.6656931009
+8376,224459.52355122557
+13461,236382.36102206013
+13229,170692.32074541727
+8718,189792.34068392887
+12847,171860.93890335562
+12117,235178.45117770394
+14510,154366.48644715306
+9254,284420.91273908055
+16290,232621.24792783856
+3936,217926.88161649092
+12526,183845.72437439827
+7302,230704.71786323396
+3268,215829.81548310065
+13230,257242.48012797395
+12695,195597.73111255988
+14761,268378.13359150774
+15771,251182.7965256442
+12598,244578.10943410042
+15357,157086.9755215638
+9874,114267.86053994809
+7582,199189.7072255087
+16604,497737.01759480586
+2023,152400.72040360153
+13932,159849.5522483419
+13300,111489.093540971
+14040,204244.3249121748
+12612,181639.25969088858
+14843,324515.6397373618
+5242,164678.47428339257
+1343,139486.2328852528
+14576,196597.6498052328
+6257,127280.17566936278
+25,179843.04496405853
+11043,198486.80847192777
+5047,85458.89505789561
+16080,243286.63492743392
+2161,248131.64949546632
+2444,206272.42848549457
+5459,244056.97916569022
+9033,137096.85434986834
+11539,233563.8501004857
+14256,206793.43422146625
+9219,280431.304709593
+13840,294777.9170298094
+4848,209293.98059820992
+227,166487.47547787757
+6238,181649.43357850634
+15530,154085.59548736154
+594,142370.4287236354
+14505,111711.35068093917
+11748,233615.53701401298
+13771,150535.37668619133
+5778,198285.01456776232
+9820,114164.67913564522
+14066,203583.41301315787
+8498,218749.4113687975
+6058,249237.1290609025
+13661,191878.9863891504
+7992,184483.87656029742
+10264,107618.34852856137
+6924,175298.14991445493
+9183,173577.05021428826
+13325,221577.43787527012
+10467,85514.65857904039
+998,232559.85049158765
+3700,198380.7597052837
+5094,236639.23264532816
+11643,150373.8363865322
+8496,176992.00870335381
+16487,140722.41070386974
+7810,239719.17199655966
+15418,173153.1719639038
+16355,207580.1981980558
+3194,179277.93355663295
+9278,219014.5483775824
+2707,150565.27739286728
+5688,384767.0129946719
+7883,200908.78475339245
+5250,314497.9147823065
+12794,224626.31408101573
+15958,327219.2157466516
+68,244092.21446014935
+9505,193018.7568616273
+4162,200400.9058924648
+14730,154345.70173933794
+14671,401175.77673930826
+13981,265802.9536545448
+4445,255241.0810199964
+15067,159969.6549687284
+444,217114.2597961253
+1613,231249.86891329655
+8509,411362.9217831765
+877,135488.48868825912
+5170,273123.2751736645
+9846,353724.8286395421
+5915,172948.41036509274
+12459,241166.40892279815
+11318,211663.57733243212
+16009,221532.68072471704
+14466,317736.53080625396
+7896,189382.50860234696
+11280,187048.02916129102
+15529,274225.7948355249
+3859,352559.34631541895
+16193,178473.92890020096
+8796,138052.7370546011
+13010,172200.68833231647
+8672,134455.64318214456
+16756,124997.83496834816
+6929,320473.8829792952
+6288,265941.51403404097
+2842,201780.66396013746
+13446,446176.49940693146
+10235,158068.05462570713
+7654,209371.52071765586
+15967,299487.94243217394
+8048,185926.15473997686
+4253,296975.3125319862
+8004,265060.12274568615
+1397,371265.63475048257
+4799,318711.3340205515
+8558,155055.3256285577
+6060,267333.5928199663
+5608,186335.12446893868
+10515,227308.3071903115
+8931,246458.74351843612
+2396,225515.91750349294
+4022,153339.4240294484
+12471,271840.7688523246
+1711,209096.92378628996
+11430,184902.53128631684
+9829,215294.25281739052
+4425,186400.11603626056
+9803,390431.8182479402
+4651,364815.1765508656
+2189,370635.2941412742
+6368,271142.35420104925
+6568,222181.14209216723
+13827,87518.20437992411
+4375,391700.7545362664
+5622,200971.3251175544
+10559,109584.851048244
+10985,408764.756438428
+159,347423.1917525092
+9038,196580.19940383243
+9382,410095.2096908877
+11998,229515.8471251149
+5184,282997.8699177491
+10542,157326.791591007
+3537,81147.79789742181
+13475,154579.53703154682
+15536,341589.731536387
+6948,231826.20468125687
+2888,257277.1389882542
+2830,239962.43664095213
+12064,175400.54856295988
+8922,235082.1104862488
+16427,183531.39976445388
+14051,112249.48419385789
+3251,349595.99423996435
+14202,149591.2951678049
+13756,132449.97287072556
+1421,134499.56063577754
+14187,207244.15311153256
+10166,238693.75799753243
+4923,112261.41718591221
+11570,205195.86800255507
+9844,159667.51699576687
+918,160082.81845795905
+8919,260438.58697092612
+8818,153077.56421490767
+2949,207996.45249966875
+2423,126394.00571219275
+15361,176683.52435302784
+13254,111346.90095235863
+9692,242589.79148278412
+7271,322272.55121136224
+2017,270154.2263419161
+4036,146448.47812237678
+11373,212687.57599134606
+13377,275725.6061660752
+9977,197170.3558192712
+7410,161436.87340889685
+11817,233572.5340675078
+2573,173176.0173108163
+6543,207583.60647108528
+8819,193344.38263100252
+312,122119.40452279613
+14517,187587.00559720557
+15090,233181.80425137657
+10789,173991.79491305383
+1910,198323.27332034212
+14652,177353.9550009894
+13121,215019.6949929414
+5125,233805.65274995082
+1959,203600.71119581515
+12034,275238.9481840956
+15595,104602.90315404773
+6153,147837.79055172065
+4053,197876.0426799875
+10877,263893.1243639937
+4529,178766.22911140483
+10158,200883.1496474811
+9236,195762.81717498097
+5299,317491.05302937306
+13059,214878.8521770297
+11152,257785.70631267098
+11914,356214.48272665485
+2442,374995.3992457709
+7044,167492.5559104746
+5893,180732.04991233937
+5035,127050.20028901381
+979,330312.2094003671
+3409,181935.14126224307
+6675,208028.97750630343
+11650,263107.257518608
+5611,136344.5494274214
+5956,175246.47020840624
+16435,202970.5193917045
+14599,164100.03796716483
+4215,180502.804101769
+8873,164006.63367423633
+14918,306127.9619427336
+10011,156083.60393743872
+11446,201505.16671412077
+1535,168289.19766719005
+14241,212821.64416581983
+9543,195293.76566744735
+10979,195678.63109322113
+14215,331782.91116974415
+12365,191206.01010519481
+6681,185501.74443808076
+2924,219005.9979455687
+6445,257769.96277507723
+12032,195280.6624353023
+10702,190862.5369449525
+2974,151474.09893264322
+3877,178395.99187331632
+15147,165090.37816954096
+15984,236894.2251305756
+2324,377717.9509353192
+7499,216496.5256237929
+3801,371185.2044203798
+4284,259839.23782566102
+9329,185980.79995576918
+3120,325465.2053729438
+2531,149742.9690492977
+13762,141470.74304758082
+3691,165782.7947016406
+8058,219027.22537969102
+4897,175827.3402026074
+14925,198842.5006981096
+4330,152125.73845244377
+5453,187911.9971645936
+6559,237274.82719065514
+425,374217.1610757491
+14024,169442.03219152984
+10413,162759.93818956995
+15294,182020.63227458025
+2821,261365.67047146664
+11509,120335.53488001667
+9074,159658.36972883707
+16091,294032.8857941188
+3642,189260.9453035366
+16124,189929.78608555964
+16449,168453.69396387556
+8684,182568.01078218504
+2392,291933.3522476552
+12234,245995.0512483512
+14199,117262.61392580374
+834,333374.57385340467
+1484,180732.04991233937
+15653,131953.01647075504
+11663,166798.72220058544
+15397,386343.9000626928
+11385,197104.08668667212
+10151,181997.27530463564
+13263,138456.4486125935
+4505,249107.71551849006
+1851,150465.88200078768
+15471,144789.27933225536
+6560,230273.54332241567
+4007,363706.54923565866
+10251,234478.49217402664
+265,172843.48362910745
+14770,189994.90760356587
+1353,219632.09569430753
+16335,227911.778398539
+10859,182523.6685864637
+641,201439.45799913444
+11985,208464.054266348
+8076,181230.46829920536
+14160,153791.93292284152
+12506,284042.8658311018
+8809,195913.53195524428
+6957,163916.79113704135
+4478,127941.25354777007
+4749,209001.7967234791
+12322,166512.82539619305
+13910,153136.82458898754
+8252,191369.70344344655
+2431,301060.76865424647
+12670,113182.21084437269
+7537,171343.91882671986
+4637,408347.4827161554
+2538,175769.1696052001
+15290,233630.21330823228
+16072,309294.85468312993
+16740,125547.54558912966
+6078,191925.01148160675
+16723,142994.94700572683
+3847,237036.79933294476
+5999,91328.76448939343
+7678,243286.63492743392
+4862,161585.99074075147
+12468,158499.18909838534
+13409,391975.9647553336
+12380,227471.40902668945
+8962,129424.3917603948
+11004,283274.5660569086
+792,159098.2013056589
+5687,247652.42146532904
+3906,140329.67897770848
+13554,128735.04333790031
+5863,115806.1246135966
+13459,139099.00373577749
+12378,256617.16836439114
+9935,133366.75787865624
+5674,178816.93253351844
+4535,213432.66460621415
+12310,405412.25541862386
+7048,155287.8243343719
+1143,405712.16722761514
+16085,188409.72383068752
+5358,159730.9338123963
+7100,216395.13508367763
+10384,171622.4642631089
+5006,189188.16857276863
+7371,152824.52309453016
+4720,157579.53820156853
+7577,240411.92565196115
+15196,192989.3987254045
+8467,319919.0566109999
+5251,127645.37062489775
+9220,146969.53858366233
+2151,170183.3998718238
+8081,245977.54466616004
+15824,174408.06345465002
+10545,283289.47347859084
+13403,338517.1375927916
+1559,88758.27755263615
+16795,163839.38006564262
+6293,184228.19383339453
+16024,205986.99384742265
+12167,185760.40524197769
+3078,126105.6611781487
+6736,211804.2650701167
+12124,336969.4560687513
+6489,308265.507269358
+2778,207896.6890405857
+13074,160197.51450008038
+4075,139861.16200827403
+15195,236083.58198165527
+3160,152175.80729890976
+1272,243622.28444107017
+14776,237185.4759581002
+8497,285006.7936919067
+4,195140.27854095807
+15732,335831.53435581265
+9111,489380.7178199606
+10748,171049.04992885693
+8944,182418.85247762047
+1906,150727.13495059096
+11283,108025.64428308616
+14269,130057.26128033666
+16232,173199.28217849546
+1839,333848.0804737842
+7894,327152.7951445388
+5703,179598.34204463367
+1347,308205.73321612243
+4849,79781.85789906344
+5618,142802.12893654092
+9672,214750.70395373326
+2638,150884.02217208306
+1962,344000.1022269266
+11717,231976.52319888538
+13358,322078.86602813785
+8258,84960.53124989528
+8822,207983.50943763158
+2927,172236.20672112255
+14741,275011.0512014778
+8216,144769.15939603187
+12317,148279.10111278112
+13133,247151.82328781468
+1286,171024.84850004382
+13116,128000.12157936429
+9198,122332.35584171631
+13679,209780.22820038087
+13877,136962.6594969947
+5946,125116.33599553093
+7428,199189.7072255087
+1073,313616.99046816013
+13970,197504.0852453905
+8466,173874.89478947784
+13135,173598.59318880018
+1778,196916.8043034854
+195,202841.92666256736
+8973,147424.91983450574
+10674,160369.5047547669
+12350,128908.45635154481
+10295,133667.93801443928
+7251,338395.9934092538
+9245,190786.11838940563
+9126,136633.1542448465
+7740,226456.34561710202
+8956,178852.82035607364
+13686,174310.69721255978
+2864,158455.03763194324
+7110,139775.320210351
+11331,213683.10820935012
+16637,158221.6460683199
+4580,241565.0847407361
+8909,383430.66409326263
+11932,218875.63174044638
+5243,183384.06121302766
+13419,280559.48049972503
+3459,284101.205214616
+7053,395954.1048042887
+14691,322465.7539717683
+12535,182138.85367138116
+560,283795.6710562454
+7514,269331.16384160146
+5305,165539.14481467823
+11231,300183.16709276557
+8803,119071.04447166417
+9791,169144.5357160051
+130,212929.48533725136
+5874,419083.0251839799
+1440,179641.54505459414
+6474,184338.53530540684
+12168,191676.67479583278
+13187,238586.80682171276
+9831,219947.52777756145
+15943,189323.76497910082
+15846,138317.64739950935
+1402,195947.32988389046
+4968,248497.78715396707
+5131,193759.94348343817
+15580,114954.5863664818
+10869,202929.98318040374
+4679,123916.34728507907
+13908,139502.5678212329
+13489,259194.46415928542
+16352,120339.46123244817
+5691,180325.78655338447
+8780,263161.336654598
+11933,289549.1762939001
+4136,393622.59011398966
+12873,196580.39085639402
+13330,211604.27075882046
+797,168649.34542280246
+6450,435880.21572546306
+10056,150142.03211537548
+1050,115947.39966580554
+1202,187539.3146883185
+6680,121890.86801994679
+174,181628.90594374528
+6337,144017.46293450647
+6704,158553.6008806088
+266,139159.7717417399
+9195,116057.10289355712
+14668,127741.64745610725
+9315,231168.6787223259
+469,264405.804123102
+8852,198209.63117816762
+10907,241516.811654898
+5287,381910.79030606325
+4548,197540.2886119831
+9637,212690.89054772846
+11010,163958.25438614484
+9564,178359.46589871965
+2681,110797.40335488686
+6776,174867.13065213416
+8311,195252.21757761243
+6580,189966.81939713075
+14417,161477.30326027374
+3892,193964.40583693032
+4929,151176.03592355188
+7340,246380.5434227987
+13225,197264.70070049338
+5581,123758.77542503286
+8015,140311.00823391817
+13567,131508.3468494934
+10596,194581.6528689972
+11291,154044.21751798567
+10901,259413.24150730178
+9349,268245.59846434975
+4030,229673.21578254507
+8357,182284.8706255584
+829,168308.74681095258
+5529,427393.237978071
+4134,207550.10068410094
+4867,205797.10998178634
+903,227260.09439660783
+3701,168853.61953364458
+12916,105401.83801893507
+9031,190626.85167992127
+1965,289397.5306605215
+13851,235559.90442438686
+9314,232282.92938598918
+7386,182270.0610894796
+4088,147220.25258209836
+14907,457042.03806901345
+5991,201815.02163796633
+10265,253359.1756491893
+15260,151686.15983711008
+8053,191663.57911740665
+9577,234122.7687820753
+15509,141042.74814738292
+12153,247837.8261941001
+3218,216235.51665930016
+4740,225987.4701236911
+682,181715.92626509003
+12176,258849.99481986347
+12385,158441.42978024625
+2523,92087.80027505755
+5801,167080.05969982725
+12751,161009.3572333761
+15121,211828.91876275858
+517,381159.20850223425
+4822,188788.1816822404
+1129,346367.0814737301
+12396,167616.58789017893
+11329,238272.6207017979
+11856,321696.8356517467
+3653,173015.99995992897
+13404,97375.47574082969
+14486,404254.96206693543
+3502,212110.5354553208
+7717,77638.06908908115
+8808,168839.29212598945
+11676,218392.59698933165
+7033,264048.57723819686
+1681,185943.55496092778
+6658,135782.67339366264
+959,424986.31087394006
+4871,204933.561168823
+6946,184168.53032478102
+13763,244371.40882144208
+15320,271514.1209581355
+3065,132307.2970875259
+14742,155318.71172925137
+13959,122789.006616096
+2427,170263.07754096558
+1716,274965.8231554525
+6258,124378.85195515423
+16677,160028.21099124008
+206,348811.3580250633
+13659,516108.4629676495
+7782,140837.87352763885
+3308,131811.24338772742
+9073,126567.89067529696
+6342,472160.8815710625
+868,354859.41642390576
+10153,239436.8582669576
+16788,167103.81326964803
+14886,151042.24050458393
+4674,188872.5967466712
+13599,149576.70715572344
+6851,218151.27810103493
+6443,218684.8592498024
+9903,157705.04500086355
+8321,320822.7738388646
+10686,207793.4667904232
+11106,144310.75981583394
+11845,127050.20028901381
+2439,283499.1000646768
+5461,492097.85079921567
+14559,218668.32816800187
+10215,158680.7849837021
+13566,396571.11240555934
+16563,131199.2397777896
+10492,256909.94269613107
+13847,193618.54773403268
+3607,184306.10552883396
+2844,174691.45065751116
+3499,153736.57493511937
+7478,347210.7031519987
+4728,292399.3817243407
+10883,178266.99803024976
+13602,97082.8980428828
+3751,146027.19400574343
+10299,173221.25725239044
+13023,154111.56519331044
+14498,213129.87313900737
+13601,129154.68641097721
+5787,161820.12108476172
+7853,175576.25356947075
+2429,278245.52376484784
+2359,283739.97353151423
+13926,270921.87688646745
+4278,153801.69230850486
+14307,238909.45443458305
+15677,323655.27595915087
+9,123825.19844301186
+12630,157262.03123718002
+16428,399568.7505831837
+13285,198934.5354049696
+7902,139464.72742325853
+866,109943.80334479277
+6077,154439.61866486294
+4015,366300.8934550605
+16350,160119.49039516316
+14793,117472.94074710397
+1409,166711.52150229726
+5199,177297.34828496343
+12036,344168.4243817696
+9654,165193.43666172258
+13106,157434.4687345897
+11780,160353.07339345227
+355,201248.78235342342
+6247,146516.28285282155
+1045,232849.43159650132
+4019,232493.61493610142
+2048,230828.85336004806
+14586,82304.39075327992
+6720,205495.28905880518
+5509,132005.22328187793
+8463,263217.49499814084
+3202,227410.48483416985
+6910,164797.89015491316
+5701,318412.1435432695
+1,242222.92023856603
+6853,166881.47904312742
+5386,189170.48941997485
+9251,230775.0862762694
+8580,185067.6944767303
+3644,218198.13962522804
+3258,189064.55714889016
+329,228168.88664202864
+5038,198120.00515678184
+2526,188872.5967466712
+2082,330984.1270248116
+11081,149370.18824427153
+3927,190669.4124531774
+12305,215769.49378405322
+10975,273634.6295588266
+2590,205056.90743139666
+9337,171673.54391634642
+9368,167461.70991072129
+16111,147316.6334758637
+986,290186.64407822903
+426,176229.66271823144
+10040,169165.69204204256
+16463,161918.8055111448
+3704,253039.8536437207
+15406,261075.7616036934
+10035,323837.4019890029
+16251,141863.1197465391
+9520,470401.2004328064
+503,201773.02509143623
+8260,259438.70398307973
+14309,238937.0956153727
+16054,317867.5007885769
+3885,249349.11526714475
+5924,151041.51729560964
+12843,176975.17415309662
+14300,135463.51122663092
+12608,241485.62593188693
+11437,138884.60046989532
+9535,162695.0323144615
+1528,182414.65842220007
+11518,151474.09893264322
+6401,263005.8891434136
+9129,177175.89517268597
+13069,187609.7739962069
+16607,166434.69162462992
+1473,307054.4643820436
+6085,203883.14435455087
+4067,260001.81414411403
+9178,171958.66181394793
+5090,142628.0330794488
+15046,273792.5502943757
+13621,162673.5947037492
+16065,229487.8313842107
+1944,183075.6418555336
+1060,265723.6540812915
+1764,318253.09342911886
+1705,207765.68723242776
+9961,93270.99238346207
+18,231115.43085358143
+10371,115372.83343809741
+13185,129522.05765179619
+13139,270647.3644716877
+3161,295281.75512987195
+11931,238492.87505550688
+8759,184968.76348112154
+12969,106460.87854168624
+14329,253090.80991407778
+3637,185356.50623626114
+1165,91669.52659265339
+9976,215585.74719279766
+16490,224350.6096208783
+2074,293238.10609562346
+15364,327950.9371960853
+11394,308304.5604922073
+10222,227338.88042576754
+5948,127441.12833011386
+7494,178351.8119215629
+6285,236236.5936102135
+15220,147235.01669177887
+3237,146949.5535240906
+3528,202201.2531380117
+6289,320047.1060909986
+15784,187642.5448170391
+15321,311800.55212575645
+4562,143515.0072229036
+6402,241155.70793260238
+12688,205993.96140141416
+3536,173962.53190374846
+8426,127441.12833011386
+12434,260379.0614271805
+5645,202919.69609190873
+15080,231168.6787223259
+4677,186339.70722924982
+9818,373418.54116173397
+13496,160988.67240188643
+15682,238914.0956972588
+6284,228913.67246414523
+14342,182803.93359363574
+8109,198744.13246358762
+14818,242959.33153974885
+5724,108431.46295385131
+7471,175891.44950348427
+14905,197186.78063149058
+9719,366335.6360201742
+10637,342383.7454638787
+12838,163525.16623175243
+15949,205978.98607603347
+2334,274821.1988664101
+3416,186826.99088527024
+12303,148147.8535186547
+528,179170.75524755745
+980,173874.89478947784
+1298,124043.39996635908
+13728,176360.79259146674
+10842,126567.89067529696
+14596,108756.78424238031
+1899,361653.1138000931
+16380,281195.8240146685
+7855,120056.20475785802
+8147,273992.22242227674
+11469,160701.26983700186
+5779,75915.13004593224
+3389,424209.67053643754
+7885,240602.2360793347
+5254,482398.106398533
+6383,145100.68217168623
+3498,223881.66889060487
+16166,470061.68849975435
+2413,246858.33324489082
+14653,263258.9903970047
+9345,148025.01094820353
+13711,162341.38578100104
+822,218950.95837704593
+12640,178715.82257643525
+11954,227280.78909679694
+7914,418562.2176051927
+7394,331926.03666198254
+7354,177086.29674366256
+13058,140891.2744683394
+4836,212357.24945541794
+362,144399.6688152677
+9365,156039.8624402424
+211,129544.02314271634
+8543,164012.55445898554
+188,189827.12586556363
+14196,478076.9169130216
+7114,350984.4596495292
+13431,191161.34586004145
+12869,317418.26436042244
+16681,252984.08087786785
+16528,162173.51440418663
+390,349350.49803894333
+11752,156238.70831772487
+4408,152157.32662523628
+3315,187893.1857184069
+16071,200601.4919090351
+16535,78683.39237963378
+12463,226150.1394657993
+12790,240100.98564081805
+11787,141535.14500038192
+14577,206210.82856506313
+4431,291321.74800695595
+10286,132528.04394703827
+1676,308017.70437659725
+13993,291363.0293387478
+4761,182020.63227458025
+14670,216079.06521919172
+4795,243673.0996188947
+15411,241153.36640865376
+2909,79147.33552998016
+8236,414307.4100006253
+14017,152306.76510599884
+13974,221470.9218280325
+6513,245818.09293565547
+7695,149656.66391783077
+5286,178267.32487829388
+4902,217022.95565434266
+1124,291743.4764034612
+10436,180241.5309886649
+14749,287379.24164598755
+2609,211059.6315790876
+14548,216203.0716672122
+1566,151864.91828348063
+3649,168098.55898499623
+16101,240631.73548119218
+13095,172337.03789565532
+2779,161789.45982512663
+14203,151791.73279049236
+11019,169162.12514323706
+7653,178097.6681193337
+12835,171704.76701680542
+9683,294067.43685457984
+6955,127061.8784865004
+11504,143283.9882672243
+12110,176526.5051055609
+237,197223.37261155265
+2612,195024.0302036318
+8855,309817.4286585624
+8729,135730.69666989436
+11580,190747.08583130967
+13807,206973.43898953858
+5375,295921.2164645105
+16767,335512.55036889197
+14540,206845.57326791625
+255,318108.542695402
+3586,171045.35077830995
+5671,217406.07592554466
+10311,363208.82342073723
+13280,223232.52955481576
+1788,201401.45549550845
+12128,173874.89478947784
+3576,384807.6919212494
+1285,220846.56871459435
+13502,182660.2009456527
+6518,213689.13717609507
+1729,191901.8596669365
+5398,171054.78207336552
+12539,253837.31409664295
+1476,167314.29838258924
+5057,377610.57872537646
+5133,237946.26415000085
+2196,371852.232188849
+4041,195947.32988389046
+5252,89912.68069301406
+12879,159025.5002088951
+13210,188611.28677670262
+7390,365292.91042884445
+15942,139068.30285701776
+7054,140657.7559327461
+14632,227616.62591750847
+10208,212520.35466572893
+14120,164934.7288963636
+13607,214860.10301676425
+9647,221466.19859222838
+12134,182913.81978291392
+8593,159484.3272624434
+16231,142257.01211858488
+12474,157645.66107811156
+11640,157585.92297871478
+1685,130741.44222269992
+4474,155892.24269439947
+15313,153662.3092472215
+1736,133777.8284973099
+16471,161054.10244459342
+12517,208033.64363015693
+15437,215826.85665907033
+3381,189980.74931939293
+16555,141470.74304758082
+15738,187859.4965727413
+2896,119582.03615130637
+11356,342434.14316100033
+9734,158353.82705362656
+1890,171001.3287760548
+15344,193523.02302500297
+13575,141851.91370869838
+14595,215150.9722794597
+10567,238151.7943422444
+12889,186826.99088527024
+1213,214805.8168241867
+8841,104586.05431813767
+473,265289.5229381931
+14853,199822.57674545067
+15271,388810.04043707927
+14191,249888.2348137218
+12703,274940.2799794882
+2649,171975.29332758547
+14916,139837.6021105906
+8975,125073.5313863732
+12108,212306.22529331123
+6070,157891.5276817057
+15765,159481.40257137408
+3713,102572.98848165982
+1618,305064.5749010027
+13874,177967.94666826102
+4407,141478.1765746096
+8550,204814.27446980035
+15759,364106.7779009192
+7808,123445.71487373185
+1127,204032.82962123957
+13108,297863.9518474659
+4426,176612.83727236753
+6175,246838.1828695821
+7903,217733.49830506474
+2076,71022.00308232072
+9924,197063.3833566631
+2322,140081.77682517646
+13844,179715.30518323492
+13871,126905.11824754713
+5908,255860.63267577314
+429,500701.0017435509
+3443,138800.77283762657
+170,126251.20905453806
+9879,232864.71026373576
+15324,282571.87645743345
+15616,175039.85893492933
+14217,192935.95546979728
+5262,217139.2798791745
+13426,220298.80680528074
+13286,161800.97382955588
+10464,163801.3124078946
+10881,189331.60898343375
+12776,127694.74800644239
+10664,176728.8198350623
+15237,190491.39918658807
+15999,249189.0984267308
+4816,334851.08582907356
+13856,145605.26631057347
+2701,217336.01198124205
+635,171756.1943174676
+4016,218544.60575523847
+64,214081.26965425757
+4881,201525.9610951117
+7017,258373.9668285279
+7184,220649.05791303026
+487,167207.98444415847
+15897,388088.0318160504
+11444,158661.86685268165
+3260,159911.4575338424
+3127,165370.89522663585
+7899,140845.85735724904
+5705,196248.47154546255
+12960,223142.2018497456
+4046,172460.2306734933
+2190,260498.5717784782
+15787,156085.6092234057
+1926,219218.57293106927
+3944,173103.5002675074
+14709,224727.51957935508
+13046,166938.17400713745
+9845,179224.28291366567
+7432,104106.8746716219
+11524,208397.152769897
+6393,174196.38066327779
+11323,159266.62237668564
+10352,415662.5132899965
+6811,343423.1487798614
+2606,327844.3438247188
+11660,413381.4611999048
+8305,188859.58468200802
+7357,204999.53708715268
+14796,153491.74104576613
+15587,175613.93779505263
+2461,441182.4881342168
+5605,188341.2809497856
+6554,207366.74548505983
+7662,248235.63126009057
+11798,213413.84239816992
+12078,182541.31568804957
+1758,129108.71272727814
+7661,464807.80106863036
+3335,179287.69012009128
+2854,206186.5661283904
+16659,237639.7511818559
+5241,283855.72082529886
+16469,362067.0267966211
+16098,166764.16261120178
+15049,161668.0084216385
+5152,74165.13284937956
+2166,159499.86301563578
+16465,218312.94580938385
+1768,129108.71272727814
+8744,266054.07464930974
+10594,181261.61428340783
+1339,161445.8144005421
+6998,178064.82159511658
+723,207603.837213526
+11357,188695.77631253737
+4413,181142.24478960445
+5026,207753.1594262589
+4412,241413.69212068847
+537,154150.8110213757
+10270,118780.77778971169
+9571,254607.77665189575
+9969,202597.36363808348
+7822,75455.73925885993
+6621,213950.94324918653
+208,195068.3592595101
+5195,199491.31082981062
+7032,133004.83421782032
+8263,170646.76676262036
+14719,433848.9464838833
+15622,175271.8787942422
+4259,166137.45876306616
+3085,296682.7313609887
+172,176866.47693258483
+7130,141186.92047713304
+8767,159378.03101314962
+3087,156084.26452884896
+4089,287050.2803562823
+11477,137536.5797714826
+2246,194717.23769135907
+1793,166374.15529289952
+1630,208520.2572989455
+1189,122952.27984119073
+6050,255466.9499493418
+8752,149758.66019443978
+8963,196084.59306996103
+9671,410077.40905187273
+4820,154250.8284180648
+4475,152187.6579284335
+6396,215150.9722794597
+8932,185730.89958295436
+162,173443.5096682181
+10847,141556.07275656034
+5692,388917.6401753824
+7316,232673.79923387044
+5485,222188.76563462228
+9780,312939.78958606697
+7307,139313.05313565797
+9739,232512.40221031103
+7426,140136.07679885204
+835,201815.33279095494
+11744,261015.92481662444
+11907,212043.97112105472
+5684,196031.49098024823
+10335,108934.94263598257
+4466,223986.2632350335
+11593,126750.81898117533
+244,227936.77280292736
+15205,337382.90444587264
+6071,171244.85794986857
+9455,461385.84565426887
+15862,306759.42916364386
+8165,281938.2686945269
+5002,238513.30602007295
+5922,276367.62784643564
+16616,272084.2628215713
+7615,243262.0183351627
+7911,198087.15889469683
+7748,224521.85961471742
+11265,346311.97095959843
+15820,179982.20253355062
+6648,173818.60999733192
+7117,249472.81725978732
+10262,179800.34511187903
+2853,272419.58446666005
+4606,246421.97066731326
+12747,142006.56716161434
+3953,146674.76288233927
+3552,184566.79980765047
+2675,247265.5757168939
+4611,213019.9513134319
+2025,211304.54738925106
+5424,210953.13795389596
+8546,151677.01171138987
+8875,136517.45803060924
+2807,338090.48156124656
+8578,224819.72535627
+786,372662.1936741679
+3945,197848.08648007552
+16733,124183.00650278249
+16191,147542.6759636709
+12669,159025.5002088951
+10493,164324.11372912736
+6671,220491.7334791747
+9330,234367.5090041767
+1622,166647.09646753597
+8713,213948.90348553783
+8696,271904.59768813784
+9187,247267.14588055888
+14551,156767.4956068376
+2646,280612.15698746376
+9563,276619.0747648972
+4031,163558.4797287361
+5155,185140.3146322461
+12116,365769.0825661735
+3834,391446.9929808707
+7785,240994.24540780345
+307,164431.5307570767
+13663,146321.1398944512
+16357,130308.08016951023
+10646,147827.4244251843
+5615,151782.98397240823
+4604,175952.8406121456
+9308,174828.96748937748
+16789,255495.08644778316
+15721,208135.44498675197
+4994,409724.08592362714
+5454,156064.46836908226
+4034,199131.05128679518
+1420,189889.9732342679
+6453,144450.3525005946
+8167,179874.2692594185
+11657,244045.94296815537
+14356,365435.2459164418
+2024,291093.54149165784
+7701,92039.53191952547
+6291,191513.47815048596
+789,188681.1621087977
+16315,250407.02101446912
+3677,181706.160908984
+13309,145229.52816208228
+2088,80433.66390636892
+3707,179084.02729136046
+5240,221562.0213300161
+13197,217996.5413614504
+3147,161150.78430877178
+76,368782.8619803379
+14287,146861.60609240987
+7940,243878.79989600845
+2515,94583.23455884005
+4891,217661.65158564007
+7623,318845.59400281776
+10671,384423.5774760714
+13030,165985.59576731184
+14686,234736.7716326675
+13272,237664.303009008
+14954,229746.45043564696
+16264,227598.50950675344
+14461,184154.31672321647
+13107,292422.6582515839
+8740,350733.5489315533
+2824,229871.9457261663
+1645,141192.38758488026
+15613,158386.99106291478
+4803,224914.101579568
+971,162000.15813934084
+13952,174833.11071998146
+3320,166510.68389881868
+15110,150413.01365545634
+2440,183817.5601656561
+10462,141472.92760808888
+6011,292390.1940592314
+9405,137931.11939503212
+511,162214.20947046223
+4141,341874.5583496698
+11651,159091.77753368655
+343,207631.63635576647
+14750,240398.68753514613
+3711,147178.23153950364
+6322,146518.43748553106
+6533,193362.94532215325
+6089,193220.7762017208
+286,286530.085217845
+7639,111442.6002719656
+16722,188644.93566023847
+9157,210298.5376555204
+7137,276864.30370923615
+6669,355099.39820636465
+3326,305874.79355986253
+5820,151728.00560350466
+11604,216068.21546082315
+16087,195643.8890986365
+5327,223179.62308174538
+13639,209932.66196577103
+349,330369.5765025829
+15181,304555.63150164817
+4821,190320.36258675423
+1740,186070.03841964077
+3450,128609.37673420786
+16064,118007.9544529625
+1804,114321.71684653984
+5296,136525.65207501626
+5346,473739.372325474
+4723,284351.7093055962
+417,164362.15323031612
+15756,166977.2834878056
+14090,189875.1623449131
+14778,316253.47587846225
+2560,162983.09426899021
+12920,86981.52139776896
+8249,150151.70027919795
+7125,138855.24548155649
+11732,158314.86552642315
+13365,373505.1307185845
+5361,381302.76219247025
+15937,287316.22715052887
+2591,176322.97973470992
+15706,188893.0545449789
+2105,222598.5152585189
+7220,317922.78076364775
+14562,190925.66564368657
+6836,158266.16664457254
+8180,233574.99854858185
+4695,135825.14727350953
+5783,318198.3054050804
+4780,203633.06813782413
+12504,177191.74264099743