From 253e75b68bc4fab2de0a8fd910f1482a9920188b Mon Sep 17 00:00:00 2001 From: domzal Date: Wed, 25 May 2022 22:54:49 +0200 Subject: [PATCH] first solution --- .ipynb_checkpoints/run-checkpoint.ipynb | 455 ++ dev-0/out.tsv | 1588 +++---- dev-0/outNB.tsv | 5272 +++++++++++++++++++++++ run.ipynb | 601 ++- run.py | 118 +- runNB.ipynb | 135 + runNB.py | 24 + test-A/out.tsv | 1484 +++---- test-A/outNB.tsv | 5152 ++++++++++++++++++++++ 9 files changed, 13205 insertions(+), 1624 deletions(-) create mode 100644 .ipynb_checkpoints/run-checkpoint.ipynb create mode 100644 dev-0/outNB.tsv mode change 100644 => 100755 run.py create mode 100644 runNB.ipynb create mode 100644 runNB.py create mode 100644 test-A/outNB.tsv diff --git a/.ipynb_checkpoints/run-checkpoint.ipynb b/.ipynb_checkpoints/run-checkpoint.ipynb new file mode 100644 index 0000000..139d46f --- /dev/null +++ b/.ipynb_checkpoints/run-checkpoint.ipynb @@ -0,0 +1,455 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "#!/usr/bin/env python\n", + "# coding: utf-8\n", + "import lzma\n", + "import gensim.models\n", + "import numpy as np\n", + "import pandas as pd\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torch.optim as optim\n", + "from torchvision import datasets, transforms\n", + "from torch.optim.lr_scheduler import StepLR" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "X_train = lzma.open(\"train/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", + "y_train = open('train/expected.tsv').readlines()\n", + "X_dev0 = lzma.open(\"dev-0/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", + "y_expected_dev0 = open(\"dev-0/expected.tsv\", \"r\").readlines()\n", + "X_test = lzma.open(\"test-A/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "X_train = [line.split() for line in X_train]\n", + "X_dev0 = [line.split() for line in X_dev0]\n", + "X_test = [line.split() for line in X_test]\n", + "\n", + "def tagged_document(list_of_list_of_words):\n", + " for i, list_of_words in enumerate(list_of_list_of_words):\n", + " yield gensim.models.doc2vec.TaggedDocument(list_of_words, [i])\n", + "\n", + "data_training = list(tagged_document(X_train))\n", + "model = gensim.models.doc2vec.Doc2Vec(vector_size=1000)\n", + "model.build_vocab(data_training)\n", + "\n", + "X_train_d2v = [model.infer_vector(line) for line in X_train]\n", + "X_dev0_d2v = [model.infer_vector(line) for line in X_dev0]\n", + "X_test_d2v = [model.infer_vector(line) for line in X_test]\n", + "\n", + "y_train = np.array([int(i) for i in y_train])\n", + "y_expected_dev0 = np.array([int(i) for i in y_expected_dev0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class Net(nn.Module):\n", + " \"\"\"W PyTorchu tworzenie sieci neuronowej\n", + " polega na zdefiniowaniu klasy, która dziedziczy z nn.Module.\n", + " \"\"\"\n", + " \n", + " def __init__(self):\n", + " super().__init__()\n", + " \n", + " # Warstwy splotowe\n", + " self.conv1 = nn.Conv2d(1, 32, 3, 1)\n", + " self.conv2 = nn.Conv2d(32, 64, 3, 1)\n", + " \n", + " # Warstwy dropout\n", + " self.dropout1 = nn.Dropout(0.25)\n", + " self.dropout2 = nn.Dropout(0.5)\n", + " \n", + " # Warstwy liniowe\n", + " self.fc1 = nn.Linear(9216, 128)\n", + " self.fc2 = nn.Linear(128, 10)\n", + "\n", + " def forward(self, x):\n", + " \"\"\"Definiujemy przechodzenie \"do przodu\" jako kolejne przekształcenia wejścia x\"\"\"\n", + " x = self.conv1(x)\n", + " x = F.relu(x)\n", + " x = self.conv2(x)\n", + " x = F.relu(x)\n", + " x = F.max_pool2d(x, 2)\n", + " x = self.dropout1(x)\n", + " x = torch.flatten(x, 1)\n", + " x = self.fc1(x)\n", + " x = F.relu(x)\n", + " x = self.dropout2(x)\n", + " x = self.fc2(x)\n", + " output = F.log_softmax(x, dim=1)\n", + " return output\n", + "\n", + "\n", + "def train(model, device, train_loader, optimizer, epoch, log_interval, dry_run):\n", + " \"\"\"Uczenie modelu\"\"\"\n", + " model.train()\n", + " for batch_idx, (data, target) in enumerate(train_loader):\n", + " data, target = data.to(device), target.to(device) # wrzucenie danych na kartę graficzną (jeśli dotyczy)\n", + " optimizer.zero_grad() # wyzerowanie gradientu\n", + " output = model(data) # przejście \"do przodu\"\n", + " loss = F.nll_loss(output, target) # obliczenie funkcji kosztu\n", + " loss.backward() # propagacja wsteczna\n", + " optimizer.step() # krok optymalizatora\n", + " if batch_idx % log_interval == 0:\n", + " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n", + " epoch, batch_idx * len(data), len(train_loader.dataset),\n", + " 100. * batch_idx / len(train_loader), loss.item()))\n", + " if dry_run:\n", + " break\n", + "\n", + "\n", + "def test(model, device, test_loader):\n", + " \"\"\"Testowanie modelu\"\"\"\n", + " model.eval()\n", + " test_loss = 0\n", + " correct = 0\n", + " with torch.no_grad():\n", + " for data, target in test_loader:\n", + " data, target = data.to(device), target.to(device) # wrzucenie danych na kartę graficzną (jeśli dotyczy)\n", + " output = model(data) # przejście \"do przodu\"\n", + " test_loss += F.nll_loss(output, target, reduction='sum').item() # suma kosztów z każdego batcha\n", + " pred = output.argmax(dim=1, keepdim=True) # predykcja na podstawie maks. logarytmu prawdopodobieństwa\n", + " correct += pred.eq(target.view_as(pred)).sum().item()\n", + "\n", + " test_loss /= len(test_loader.dataset) # obliczenie kosztu na zbiorze testowym\n", + "\n", + " print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n", + " test_loss, correct, len(test_loader.dataset),\n", + " 100. * correct / len(test_loader.dataset)))\n", + "\n", + "\n", + "def run(\n", + " batch_size=64,\n", + " test_batch_size=1000,\n", + " epochs=14,\n", + " lr=1.0,\n", + " gamma=0.7,\n", + " no_cuda=False,\n", + " dry_run=False,\n", + " seed=1,\n", + " log_interval=10,\n", + " save_model=False,\n", + " ):\n", + " \"\"\"Main training function.\n", + " \n", + " Arguments:\n", + " batch_size - wielkość batcha podczas uczenia (default: 64),\n", + " test_batch_size - wielkość batcha podczas testowania (default: 1000)\n", + " epochs - liczba epok uczenia (default: 14)\n", + " lr - współczynnik uczenia (learning rate) (default: 1.0)\n", + " gamma - współczynnik gamma (dla optymalizatora) (default: 0.7)\n", + " no_cuda - wyłącza uczenie na karcie graficznej (default: False)\n", + " dry_run - szybko (\"na sucho\") sprawdza pojedyncze przejście (default: False)\n", + " seed - ziarno generatora liczb pseudolosowych (default: 1)\n", + " log_interval - interwał logowania stanu uczenia (default: 10)\n", + " save_model - zapisuje bieżący model (default: False)\n", + " \"\"\"\n", + " use_cuda = no_cuda and torch.cuda.is_available()\n", + "\n", + " torch.manual_seed(seed)\n", + "\n", + " device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n", + "\n", + " train_kwargs = {'batch_size': batch_size}\n", + " test_kwargs = {'batch_size': test_batch_size}\n", + " if use_cuda:\n", + " cuda_kwargs = {'num_workers': 1,\n", + " 'pin_memory': True,\n", + " 'shuffle': True}\n", + " train_kwargs.update(cuda_kwargs)\n", + " test_kwargs.update(cuda_kwargs)\n", + "\n", + " transform=transforms.Compose([\n", + " transforms.ToTensor(),\n", + " transforms.Normalize((0.1307,), (0.3081,))\n", + " ])\n", + " dataset1 = datasets.MNIST('../data', train=True, download=True,\n", + " transform=transform)\n", + " dataset2 = datasets.MNIST('../data', train=False,\n", + " transform=transform)\n", + " train_loader = torch.utils.data.DataLoader(dataset1,**train_kwargs)\n", + " test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs)\n", + "\n", + " model = Net().to(device)\n", + " optimizer = optim.Adadelta(model.parameters(), lr=lr)\n", + "\n", + " scheduler = StepLR(optimizer, step_size=1, gamma=gamma)\n", + " for epoch in range(1, epochs + 1):\n", + " train(model, device, train_loader, optimizer, epoch, log_interval, dry_run)\n", + " test(model, device, test_loader)\n", + " scheduler.step()\n", + "\n", + " if save_model:\n", + " torch.save(model.state_dict(), \"mnist_cnn.pt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.003825023" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "FEATURES = 1000\n", + "class NeuralNetworkModel(torch.nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(NeuralNetworkModel, self).__init__()\n", + " self.fc1 = torch.nn.Linear(FEATURES,500)\n", + " self.fc2 = torch.nn.Linear(500,1)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = torch.relu(x)\n", + " x = self.fc2(x)\n", + " x = torch.sigmoid(x)\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "nn_model = NeuralNetworkModel()" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "BATCH_SIZE = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "criterion = torch.nn.BCELoss()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "optimizer = torch.optim.SGD(nn_model.parameters(), lr = 0.1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def get_loss_acc(model, X_dataset, Y_dataset):\n", + " loss_score = 0\n", + " acc_score = 0\n", + " items_total = 0\n", + " model.eval()\n", + " for i in range(0, Y_dataset.shape[0], BATCH_SIZE):\n", + " X = np.array(X_dataset[i:i+BATCH_SIZE])\n", + " X = torch.tensor(X)\n", + " Y = Y_dataset[i:i+BATCH_SIZE]\n", + " Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1)\n", + " Y_predictions = model(X)\n", + " acc_score += torch.sum((Y_predictions > 0.5) == Y).item()\n", + " items_total += Y.shape[0]\n", + "\n", + " loss = criterion(Y_predictions, Y)\n", + "\n", + " loss_score += loss.item() * Y.shape[0]\n", + " return (loss_score / items_total), (acc_score / items_total)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "for epoch in range(5):\n", + " loss_score = 0\n", + " acc_score = 0\n", + " items_total = 0\n", + " nn_model.train()\n", + " for i in range(0, y_train.shape[0], BATCH_SIZE):\n", + " X = np.array(X_train_d2v[i:i+BATCH_SIZE])\n", + " X = torch.tensor(X)\n", + " Y = y_train[i:i+BATCH_SIZE]\n", + " Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1)\n", + " Y_predictions = nn_model(X)\n", + " acc_score += torch.sum((Y_predictions > 0.5) == Y).item()\n", + " items_total += Y.shape[0]\n", + "\n", + " optimizer.zero_grad()\n", + " loss = criterion(Y_predictions, Y)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " loss_score += loss.item() * Y.shape[0]\n", + "\n", + " display(epoch)\n", + " display(get_loss_acc(nn_model, X_train_d2v, y_train))\n", + " display(get_loss_acc(nn_model, X_dev0_d2v, y_expected_dev0))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/dev-0/out.tsv b/dev-0/out.tsv index 962881e..0fb5f17 100644 --- a/dev-0/out.tsv +++ b/dev-0/out.tsv @@ -9,32 +9,32 @@ 1 1 0 +1 +0 0 0 1 0 +0 +1 1 0 0 0 -1 0 0 -1 -1 -1 0 1 1 -1 -1 0 -1 +0 0 1 0 0 -1 +0 +0 +0 0 1 0 @@ -47,16 +47,16 @@ 1 0 0 -1 -1 0 1 0 -1 0 0 +1 +0 0 0 +1 0 1 1 @@ -66,7 +66,7 @@ 1 0 1 -1 +0 1 0 0 @@ -74,19 +74,19 @@ 1 0 1 +1 +0 0 0 -1 0 -1 0 1 0 0 -1 0 -1 -1 +0 +0 +0 1 0 0 @@ -95,16 +95,16 @@ 0 0 1 -0 +1 1 0 0 1 -0 1 -0 1 0 +0 +0 1 0 0 @@ -114,7 +114,7 @@ 0 0 1 -0 +1 0 0 0 @@ -137,25 +137,25 @@ 0 0 1 -0 +1 1 0 0 1 -1 0 0 1 0 -1 0 1 0 0 -1 0 -1 0 +1 +1 +1 +1 0 0 0 @@ -170,17 +170,17 @@ 0 0 1 -1 0 0 1 1 1 +1 +0 0 0 0 0 -1 0 1 0 @@ -189,18 +189,18 @@ 0 0 1 -1 0 0 0 +1 0 0 0 1 1 1 -1 -1 +0 +0 0 0 0 @@ -212,14 +212,14 @@ 0 1 0 -0 1 -0 1 0 1 0 -1 +0 +0 +0 0 1 0 @@ -239,52 +239,52 @@ 1 0 0 +0 1 1 0 -0 1 1 0 0 0 +1 +0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 -1 -1 1 0 0 0 0 -1 0 0 0 0 +1 0 0 0 0 -1 0 0 0 0 1 0 +0 +1 +1 1 +0 +0 1 0 0 @@ -293,7 +293,7 @@ 0 0 0 -1 +0 0 1 0 @@ -303,34 +303,34 @@ 0 0 0 +0 +0 1 0 0 0 +0 1 0 0 0 0 0 -1 0 0 0 +1 0 0 1 -1 0 -1 0 0 0 0 -1 0 0 -1 +0 0 1 0 @@ -342,18 +342,18 @@ 1 0 0 -1 0 0 0 0 0 -1 0 0 0 0 -1 +0 +0 +0 1 0 1 @@ -361,10 +361,10 @@ 0 0 0 -1 +0 0 1 -1 +0 0 0 1 @@ -374,18 +374,18 @@ 0 1 0 -1 0 -1 +0 +0 1 0 0 0 -1 0 0 -1 -1 +0 +0 +0 1 0 0 @@ -398,7 +398,7 @@ 1 0 0 -0 +1 0 0 0 @@ -407,19 +407,19 @@ 1 0 0 -1 0 0 0 0 -1 +0 1 1 0 1 +1 0 0 -0 +1 0 0 1 @@ -429,34 +429,34 @@ 0 1 1 -0 1 0 0 0 0 -1 +0 1 0 0 0 0 0 -1 0 0 0 0 -1 -1 0 0 1 -1 +0 +0 +0 1 0 0 0 +0 +0 1 0 0 @@ -467,15 +467,15 @@ 0 0 1 -1 +0 1 0 +1 0 0 0 0 0 -1 0 0 1 @@ -483,14 +483,11 @@ 1 0 0 -1 0 0 0 -1 0 0 -1 0 0 0 @@ -500,6 +497,9 @@ 0 0 0 +1 +0 +0 0 0 0 @@ -518,37 +518,37 @@ 1 0 0 -1 -1 -1 0 0 1 0 -1 0 0 1 1 0 0 -0 -1 1 1 0 +0 +0 +0 +0 1 0 +0 +0 1 0 0 0 0 -1 0 0 -1 0 +0 +1 1 0 0 @@ -559,15 +559,16 @@ 1 0 0 +0 1 -1 -1 +0 0 0 1 0 0 0 +1 0 0 0 @@ -578,7 +579,6 @@ 0 0 0 -1 0 0 0 @@ -598,15 +598,15 @@ 0 1 0 -1 -1 0 0 1 +0 1 0 0 -1 +0 +0 0 0 1 @@ -635,12 +635,12 @@ 0 0 0 -1 0 -1 0 0 0 +1 +1 0 0 1 @@ -648,31 +648,28 @@ 1 0 1 -1 -1 0 -1 0 -1 0 +1 0 1 1 +0 +0 1 1 0 +0 1 1 0 0 0 0 -1 0 -1 0 0 -1 0 0 0 @@ -682,32 +679,38 @@ 0 0 0 -1 0 0 -1 +0 1 0 0 0 -1 -1 0 1 0 +0 1 -1 +0 +0 +0 +0 0 1 +0 1 0 0 0 +0 1 1 0 0 0 +0 +1 +0 1 1 0 @@ -717,18 +720,15 @@ 1 0 0 -1 0 0 0 0 1 0 -1 0 0 0 -1 0 0 0 @@ -739,14 +739,14 @@ 0 0 0 -1 0 0 0 -1 0 1 0 +0 +0 1 0 1 @@ -759,17 +759,17 @@ 0 0 0 +0 1 1 -0 1 0 -0 -0 1 0 +1 0 1 +1 0 0 1 @@ -782,37 +782,37 @@ 1 0 1 -1 +0 1 1 0 -1 0 -1 -1 -1 +0 0 1 1 +0 +0 1 0 0 0 +0 1 1 0 -1 +0 0 1 1 0 0 +0 1 +0 1 0 0 -1 -1 0 0 1 @@ -823,7 +823,7 @@ 1 0 0 -1 +0 0 0 0 @@ -831,7 +831,7 @@ 0 0 0 -1 +0 0 1 1 @@ -843,10 +843,7 @@ 0 1 1 -1 -0 0 -1 0 0 1 @@ -855,33 +852,36 @@ 0 0 0 -1 0 0 0 0 0 +1 +0 +1 0 1 0 0 0 -1 +0 1 0 1 1 0 0 -1 0 -1 0 0 1 0 0 0 +0 +0 +1 1 0 0 @@ -891,47 +891,42 @@ 0 0 1 +0 +0 1 +0 1 +0 1 -1 +0 1 1 0 0 0 -1 0 0 -1 -1 0 0 0 1 -1 0 0 1 0 -1 0 -1 0 1 0 0 0 0 -1 0 0 +1 0 0 -1 -1 0 -1 0 1 1 @@ -940,49 +935,31 @@ 0 0 0 -1 0 0 0 0 -1 0 0 0 -1 0 0 -1 -1 -0 0 1 0 -1 0 1 -1 0 0 -1 -1 -1 0 0 -1 0 0 -1 0 1 0 -0 -0 -0 1 0 -0 -0 1 1 0 @@ -992,12 +969,12 @@ 0 0 0 -0 -0 1 0 1 +1 0 +1 0 0 0 @@ -1008,46 +985,29 @@ 0 1 0 -0 1 0 0 0 0 -1 -1 0 0 0 -1 -1 0 0 0 0 -1 -0 -1 -1 0 -1 0 0 1 0 -0 1 0 -1 -0 -0 0 1 1 0 -1 -1 -1 0 1 0 @@ -1059,27 +1019,17 @@ 0 0 0 -0 -0 1 -0 -0 -0 1 0 0 0 0 -0 1 0 0 0 0 -0 -0 -1 -0 1 0 0 @@ -1088,9 +1038,13 @@ 0 0 0 +1 +0 0 0 1 +1 +0 0 1 1 @@ -1098,10 +1052,8 @@ 0 0 0 -1 0 0 -1 0 0 1 @@ -1109,38 +1061,34 @@ 1 0 0 +1 0 0 0 0 1 1 -1 0 -1 0 0 1 -1 -0 0 0 -1 0 0 -1 0 1 -0 1 0 0 0 0 +1 0 0 0 0 +1 0 0 0 @@ -1156,38 +1104,130 @@ 0 0 0 +1 0 +1 0 0 0 0 0 0 +1 +1 0 +1 0 0 0 0 +1 0 +1 0 0 +1 0 +1 0 0 0 +1 0 0 0 0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 0 0 +1 0 0 +1 +1 0 0 0 0 0 +1 0 0 0 @@ -1195,17 +1235,20 @@ 0 0 0 +1 0 +1 +1 0 +1 +1 0 0 0 0 0 0 -0 -0 -0 +1 0 0 0 @@ -1215,18 +1258,15 @@ 0 0 1 -0 -0 1 -0 1 -0 1 0 0 0 0 0 +0 1 1 0 @@ -1235,60 +1275,46 @@ 0 1 0 -1 0 -1 -1 0 1 -1 0 -1 0 0 +1 0 0 -1 0 0 0 1 +1 0 0 0 1 1 0 -1 0 -1 0 -1 0 1 0 1 1 -1 0 -1 0 1 0 0 0 0 -1 0 0 1 0 0 -1 -1 -1 0 -1 0 0 0 @@ -1298,7 +1324,6 @@ 0 0 0 -1 0 0 1 @@ -1306,11 +1331,6 @@ 0 0 0 -0 -0 -0 -0 -0 1 0 0 @@ -1318,20 +1338,12 @@ 0 0 0 -1 -1 -1 -0 -0 0 0 0 0 0 0 -1 -0 -1 0 0 0 @@ -1345,7 +1357,6 @@ 0 1 0 -1 0 0 0 @@ -1355,24 +1366,16 @@ 0 0 0 -1 -1 -0 0 1 -1 -1 -0 -0 0 0 +1 0 1 0 0 0 -1 -1 0 0 0 @@ -1380,15 +1383,12 @@ 0 0 0 -1 0 +1 0 0 1 -1 0 -1 -1 0 1 0 @@ -1408,21 +1408,21 @@ 1 1 0 -1 +0 1 0 1 0 0 -1 +0 0 1 1 0 1 0 -0 1 +0 1 1 0 @@ -1435,29 +1435,29 @@ 0 0 1 -1 0 0 -1 -1 -1 -1 -1 0 +1 0 0 0 0 0 -1 0 -1 0 0 +1 0 +1 0 1 1 +1 +1 +1 +1 +1 0 0 1 @@ -1469,23 +1469,23 @@ 0 0 0 -1 0 -1 +0 1 1 0 0 -1 -1 0 0 0 0 0 -1 0 -1 +0 +0 +0 +0 +0 0 0 0 @@ -1505,44 +1505,42 @@ 0 0 1 -1 0 0 -1 0 -1 -0 -1 0 0 0 0 1 -1 0 0 0 0 -1 +0 0 1 +0 +0 +0 1 +0 1 +0 1 0 +0 1 1 0 1 1 0 -1 0 0 0 1 -1 -1 +0 1 0 0 @@ -1550,14 +1548,12 @@ 0 0 0 -1 0 0 0 0 0 0 -1 0 0 0 @@ -1565,6 +1561,10 @@ 0 0 0 +1 +0 +0 +1 0 1 1 @@ -1573,14 +1573,14 @@ 0 1 1 +1 0 0 1 -1 0 1 -1 0 +1 0 0 0 @@ -1593,22 +1593,22 @@ 1 1 0 +1 0 0 0 0 0 0 -0 -1 1 0 0 0 0 +0 1 1 -1 +0 1 0 0 @@ -1628,16 +1628,16 @@ 0 1 0 -1 0 0 0 -1 0 0 0 0 -1 +0 +0 +0 0 0 0 @@ -1650,14 +1650,14 @@ 0 1 1 -0 +1 1 1 0 0 0 1 -1 +0 0 0 1 @@ -1672,17 +1672,17 @@ 0 1 0 -1 0 0 0 -1 0 +1 0 0 0 0 0 +1 0 0 0 @@ -1692,9 +1692,9 @@ 0 1 0 -1 0 1 +1 0 0 1 @@ -1723,7 +1723,7 @@ 0 0 0 -1 +0 1 0 0 @@ -1740,7 +1740,7 @@ 0 0 1 -0 +1 1 1 0 @@ -1756,15 +1756,7 @@ 1 1 0 -1 -1 -1 -1 -0 -1 -0 0 -1 0 0 0 @@ -1776,26 +1768,32 @@ 0 0 0 -1 0 0 0 1 +1 0 0 0 +1 +1 0 0 1 0 0 0 -1 0 0 0 0 1 +1 +1 +0 +0 +0 0 0 1 @@ -1804,9 +1802,9 @@ 0 0 0 -1 0 0 +1 0 0 0 @@ -1815,6 +1813,9 @@ 1 0 1 +1 +0 +0 0 0 0 @@ -1823,7 +1824,6 @@ 0 0 0 -1 0 0 1 @@ -1833,7 +1833,7 @@ 0 0 1 -1 +0 1 1 0 @@ -1842,14 +1842,11 @@ 0 1 0 -1 -1 +0 1 1 0 0 -1 -1 0 0 1 @@ -1857,22 +1854,25 @@ 0 0 0 -1 0 1 0 1 +0 +0 +0 1 0 0 0 0 -1 +0 +0 0 0 1 -1 -1 +0 +0 0 0 0 @@ -1882,6 +1882,7 @@ 0 0 0 +1 0 0 0 @@ -1889,22 +1890,21 @@ 0 0 0 -1 0 1 0 0 -1 -1 +0 +0 1 0 +0 1 0 0 1 1 1 -0 1 0 0 @@ -1915,7 +1915,7 @@ 0 0 0 -0 +1 1 0 0 @@ -1934,10 +1934,13 @@ 1 1 0 +1 +1 +1 +1 0 0 0 -1 0 0 0 @@ -1945,15 +1948,12 @@ 0 0 0 -1 0 -1 0 0 0 1 0 -1 0 1 0 @@ -1968,26 +1968,26 @@ 1 1 1 -1 0 -1 -1 -1 0 0 -1 -1 -1 +0 1 0 0 0 +0 +0 +0 +0 +0 +0 1 +0 +0 +0 1 -1 -1 -1 -1 +0 1 0 1 @@ -1995,7 +1995,7 @@ 0 0 1 -1 +0 1 0 0 @@ -2008,41 +2008,32 @@ 0 0 0 -1 0 0 0 0 0 -1 0 1 -1 -1 +0 +0 1 0 1 0 0 -1 0 0 -1 -1 0 0 0 0 0 0 -1 -1 0 0 0 0 -1 -1 0 0 1 @@ -2050,17 +2041,14 @@ 0 0 0 +1 0 0 -1 0 -1 0 0 0 -1 0 -1 0 0 0 @@ -2068,17 +2056,10 @@ 0 0 0 -1 -1 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 @@ -2095,8 +2076,7 @@ 0 1 1 -1 -1 +0 0 1 0 @@ -2109,12 +2089,13 @@ 0 1 0 +1 0 -0 -0 +1 0 0 1 +0 1 0 1 @@ -2123,6 +2104,11 @@ 0 0 0 +1 +0 +0 +0 +0 0 0 1 @@ -2133,13 +2119,14 @@ 0 1 0 -1 0 0 0 -1 +0 +0 0 1 +1 0 0 1 @@ -2147,7 +2134,8 @@ 0 0 0 -1 +0 +0 0 1 0 @@ -2158,23 +2146,33 @@ 0 0 0 +0 1 0 +1 0 0 0 0 1 0 +0 +1 1 +0 1 0 0 +0 1 +0 +0 1 0 +0 1 1 +0 1 0 0 @@ -2182,6 +2180,9 @@ 0 1 0 +0 +0 +0 1 0 0 @@ -2191,17 +2192,15 @@ 0 0 0 -1 0 0 1 -1 0 0 0 -1 0 -1 +0 +0 1 0 0 @@ -2211,12 +2210,13 @@ 0 0 1 +1 0 1 1 1 0 -1 +0 0 0 0 @@ -2225,25 +2225,16 @@ 0 0 0 -1 -1 -1 0 0 -1 0 -1 -1 0 0 1 -1 0 1 0 -1 0 -1 0 1 0 @@ -2252,24 +2243,24 @@ 0 0 0 +1 0 -0 +1 0 1 0 0 0 -1 -1 0 +1 0 0 1 -1 0 0 0 1 +1 0 1 0 @@ -2279,10 +2270,9 @@ 0 0 0 -1 0 0 -1 +0 0 1 0 @@ -2291,17 +2281,27 @@ 0 0 0 +0 1 0 1 +0 +0 +0 1 0 0 0 0 +0 1 0 0 +0 +0 +0 +0 +1 1 1 0 @@ -2319,27 +2319,27 @@ 0 1 0 -1 0 0 0 -1 0 +1 0 1 +1 0 1 0 0 -1 0 0 +1 0 0 0 0 1 -1 +0 0 1 0 @@ -2348,16 +2348,16 @@ 0 1 0 -1 +0 0 0 0 1 0 0 -1 0 0 +1 0 0 1 @@ -2367,7 +2367,7 @@ 1 0 0 -1 +0 1 0 0 @@ -2375,11 +2375,7 @@ 0 0 0 -1 -1 0 -1 -1 0 0 0 @@ -2388,32 +2384,32 @@ 0 0 1 +0 +0 +1 +0 1 1 0 0 1 1 -0 1 -0 1 +0 +0 1 0 1 0 0 0 -1 0 0 -1 -1 0 0 1 0 -1 0 0 0 @@ -2423,13 +2419,17 @@ 0 0 0 -1 +0 +0 +0 0 1 +0 1 1 0 -1 +0 +0 0 0 0 @@ -2441,44 +2441,44 @@ 0 1 0 -0 1 1 0 0 0 1 -0 1 -0 1 1 +0 +1 1 0 0 0 0 0 +1 0 0 0 1 0 0 -1 0 -1 0 +1 0 0 0 +1 0 0 0 1 0 0 -1 +0 1 0 0 @@ -2501,32 +2501,29 @@ 1 0 1 -1 +0 0 1 1 0 0 0 -1 -1 -1 0 -1 -1 +0 +0 +0 +0 +0 0 0 1 1 0 1 -1 -0 0 0 0 0 -1 0 0 1 @@ -2534,23 +2531,26 @@ 1 0 0 +1 +0 0 0 0 0 1 1 +1 +0 0 0 -1 0 -1 1 0 0 0 -1 -1 +0 +0 +0 0 1 0 @@ -2563,12 +2563,12 @@ 0 0 1 -1 +0 0 1 0 0 -1 +0 0 1 0 @@ -2577,30 +2577,30 @@ 0 0 1 -0 1 0 0 0 0 0 +1 0 0 0 1 0 -1 0 -1 0 0 -1 +0 0 1 0 0 -1 0 +1 +1 +1 0 1 0 @@ -2608,20 +2608,15 @@ 0 0 0 -1 0 -1 0 0 0 0 0 0 -1 0 0 -1 -1 0 1 0 @@ -2629,14 +2624,19 @@ 0 0 1 +0 +0 +0 1 +0 1 0 0 0 +0 +1 1 1 -0 0 0 0 @@ -2648,25 +2648,25 @@ 0 0 0 -1 0 -1 0 1 0 1 -1 0 0 +1 +0 0 0 1 +1 0 0 1 -1 0 1 +0 1 0 0 @@ -2683,18 +2683,15 @@ 0 1 0 -1 0 -1 0 1 +0 +0 1 1 1 -1 -0 0 -1 0 0 0 @@ -2706,11 +2703,9 @@ 0 0 0 -1 0 0 0 -1 0 0 0 @@ -2721,16 +2716,21 @@ 0 0 1 -1 0 0 0 0 1 +1 +0 +0 +0 0 0 1 +0 1 +0 1 1 0 @@ -2738,7 +2738,7 @@ 1 0 0 -1 +0 0 1 0 @@ -2747,7 +2747,7 @@ 0 0 0 -1 +0 0 0 0 @@ -2758,45 +2758,40 @@ 1 0 0 -1 0 0 +1 0 0 0 0 1 1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 1 0 +0 1 0 0 -1 0 0 0 0 0 1 +1 +0 0 0 0 0 -1 0 0 0 @@ -2805,6 +2800,11 @@ 0 0 0 +0 +0 +0 +0 +0 1 0 0 @@ -2813,22 +2813,23 @@ 0 0 0 -1 0 0 0 -1 0 0 -1 0 -1 0 0 +0 +1 +0 +1 1 1 0 1 +1 0 0 0 @@ -2838,11 +2839,9 @@ 1 0 0 -1 -0 0 1 -0 +1 0 0 0 @@ -2851,34 +2850,34 @@ 0 1 1 +1 0 0 0 0 0 -0 +1 0 1 0 0 0 0 -1 +0 0 1 0 0 0 0 +0 1 -1 -1 +0 1 0 0 1 0 -1 0 0 0 @@ -2887,9 +2886,10 @@ 0 0 0 -1 0 0 +1 +0 0 0 1 @@ -2909,8 +2909,8 @@ 0 0 1 -0 1 +0 1 0 0 @@ -2920,23 +2920,18 @@ 0 1 0 -1 +0 0 1 1 0 -1 0 -1 0 -1 0 0 -1 0 -1 -1 -1 +0 +0 0 0 0 @@ -2944,12 +2939,16 @@ 0 0 0 -1 -1 +0 +0 +0 +0 0 1 0 0 +1 +1 0 1 1 @@ -2964,6 +2963,7 @@ 0 0 0 +0 1 0 0 @@ -2975,14 +2975,10 @@ 1 0 0 -1 -0 0 1 0 0 -1 -1 0 0 0 @@ -2990,19 +2986,21 @@ 0 0 0 -1 +0 0 0 0 0 1 0 +0 1 +0 +0 1 0 0 0 -1 0 0 0 @@ -3010,6 +3008,8 @@ 0 1 0 +1 +0 0 1 0 @@ -3021,33 +3021,33 @@ 0 0 0 -1 +0 +0 +0 0 1 +1 0 1 0 0 0 -1 0 0 1 0 -1 -1 0 1 0 0 0 +1 0 0 0 0 0 1 -1 0 0 1 @@ -3056,17 +3056,17 @@ 0 0 1 -1 +0 0 0 0 1 0 0 -1 0 0 0 +1 0 0 0 @@ -3078,19 +3078,18 @@ 0 0 0 -1 +0 0 0 0 0 1 1 -1 +0 1 1 0 0 -1 0 0 0 @@ -3099,25 +3098,23 @@ 0 0 0 -1 0 -1 -1 +0 +0 +0 +0 1 1 0 1 1 -1 0 1 0 0 -1 0 0 0 -1 0 0 0 @@ -3129,20 +3126,23 @@ 0 0 0 -1 -1 0 0 0 1 -1 0 0 0 0 +1 +0 +0 +0 0 +1 0 0 +1 0 1 0 @@ -3160,6 +3160,13 @@ 0 0 0 +1 +1 +0 +0 +0 +0 +1 0 1 0 @@ -3168,7 +3175,9 @@ 0 0 0 -1 +0 +0 +0 1 0 1 @@ -3176,31 +3185,22 @@ 0 0 0 -1 0 -1 0 -1 -1 0 1 0 -1 +0 0 0 1 0 0 -1 -1 -1 0 0 0 0 0 -1 -1 0 0 1 @@ -3211,7 +3211,7 @@ 0 0 0 -1 +0 0 0 1 @@ -3220,43 +3220,43 @@ 0 1 0 -0 +1 0 0 1 0 0 +0 1 0 0 -1 0 0 0 1 1 +1 0 +1 0 1 0 0 0 -1 0 0 1 -1 0 0 0 0 -1 0 -1 0 1 0 -1 +0 +0 +0 0 0 0 @@ -3269,42 +3269,37 @@ 1 0 0 -0 -0 1 0 +1 0 0 0 0 0 -1 0 0 -1 -1 0 0 1 1 0 0 -1 0 1 0 0 1 -1 0 0 0 1 1 0 -0 +1 1 0 +1 0 0 0 @@ -3314,16 +3309,21 @@ 0 0 1 -1 0 0 0 -1 0 1 1 +0 +0 1 1 +0 +0 +0 +0 +0 1 0 0 @@ -3332,7 +3332,6 @@ 0 0 0 -1 0 0 0 @@ -3344,7 +3343,6 @@ 0 0 0 -1 0 0 0 @@ -3352,12 +3350,12 @@ 0 0 0 -1 0 -1 0 +1 0 0 +1 0 0 0 @@ -3366,11 +3364,13 @@ 0 0 0 -1 0 0 +1 0 +1 0 +1 0 1 0 @@ -3389,7 +3389,7 @@ 1 0 0 -1 +0 0 1 0 @@ -3402,8 +3402,8 @@ 0 1 0 -1 -1 +0 +0 0 0 0 @@ -3421,7 +3421,7 @@ 0 0 0 -1 +0 0 0 1 @@ -3433,19 +3433,20 @@ 1 0 0 -1 0 0 0 0 0 0 -1 -1 +0 +0 +0 0 0 0 1 +0 1 1 0 @@ -3459,22 +3460,21 @@ 1 1 1 -1 -1 0 0 -1 +0 +0 0 1 -1 -1 +0 +0 1 0 0 0 0 1 -1 +0 0 0 1 @@ -3487,18 +3487,16 @@ 1 0 0 +1 0 0 1 -1 -1 -1 0 +1 0 0 0 0 -1 0 1 0 @@ -3506,22 +3504,24 @@ 0 1 0 -1 -1 -1 0 0 +1 0 1 +0 1 +0 1 1 0 -1 0 0 0 0 +1 +0 +1 0 0 0 @@ -3537,14 +3537,14 @@ 0 0 0 -1 +0 1 0 0 -1 0 0 -1 +0 +0 0 0 0 @@ -3565,16 +3565,12 @@ 0 0 0 +1 0 0 -1 0 -1 0 -1 0 -1 -1 0 0 0 @@ -3583,6 +3579,10 @@ 0 0 1 +0 +0 +0 +0 1 0 1 @@ -3597,7 +3597,7 @@ 0 0 1 -1 +0 0 0 1 @@ -3608,45 +3608,45 @@ 1 0 1 -1 0 0 -1 +0 +0 1 1 0 1 0 0 -1 0 0 0 0 +1 +0 0 0 1 1 -1 +0 0 0 0 0 1 +0 1 0 0 0 0 -1 0 0 -1 +0 +0 0 1 1 -1 -0 0 0 0 @@ -3658,27 +3658,27 @@ 1 0 1 -1 0 0 0 0 -1 0 -1 0 0 0 0 0 0 -1 +0 +0 0 0 0 0 0 1 +0 +1 1 0 0 @@ -3686,17 +3686,17 @@ 1 0 0 -1 0 0 0 0 1 +0 1 +0 1 1 0 -0 1 0 0 @@ -3706,22 +3706,21 @@ 1 0 0 +1 +0 0 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 +0 0 0 1 @@ -3730,6 +3729,7 @@ 0 0 0 +0 1 0 0 @@ -3737,30 +3737,30 @@ 0 0 0 -1 -1 0 -1 0 0 1 -1 0 0 -1 -1 0 0 0 +0 +1 1 0 0 0 +0 1 0 +0 1 0 1 +0 +0 1 0 0 @@ -3774,24 +3774,24 @@ 0 0 0 -1 0 -1 0 -1 0 -1 0 1 0 1 -1 +0 1 0 0 1 0 0 +0 +0 +0 +0 1 0 0 @@ -3811,8 +3811,8 @@ 0 0 0 -1 0 +1 0 0 0 @@ -3827,7 +3827,7 @@ 0 1 1 -1 +0 0 0 1 @@ -3853,9 +3853,8 @@ 0 0 0 -0 -0 1 +0 1 0 0 @@ -3868,33 +3867,34 @@ 0 0 0 -1 -1 -1 0 0 0 -1 0 -1 0 0 -1 +0 0 0 1 0 0 0 -1 0 0 0 0 -1 +0 +0 +0 +0 +0 0 0 1 +0 +0 +0 1 1 0 @@ -3903,7 +3903,7 @@ 0 0 0 -1 +0 0 0 0 @@ -3917,7 +3917,7 @@ 0 1 1 -0 +1 0 1 0 @@ -3925,19 +3925,19 @@ 0 0 0 +0 1 0 0 0 -1 0 -1 0 -1 0 1 -1 -1 +0 +0 +0 +0 0 0 1 @@ -3966,7 +3966,7 @@ 0 0 0 -1 +0 0 0 0 @@ -3978,33 +3978,29 @@ 0 0 0 -1 +0 0 1 1 0 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 -1 0 0 0 1 1 +1 +0 0 0 -1 0 0 0 @@ -4012,7 +4008,14 @@ 0 0 0 +1 +0 +1 +1 +0 0 +1 +1 0 0 0 @@ -4022,10 +4025,7 @@ 0 0 0 -1 0 -1 -1 0 1 1 @@ -4044,8 +4044,8 @@ 0 0 0 -0 1 +0 1 1 0 @@ -4060,23 +4060,23 @@ 1 1 0 -1 +0 1 0 0 -1 0 0 -1 +0 1 0 +1 0 0 1 0 0 0 -1 +0 0 0 0 @@ -4085,7 +4085,7 @@ 1 0 0 -1 +0 0 1 1 @@ -4095,6 +4095,9 @@ 0 1 0 +1 +0 +1 0 0 0 @@ -4107,11 +4110,8 @@ 0 0 0 -1 0 0 -1 -1 0 1 1 @@ -4122,10 +4122,10 @@ 0 0 0 -0 1 0 0 +0 1 0 0 @@ -4134,7 +4134,7 @@ 0 0 1 -1 +0 0 0 1 @@ -4145,37 +4145,37 @@ 0 0 0 -1 0 +1 0 0 0 0 1 0 -1 -1 +0 +0 0 1 0 0 0 -1 0 0 0 -1 -1 0 0 0 +1 +0 +1 0 0 0 0 0 1 -1 +0 1 1 1 @@ -4189,25 +4189,26 @@ 1 1 1 -1 0 0 0 -1 0 1 0 0 0 -1 0 1 -1 +0 +0 0 1 0 +0 +0 1 1 +0 1 1 1 @@ -4218,28 +4219,21 @@ 0 0 0 -1 0 0 0 1 -1 0 -1 0 0 0 0 0 -1 0 0 1 0 0 -0 -1 -0 1 0 0 @@ -4249,28 +4243,28 @@ 0 1 0 -1 0 0 0 0 +1 0 0 0 0 0 -1 0 -1 0 0 0 0 0 1 -1 0 1 +1 +0 +0 0 0 1 @@ -4278,7 +4272,6 @@ 0 0 0 -1 0 0 1 @@ -4289,19 +4282,24 @@ 0 0 0 -1 -1 0 0 0 -1 +0 +0 1 0 +0 1 1 0 +0 1 -1 +0 +0 +0 +0 +0 1 1 0 @@ -4312,6 +4310,8 @@ 0 0 0 +0 +0 1 0 1 @@ -4329,30 +4329,30 @@ 0 0 1 +0 1 +0 +0 +0 +0 1 0 0 0 -1 -1 0 -1 -1 0 0 0 0 -1 0 1 -1 +0 1 0 0 0 0 -1 +0 0 0 0 @@ -4365,50 +4365,50 @@ 1 1 1 +0 1 +0 1 +0 1 1 0 1 -1 0 0 0 0 0 0 +1 0 0 +1 0 0 0 -1 0 0 0 0 -1 0 0 0 +1 0 0 -1 0 0 0 +1 0 0 0 0 0 0 -1 0 0 -1 -1 0 0 1 @@ -4419,12 +4419,12 @@ 0 0 0 -1 0 0 0 0 -1 +0 +0 0 1 0 @@ -4437,11 +4437,7 @@ 0 0 0 -1 0 -1 -1 -1 0 1 0 @@ -4452,7 +4448,11 @@ 0 0 0 -1 +0 +0 +0 +0 +0 0 1 0 @@ -4466,7 +4466,7 @@ 0 1 0 -1 +0 0 0 0 @@ -4479,11 +4479,11 @@ 0 0 0 +1 0 0 0 1 -0 1 1 0 @@ -4495,19 +4495,17 @@ 0 0 0 -1 -1 -1 0 1 0 0 +1 0 0 1 0 0 -1 +0 0 1 0 @@ -4516,8 +4514,10 @@ 0 0 0 +0 +0 1 -1 +0 1 0 0 @@ -4528,8 +4528,8 @@ 1 1 0 -1 -1 +0 +0 1 0 0 @@ -4537,59 +4537,59 @@ 0 0 0 -1 -1 +0 +0 +0 0 0 1 1 0 -1 0 -1 0 0 -1 0 1 0 1 0 0 +0 +0 1 0 1 0 0 -1 +0 0 0 1 0 0 -1 +0 1 0 0 1 -1 -1 0 -1 0 -1 +0 +0 0 1 0 1 0 1 +1 +1 0 0 1 1 0 -0 +1 1 0 0 @@ -4611,17 +4611,15 @@ 1 0 0 -1 0 0 0 -1 0 +1 0 0 0 0 -1 0 0 0 @@ -4631,14 +4629,16 @@ 0 0 0 +0 +0 +1 1 1 0 0 0 0 -1 -1 +0 0 1 1 @@ -4656,7 +4656,7 @@ 0 1 1 -1 +0 0 0 0 @@ -4686,7 +4686,7 @@ 0 0 0 -0 +1 0 1 0 @@ -4695,23 +4695,21 @@ 0 0 0 -1 0 0 +1 +0 0 0 1 -1 0 1 0 -1 0 0 0 0 0 -1 0 1 0 @@ -4723,32 +4721,34 @@ 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 -1 +0 +0 +0 +0 0 1 +0 1 0 0 0 -1 0 0 0 0 0 +0 +1 1 0 0 @@ -4762,7 +4762,6 @@ 0 1 0 -0 1 0 0 @@ -4774,6 +4773,7 @@ 0 1 1 +1 0 0 1 @@ -4789,26 +4789,26 @@ 0 0 0 -1 0 0 0 -1 -1 0 -1 -1 0 1 0 1 0 +0 1 +1 +0 0 +1 0 0 1 1 +1 0 1 1 @@ -4817,6 +4817,8 @@ 0 0 0 +0 +0 1 0 0 @@ -4825,8 +4827,6 @@ 0 0 0 -1 -1 0 0 0 @@ -4837,14 +4837,14 @@ 0 1 0 +1 0 0 -1 0 0 1 1 -1 +0 0 0 0 @@ -4852,33 +4852,25 @@ 0 0 0 -1 -1 0 1 0 0 -1 -1 0 -1 0 0 1 0 0 0 -1 -1 0 -1 0 -1 0 0 0 0 1 +0 1 0 0 @@ -4886,25 +4878,33 @@ 0 0 0 +0 +0 +0 +0 +0 1 +0 +0 1 1 0 0 0 0 -0 1 +0 1 1 +0 1 1 0 0 +1 0 0 0 -1 0 0 0 @@ -4917,25 +4917,25 @@ 1 1 1 -0 1 0 0 0 0 0 -0 1 0 0 0 0 -1 0 0 +1 0 1 +0 1 +0 1 1 0 @@ -4949,13 +4949,8 @@ 0 0 0 -1 -1 -1 0 0 -1 -1 0 0 0 @@ -4968,15 +4963,20 @@ 0 0 0 -1 +0 +0 1 0 +1 +1 0 0 0 0 1 0 +1 +1 0 1 0 @@ -4987,23 +4987,20 @@ 0 0 0 -0 1 -0 +1 0 1 1 -0 +1 +1 1 0 0 0 0 -1 0 -1 0 -1 0 0 1 @@ -5012,14 +5009,16 @@ 1 0 0 +1 0 0 -0 +1 0 0 1 0 -1 +0 +0 1 1 1 @@ -5028,7 +5027,8 @@ 0 0 0 -1 +0 +0 1 0 0 @@ -5043,19 +5043,18 @@ 0 1 0 -1 -0 0 -1 0 0 +1 0 0 0 0 0 1 -0 +1 +1 0 0 0 @@ -5064,20 +5063,20 @@ 0 0 0 -1 0 0 0 -1 +0 0 1 -1 +0 1 1 0 1 +0 1 -1 +0 1 0 0 @@ -5085,21 +5084,22 @@ 0 0 0 -1 0 -1 -1 0 0 0 0 -1 +0 +0 +0 0 1 +0 +0 1 1 0 -1 +0 0 1 0 @@ -5117,15 +5117,15 @@ 0 1 0 +1 +1 +1 +0 0 0 -1 0 0 -1 0 -1 -1 0 0 0 @@ -5133,14 +5133,14 @@ 0 0 0 -1 0 -1 0 0 -1 -1 0 +0 +0 +0 +1 1 0 1 @@ -5163,7 +5163,7 @@ 0 1 0 -0 +1 0 0 1 @@ -5199,22 +5199,21 @@ 0 0 0 -1 +0 0 0 1 1 0 +1 0 0 0 -1 0 0 0 0 1 -1 0 0 0 @@ -5224,16 +5223,14 @@ 0 1 0 +1 0 0 0 0 0 0 -1 0 -1 -1 0 1 1 @@ -5241,7 +5238,10 @@ 1 0 0 +1 +0 0 +1 0 0 1 @@ -5253,20 +5253,20 @@ 0 0 0 -1 +0 0 1 0 0 -1 0 -1 0 0 0 -1 0 -1 +0 +0 +0 +0 0 1 0 diff --git a/dev-0/outNB.tsv b/dev-0/outNB.tsv new file mode 100644 index 0000000..962881e --- /dev/null +++ b/dev-0/outNB.tsv @@ -0,0 +1,5272 @@ +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +1 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 diff --git a/run.ipynb b/run.ipynb index 5838b91..6446a0e 100644 --- a/run.ipynb +++ b/run.ipynb @@ -2,134 +2,587 @@ "cells": [ { "cell_type": "code", - "execution_count": 9, + "execution_count": 27, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ "#!/usr/bin/env python\n", "# coding: utf-8\n", - "\n", - "from sklearn.naive_bayes import MultinomialNB\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.feature_extraction.text import CountVectorizer\n", "import lzma\n", - "\n", + "from gensim.models import Word2Vec\n", + "import gensim.downloader\n", + "import numpy as np\n", + "import pandas as pd\n", + "import torch" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ "X_train = lzma.open(\"train/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", - "y_train = open('train/expected.tsv').readlines()\n", + "y_train = np.array(open('train/expected.tsv').readlines())\n", "X_dev0 = lzma.open(\"dev-0/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", - "y_expected_dev0 = open(\"dev-0/expected.tsv\", \"r\").readlines()\n", + "y_expected_dev0 = np.array(open(\"dev-0/expected.tsv\", \"r\").readlines())\n", "X_test = lzma.open(\"test-A/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 3, + "metadata": {}, "outputs": [], "source": [ - "count_vect = CountVectorizer()\n", - "X_train_counts = count_vect.fit_transform(X_train)\n", - "X_dev0_counts = count_vect.transform(X_dev0)\n", - "X_test_counts = count_vect.transform(X_test)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + "X_train = [line.split() for line in X_train]\n", + "X_dev0 = [line.split() for line in X_dev0]\n", + "X_test = [line.split() for line in X_test]" + ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 62, + "metadata": {}, "outputs": [], "source": [ - "clf = MultinomialNB().fit(X_train_counts, y_train)\n", + "model_w2v = Word2Vec(X_train, vector_size=100, window=5, min_count=1, workers=4)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [], + "source": [ + "def vectorize(model, data):\n", + " return np.array([np.mean([model.wv[word] if word in model.wv.key_to_index else np.zeros(100, dtype=float) for word in doc], axis=0) for doc in data])\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "X_train_w2v = vectorize(model_w2v, X_train)\n", + "X_dev0_w2v = vectorize(model_w2v, X_dev0)\n", + "X_test_w2v = vectorize(model_w2v, X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "FEATURES = 100\n", "\n", - "y_predicted_dev0_MNB = clf.predict(X_dev0_counts)\n", - "y_predicted_test_MNB = clf.predict(X_test_counts)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + "class NeuralNetworkModel(torch.nn.Module):\n", + "\n", + " def __init__(self):\n", + " super(NeuralNetworkModel, self).__init__()\n", + " self.fc1 = torch.nn.Linear(FEATURES,500)\n", + " self.fc2 = torch.nn.Linear(500,1)\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = torch.relu(x)\n", + " x = self.fc2(x)\n", + " x = torch.sigmoid(x)\n", + " return x" + ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 145, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "nn_model = NeuralNetworkModel()" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "BATCH_SIZE = 42" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "criterion = torch.nn.BCELoss()" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "optimizer = torch.optim.SGD(nn_model.parameters(), lr = 0.1)" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, + "outputs": [], + "source": [ + "def get_loss_acc(model, X_dataset, Y_dataset):\n", + " loss_score = 0\n", + " acc_score = 0\n", + " items_total = 0\n", + " model.eval()\n", + " for i in range(0, Y_dataset.shape[0], BATCH_SIZE):\n", + " X = np.array(X_dataset[i:i+BATCH_SIZE]).astype(np.float32)\n", + " X = torch.tensor(X)\n", + " Y = Y_dataset[i:i+BATCH_SIZE]\n", + " Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1)\n", + " Y_predictions = model(X)\n", + " acc_score += torch.sum((Y_predictions > 0.5) == Y).item()\n", + " items_total += Y.shape[0]\n", + "\n", + " loss = criterion(Y_predictions, Y)\n", + "\n", + " loss_score += loss.item() * Y.shape[0]\n", + " return (loss_score / items_total), (acc_score / items_total)" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(model, data):\n", + " model.eval()\n", + " predictions = []\n", + " for x in data:\n", + " X = torch.tensor(np.array(x).astype(np.float32))\n", + " Y_predictions = model(X)\n", + " if Y_predictions[0] > 0.5:\n", + " predictions.append(\"1\")\n", + " else:\n", + " predictions.append(\"0\")\n", + " return predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": { + "pycharm": { + "is_executing": true, + "name": "#%%\n" + } + }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy dev0: 0.8025417298937785\n" - ] + "data": { + "text/plain": [ + "0" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.49161445487174543, 0.7499197110287693)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4990149180719994, 0.7420333839150227)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.486242138754709, 0.7533833599812141)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4960476360955079, 0.7448786039453718)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "2" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.48170865143118824, 0.7566018254086104)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.49339661830880754, 0.7448786039453718)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "3" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.47863767532834156, 0.7587877573995352)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.49210414077877457, 0.7503793626707133)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "4" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4755889592268004, 0.7613466446116604)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.49055553189223017, 0.753793626707132)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "5" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.47395927866325194, 0.7623273787118541)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4905445413022374, 0.7541729893778453)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "6" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4721670034531442, 0.7639055318237855)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4896522785377249, 0.7522761760242792)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "7" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4713666787153674, 0.7644166186083936)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4897225151384003, 0.7532245827010622)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "8" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4687599671611641, 0.7661674361745845)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4882916720620779, 0.7524658573596358)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "9" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.4669961705231401, 0.767617817590364)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0.48753329053272426, 0.7534142640364189)" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "accuracy_dev0_MNB = accuracy_score(y_expected_dev0, y_predicted_dev0_MNB)\n", - "print(f\"Accuracy dev0: {accuracy_dev0_MNB}\")\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + "for epoch in range(10):\n", + " loss_score = 0\n", + " acc_score = 0\n", + " items_total = 0\n", + " nn_model.train()\n", + " for i in range(0, y_train.shape[0], BATCH_SIZE):\n", + " X = X_train_w2v[i:i+BATCH_SIZE]\n", + " X = torch.tensor(X)\n", + " Y = y_train[i:i+BATCH_SIZE]\n", + " Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1)\n", + " Y_predictions = nn_model(X)\n", + " acc_score += torch.sum((Y_predictions > 0.5) == Y).item()\n", + " items_total += Y.shape[0]\n", + "\n", + " optimizer.zero_grad()\n", + " loss = criterion(Y_predictions, Y)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " loss_score += loss.item() * Y.shape[0]\n", + "\n", + " display(epoch)\n", + " display(get_loss_acc(nn_model, X_train_w2v, y_train))\n", + " display(get_loss_acc(nn_model, X_dev0_w2v, y_expected_dev0))" + ] }, { "cell_type": "code", - "execution_count": 13, - "outputs": [], - "source": [ - "open(\"dev-0/out.tsv\", mode='w').writelines(y_predicted_dev0_MNB)\n", - "open(\"test-A/out.tsv\", mode='w').writelines(y_predicted_test_MNB)" - ], + "execution_count": 152, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "y_pred_dev0 = predict(nn_model, X_dev0_w2v)\n", + "y_pred_test = predict(nn_model, X_test_w2v)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 158, + "metadata": {}, + "outputs": [], + "source": [ + "open('dev-0/out.tsv', 'w').writelines([i+'\\n' for i in y_pred_dev0])" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": {}, + "outputs": [], + "source": [ + "open('test-A/out.tsv', 'w').writelines([i+'\\n' for i in y_pred_test])" + ] }, { "cell_type": "code", "execution_count": null, + "metadata": {}, "outputs": [], - "source": [], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.9.7" } }, "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file + "nbformat_minor": 1 +} diff --git a/run.py b/run.py old mode 100644 new mode 100755 index 20b9f90..a3e61aa --- a/run.py +++ b/run.py @@ -1,24 +1,114 @@ #!/usr/bin/env python # coding: utf-8 -from sklearn.naive_bayes import MultinomialNB -from sklearn.metrics import accuracy_score -from sklearn.feature_extraction.text import CountVectorizer import lzma +from gensim.models import Word2Vec +import gensim.downloader +import numpy as np +import pandas as pd +import torch X_train = lzma.open("train/in.tsv.xz", mode='rt', encoding='utf-8').readlines() -y_train = open('train/expected.tsv').readlines() +y_train = np.array(open('train/expected.tsv').readlines()) X_dev0 = lzma.open("dev-0/in.tsv.xz", mode='rt', encoding='utf-8').readlines() -y_expected_dev0 = open("dev-0/expected.tsv", "r").readlines() +y_expected_dev0 = np.array(open("dev-0/expected.tsv", "r").readlines()) X_test = lzma.open("test-A/in.tsv.xz", mode='rt', encoding='utf-8').readlines() -count_vect = CountVectorizer() -X_train_counts = count_vect.fit_transform(X_train) -X_dev0_counts = count_vect.transform(X_dev0) -X_test_counts = count_vect.transform(X_test) +X_train = [line.split() for line in X_train] +X_dev0 = [line.split() for line in X_dev0] +X_test = [line.split() for line in X_test] -clf = MultinomialNB().fit(X_train_counts, y_train) -y_predicted_dev0_MNB = clf.predict(X_dev0_counts) -y_predicted_test_MNB = clf.predict(X_test_counts) +model_w2v = Word2Vec(X_train, vector_size=100, window=5, min_count=1, workers=4) -open("dev-0/out.tsv", mode='w').writelines(y_predicted_dev0_MNB) -open("test-A/out.tsv", mode='w').writelines(y_predicted_test_MNB) +def vectorize(model, data): + return np.array([np.mean([model.wv[word] if word in model.wv.key_to_index else np.zeros(100, dtype=float) for word in doc], axis=0) for doc in data]) + + +X_train_w2v = vectorize(model_w2v, X_train) +X_dev0_w2v = vectorize(model_w2v, X_dev0) +X_test_w2v = vectorize(model_w2v, X_test) + + +FEATURES = 100 + +class NeuralNetworkModel(torch.nn.Module): + + def __init__(self): + super(NeuralNetworkModel, self).__init__() + self.fc1 = torch.nn.Linear(FEATURES,500) + self.fc2 = torch.nn.Linear(500,1) + + def forward(self, x): + x = self.fc1(x) + x = torch.relu(x) + x = self.fc2(x) + x = torch.sigmoid(x) + return x + + +nn_model = NeuralNetworkModel() +BATCH_SIZE = 42 +criterion = torch.nn.BCELoss() +optimizer = torch.optim.SGD(nn_model.parameters(), lr = 0.1) + +def get_loss_acc(model, X_dataset, Y_dataset): + loss_score = 0 + acc_score = 0 + items_total = 0 + model.eval() + for i in range(0, Y_dataset.shape[0], BATCH_SIZE): + X = np.array(X_dataset[i:i+BATCH_SIZE]).astype(np.float32) + X = torch.tensor(X) + Y = Y_dataset[i:i+BATCH_SIZE] + Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1) + Y_predictions = model(X) + acc_score += torch.sum((Y_predictions > 0.5) == Y).item() + items_total += Y.shape[0] + + loss = criterion(Y_predictions, Y) + + loss_score += loss.item() * Y.shape[0] + return (loss_score / items_total), (acc_score / items_total) + +def predict(model, data): + model.eval() + predictions = [] + for x in data: + X = torch.tensor(np.array(x).astype(np.float32)) + Y_predictions = model(X) + if Y_predictions[0] > 0.5: + predictions.append("1") + else: + predictions.append("0") + return predictions + +for epoch in range(10): + loss_score = 0 + acc_score = 0 + items_total = 0 + nn_model.train() + for i in range(0, y_train.shape[0], BATCH_SIZE): + X = X_train_w2v[i:i+BATCH_SIZE] + X = torch.tensor(X) + Y = y_train[i:i+BATCH_SIZE] + Y = torch.tensor(Y.astype(np.float32)).reshape(-1,1) + Y_predictions = nn_model(X) + acc_score += torch.sum((Y_predictions > 0.5) == Y).item() + items_total += Y.shape[0] + + optimizer.zero_grad() + loss = criterion(Y_predictions, Y) + loss.backward() + optimizer.step() + + loss_score += loss.item() * Y.shape[0] + + display(epoch) + display(get_loss_acc(nn_model, X_train_w2v, y_train)) + display(get_loss_acc(nn_model, X_dev0_w2v, y_expected_dev0)) + + +y_pred_dev0 = predict(nn_model, X_dev0_w2v) +y_pred_test = predict(nn_model, X_test_w2v) + +open('dev-0/out.tsv', 'w').writelines([i+'\n' for i in y_pred_dev0]) +open('test-A/out.tsv', 'w').writelines([i+'\n' for i in y_pred_test]) \ No newline at end of file diff --git a/runNB.ipynb b/runNB.ipynb new file mode 100644 index 0000000..5838b91 --- /dev/null +++ b/runNB.ipynb @@ -0,0 +1,135 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "outputs": [], + "source": [ + "#!/usr/bin/env python\n", + "# coding: utf-8\n", + "\n", + "from sklearn.naive_bayes import MultinomialNB\n", + "from sklearn.metrics import accuracy_score\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "import lzma\n", + "\n", + "X_train = lzma.open(\"train/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", + "y_train = open('train/expected.tsv').readlines()\n", + "X_dev0 = lzma.open(\"dev-0/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()\n", + "y_expected_dev0 = open(\"dev-0/expected.tsv\", \"r\").readlines()\n", + "X_test = lzma.open(\"test-A/in.tsv.xz\", mode='rt', encoding='utf-8').readlines()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [], + "source": [ + "count_vect = CountVectorizer()\n", + "X_train_counts = count_vect.fit_transform(X_train)\n", + "X_dev0_counts = count_vect.transform(X_dev0)\n", + "X_test_counts = count_vect.transform(X_test)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [], + "source": [ + "clf = MultinomialNB().fit(X_train_counts, y_train)\n", + "\n", + "y_predicted_dev0_MNB = clf.predict(X_dev0_counts)\n", + "y_predicted_test_MNB = clf.predict(X_test_counts)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy dev0: 0.8025417298937785\n" + ] + } + ], + "source": [ + "accuracy_dev0_MNB = accuracy_score(y_expected_dev0, y_predicted_dev0_MNB)\n", + "print(f\"Accuracy dev0: {accuracy_dev0_MNB}\")\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [], + "source": [ + "open(\"dev-0/out.tsv\", mode='w').writelines(y_predicted_dev0_MNB)\n", + "open(\"test-A/out.tsv\", mode='w').writelines(y_predicted_test_MNB)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/runNB.py b/runNB.py new file mode 100644 index 0000000..20b9f90 --- /dev/null +++ b/runNB.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# coding: utf-8 +from sklearn.naive_bayes import MultinomialNB +from sklearn.metrics import accuracy_score +from sklearn.feature_extraction.text import CountVectorizer +import lzma + +X_train = lzma.open("train/in.tsv.xz", mode='rt', encoding='utf-8').readlines() +y_train = open('train/expected.tsv').readlines() +X_dev0 = lzma.open("dev-0/in.tsv.xz", mode='rt', encoding='utf-8').readlines() +y_expected_dev0 = open("dev-0/expected.tsv", "r").readlines() +X_test = lzma.open("test-A/in.tsv.xz", mode='rt', encoding='utf-8').readlines() + +count_vect = CountVectorizer() +X_train_counts = count_vect.fit_transform(X_train) +X_dev0_counts = count_vect.transform(X_dev0) +X_test_counts = count_vect.transform(X_test) + +clf = MultinomialNB().fit(X_train_counts, y_train) +y_predicted_dev0_MNB = clf.predict(X_dev0_counts) +y_predicted_test_MNB = clf.predict(X_test_counts) + +open("dev-0/out.tsv", mode='w').writelines(y_predicted_dev0_MNB) +open("test-A/out.tsv", mode='w').writelines(y_predicted_test_MNB) diff --git a/test-A/out.tsv b/test-A/out.tsv index 15cc96f..6909f16 100644 --- a/test-A/out.tsv +++ b/test-A/out.tsv @@ -1,4 +1,6 @@ 0 +0 +1 1 0 0 @@ -9,29 +11,26 @@ 0 0 0 -0 -0 1 0 0 -1 +0 0 0 1 1 0 0 -1 -1 0 1 +0 1 1 0 -1 0 1 0 +1 0 0 0 @@ -41,12 +40,13 @@ 0 0 0 +1 0 0 0 0 1 -0 +1 0 0 1 @@ -54,9 +54,9 @@ 0 0 0 -1 0 -1 +0 +0 0 1 0 @@ -79,14 +79,9 @@ 0 0 0 -1 -1 -1 0 -1 0 1 -1 0 1 0 @@ -100,53 +95,58 @@ 1 0 0 -1 -0 0 0 1 +0 +0 1 0 0 +0 1 1 0 +0 +0 1 +0 1 0 0 0 0 -1 -1 0 0 1 0 0 +1 0 0 +1 0 0 0 0 0 -1 0 1 0 0 -1 +0 +0 1 1 1 0 -1 0 1 0 0 -1 +0 +0 +0 0 1 1 @@ -156,21 +156,17 @@ 1 0 0 -1 +0 1 0 0 0 -1 0 -1 0 0 -1 -1 -1 0 -1 +0 +0 1 0 0 @@ -181,7 +177,11 @@ 0 0 0 -1 +0 +0 +0 +0 +0 0 1 1 @@ -192,17 +192,17 @@ 0 0 0 +1 0 0 +1 0 0 +1 0 0 0 0 -1 -1 -0 0 0 0 @@ -211,12 +211,12 @@ 0 0 0 -1 0 0 0 -1 -1 +0 +0 +0 0 0 1 @@ -231,12 +231,12 @@ 0 1 0 +0 1 1 -1 -0 0 0 +1 0 0 0 @@ -247,11 +247,11 @@ 0 0 1 +1 0 0 1 1 -1 0 0 0 @@ -259,21 +259,21 @@ 0 0 0 -1 -0 0 0 0 0 0 +1 0 0 -1 0 0 1 0 1 +0 +0 1 1 1 @@ -286,8 +286,6 @@ 1 1 1 -1 -1 0 1 0 @@ -295,70 +293,72 @@ 0 0 0 +0 1 -1 +0 +0 1 0 0 0 -1 0 0 0 0 0 -1 -1 0 1 0 0 1 0 +0 1 -1 +0 1 0 0 0 -1 0 -1 +0 +0 +0 1 1 0 -1 0 -1 0 0 0 0 0 0 -1 -1 0 0 -1 -1 +0 1 0 0 0 0 +0 1 +0 1 -1 +0 0 1 1 +1 +0 +0 +1 0 1 1 +1 0 0 -1 0 0 1 @@ -387,62 +387,57 @@ 0 0 0 +0 1 -1 -1 +0 1 0 0 0 -1 0 0 0 0 -1 0 +1 0 0 0 1 +1 0 0 -1 0 0 -1 0 -1 -1 0 -1 0 -1 0 0 0 +1 0 1 +0 1 0 +0 1 +0 +0 +0 1 0 0 0 0 0 -1 -1 +0 1 1 0 -1 0 -1 -1 0 -1 0 0 0 @@ -453,7 +448,7 @@ 0 0 0 -1 +0 0 0 0 @@ -468,38 +463,38 @@ 0 0 1 -1 0 0 0 0 0 -1 -1 0 -1 0 0 -1 0 -1 0 -1 0 1 0 +0 1 0 +0 1 0 1 0 1 +0 +0 +0 1 0 +1 0 1 0 +1 0 0 0 @@ -507,21 +502,26 @@ 0 0 0 -1 -1 0 1 +0 1 0 1 +0 +0 1 +0 +0 +0 1 1 0 -1 0 0 -1 +0 +0 +0 1 0 1 @@ -535,12 +535,12 @@ 0 0 0 -1 +0 0 1 0 0 -1 +0 0 0 0 @@ -553,11 +553,10 @@ 0 0 1 -1 -1 -1 0 1 +0 +0 1 0 0 @@ -565,6 +564,7 @@ 0 0 0 +0 1 0 0 @@ -573,47 +573,47 @@ 0 0 0 -1 0 0 0 0 -1 0 1 0 1 1 0 +1 0 0 0 -1 0 1 0 0 -1 -1 -0 0 0 1 0 0 0 +0 1 1 0 1 +0 +0 +0 1 0 0 +0 1 1 0 0 -0 +1 1 0 0 @@ -624,7 +624,7 @@ 0 0 0 -1 +0 0 1 0 @@ -634,8 +634,8 @@ 0 0 0 -1 -1 +0 +0 1 0 0 @@ -653,14 +653,14 @@ 1 0 0 -1 +0 0 0 1 0 0 0 -1 +0 0 1 0 @@ -691,30 +691,30 @@ 0 0 1 +1 +0 0 0 -1 -1 0 1 0 0 0 1 -1 0 1 -0 -0 +1 0 0 0 0 1 0 +1 +1 0 -0 -0 +1 +1 0 1 0 @@ -732,14 +732,12 @@ 0 0 0 -1 +0 1 0 0 0 -1 0 -1 0 0 0 @@ -747,6 +745,8 @@ 0 1 0 +1 +1 0 0 0 @@ -765,32 +765,32 @@ 0 0 1 -0 +1 0 0 0 1 -0 1 0 +0 1 0 0 1 0 0 -1 -1 +0 +0 1 1 0 -1 0 0 0 0 -1 -1 +0 +0 +0 1 1 1 @@ -808,23 +808,16 @@ 0 0 1 -1 0 0 -1 -1 -1 -0 -1 -1 0 0 +1 0 0 0 0 0 -1 0 1 1 @@ -832,34 +825,34 @@ 0 0 0 +0 1 0 0 0 -1 -1 -1 -1 0 0 +1 0 0 -1 0 0 0 1 +1 0 0 0 0 1 1 +0 1 1 0 0 0 +0 1 1 0 @@ -867,11 +860,18 @@ 0 0 0 -0 1 0 0 -1 +0 +0 +0 +0 +0 +0 +0 +0 +0 0 0 1 @@ -884,17 +884,17 @@ 1 0 1 -1 0 0 0 0 -1 0 0 0 0 -1 +0 +0 +0 1 0 0 @@ -903,44 +903,40 @@ 0 0 0 -1 0 1 0 -1 +0 1 1 1 0 0 -1 0 1 -1 0 0 0 0 -1 0 0 0 -1 0 0 -0 -1 1 0 0 0 0 +0 1 0 +1 +0 +1 0 0 0 -1 0 0 0 @@ -951,14 +947,23 @@ 0 0 0 +0 +0 1 +0 +0 1 0 +0 1 +0 1 0 0 0 +0 +0 +0 1 0 0 @@ -967,26 +972,21 @@ 1 0 0 -1 0 0 0 -1 0 0 -1 -1 0 -1 0 0 0 0 0 -1 0 0 -1 +0 +0 0 0 1 @@ -998,32 +998,32 @@ 0 0 0 -1 +0 0 1 0 0 0 +0 +0 +0 1 +0 +0 +0 1 0 0 0 0 -1 -1 -1 0 0 0 0 -1 0 1 -0 1 0 -1 0 0 0 @@ -1034,28 +1034,28 @@ 1 0 1 -1 +0 0 0 1 1 0 1 -1 0 0 -1 0 1 -1 -1 0 -1 +0 +0 1 0 +0 1 0 0 +0 +0 1 0 1 @@ -1068,13 +1068,13 @@ 0 0 0 -1 0 0 0 +1 +0 0 0 -1 0 1 0 @@ -1084,7 +1084,7 @@ 1 0 0 -1 +0 0 0 0 @@ -1108,26 +1108,26 @@ 0 0 0 -1 -1 -0 0 1 0 0 -0 1 0 +1 +1 +1 0 0 0 0 0 0 +1 +1 0 0 0 -1 0 0 0 @@ -1140,7 +1140,7 @@ 0 1 1 -0 +1 0 0 0 @@ -1151,22 +1151,22 @@ 0 0 1 -0 -0 -0 1 1 0 0 1 -1 0 0 1 0 +0 +0 1 +0 1 0 +0 1 0 0 @@ -1178,10 +1178,10 @@ 0 0 0 -1 0 -1 0 +1 +1 0 1 0 @@ -1189,15 +1189,15 @@ 1 0 1 -1 0 +1 0 0 0 0 0 1 -1 +0 0 1 0 @@ -1210,39 +1210,36 @@ 0 0 0 -1 0 -1 +0 +0 0 0 0 0 1 +0 1 -1 -1 -1 -1 +0 0 1 +0 1 0 0 -1 0 0 0 -1 -1 0 -1 -1 0 1 0 +0 1 0 0 +1 +0 0 0 0 @@ -1251,6 +1248,8 @@ 1 0 0 +1 +0 0 0 0 @@ -1258,25 +1257,26 @@ 1 0 0 -1 -1 0 0 0 -1 -1 0 0 0 0 0 -1 0 0 0 0 0 0 +1 +0 +0 +0 +0 +0 0 0 0 @@ -1299,10 +1299,7 @@ 1 0 1 -1 0 -1 -1 0 1 1 @@ -1312,56 +1309,59 @@ 0 0 0 -1 0 0 0 0 0 -1 0 -1 -1 -1 +0 +0 0 1 1 1 0 0 +0 1 1 0 0 0 +1 +1 0 0 1 0 +0 1 0 0 -1 0 0 0 0 0 1 -1 0 0 0 0 0 -1 +0 0 1 1 -0 1 0 1 +1 +0 +0 +0 +0 0 1 1 @@ -1374,7 +1374,7 @@ 0 1 0 -1 +0 0 0 0 @@ -1390,32 +1390,29 @@ 0 0 0 -0 1 0 -1 -1 0 0 0 0 +1 0 0 0 -1 -1 -1 0 0 1 1 0 +0 +0 1 0 0 0 1 -1 +0 0 1 0 @@ -1423,17 +1420,20 @@ 1 0 0 -1 0 0 0 -1 0 0 -1 0 1 +1 +0 +0 +0 0 +1 +1 0 0 1 @@ -1450,21 +1450,21 @@ 1 0 0 -1 0 0 -1 -1 -1 0 0 1 0 0 0 +1 +0 +0 0 0 0 +1 0 0 0 @@ -1478,20 +1478,20 @@ 0 0 1 +0 +0 +0 1 0 0 -1 0 0 0 -1 +0 0 1 -0 1 1 -0 1 0 1 @@ -1501,13 +1501,13 @@ 0 0 0 -1 0 +1 0 0 1 -1 -1 +0 +0 0 0 0 @@ -1518,11 +1518,13 @@ 0 0 1 -1 +0 0 0 0 1 +1 +1 0 0 0 @@ -1530,19 +1532,20 @@ 0 0 0 -1 0 0 0 0 0 1 -1 -1 +0 +0 0 0 0 1 +0 +0 1 0 0 @@ -1556,13 +1559,10 @@ 0 0 0 -1 0 -1 0 1 -1 -1 +0 1 1 1 @@ -1576,6 +1576,7 @@ 0 0 0 +1 0 0 0 @@ -1586,33 +1587,27 @@ 0 0 0 -1 0 0 0 0 1 +1 0 0 -1 0 0 -1 -1 0 0 0 0 -1 0 -1 0 0 0 1 0 0 -1 0 0 0 @@ -1621,18 +1616,20 @@ 0 0 0 +1 0 1 0 +1 0 +1 0 0 0 0 -1 -1 0 0 +1 0 0 0 @@ -1646,20 +1643,22 @@ 0 0 1 -0 1 0 1 +0 1 +0 1 +0 +0 +0 1 1 0 0 0 0 -0 -1 1 0 0 @@ -1667,17 +1666,14 @@ 0 0 0 -1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 @@ -1685,6 +1681,9 @@ 0 0 0 +1 +0 +0 0 0 0 @@ -1694,6 +1693,7 @@ 0 0 0 +0 1 0 0 @@ -1705,7 +1705,7 @@ 0 0 0 -1 +0 0 0 1 @@ -1713,8 +1713,8 @@ 0 0 1 -0 -0 +1 +1 1 0 0 @@ -1739,8 +1739,8 @@ 0 0 0 -1 0 +1 0 0 0 @@ -1751,21 +1751,19 @@ 1 1 0 -1 +0 0 1 0 1 0 0 -1 0 0 1 1 -1 -0 0 +1 0 0 0 @@ -1774,7 +1772,9 @@ 1 0 1 +0 1 +0 1 0 0 @@ -1782,7 +1782,7 @@ 0 0 0 -1 +0 0 1 0 @@ -1795,7 +1795,7 @@ 0 1 1 -1 +0 0 0 1 @@ -1804,8 +1804,8 @@ 0 0 1 -1 0 +1 0 0 0 @@ -1816,17 +1816,17 @@ 0 0 1 +0 1 0 0 -1 0 0 1 0 1 0 -1 +0 1 1 0 @@ -1835,10 +1835,10 @@ 0 0 1 -1 0 0 -1 +0 +0 0 0 1 @@ -1848,27 +1848,25 @@ 0 1 0 +1 0 0 0 -1 0 1 1 1 1 1 +1 0 0 -1 0 1 0 1 0 -1 0 -1 0 0 1 @@ -1876,6 +1874,8 @@ 1 0 0 +0 +0 1 0 0 @@ -1885,20 +1885,20 @@ 0 0 0 -1 +0 0 0 0 0 1 1 +1 0 0 0 0 0 1 -1 0 0 0 @@ -1907,17 +1907,15 @@ 0 1 0 -0 -1 1 1 1 +0 1 1 1 1 0 -1 0 0 0 @@ -1929,41 +1927,43 @@ 0 0 0 +0 +0 +0 +0 +0 +0 1 +0 1 0 0 +0 1 0 1 0 0 0 -1 0 0 0 0 0 0 -1 0 1 0 -1 -1 0 0 +1 0 0 1 -1 0 1 0 -1 -1 -1 +0 1 0 0 @@ -1971,14 +1971,14 @@ 0 1 0 -1 0 -1 -1 0 -1 +0 +0 0 1 +0 +0 1 0 0 @@ -1994,34 +1994,34 @@ 0 0 0 +1 0 0 0 1 0 1 -1 -0 0 0 0 +1 0 0 0 0 -1 0 0 1 0 0 0 +1 +0 0 0 0 1 -1 -1 +0 0 0 0 @@ -2050,22 +2050,22 @@ 0 0 0 -1 -1 0 +1 0 0 1 +1 0 0 1 1 -1 +0 1 0 0 0 -1 +0 0 1 0 @@ -2073,13 +2073,13 @@ 0 0 0 -1 +0 0 1 0 0 -1 -1 +0 +0 0 0 0 @@ -2098,10 +2098,10 @@ 0 0 0 -1 0 0 -1 +0 +0 1 0 1 @@ -2110,9 +2110,8 @@ 1 0 0 -0 -1 1 +0 1 1 1 @@ -2121,14 +2120,15 @@ 0 0 0 -1 +0 0 0 0 1 +0 1 1 -1 +0 0 0 1 @@ -2136,16 +2136,13 @@ 1 0 0 +0 1 1 0 0 0 -0 1 -0 -0 -0 1 0 0 @@ -2159,9 +2156,10 @@ 0 0 1 +0 +0 1 1 -0 1 0 0 @@ -2171,13 +2169,15 @@ 1 0 1 -1 -1 0 0 0 -1 -1 +0 +0 +0 +0 +0 +0 1 0 1 @@ -2195,16 +2195,13 @@ 0 0 0 -1 0 0 -1 0 -1 0 0 1 -1 +0 0 1 0 @@ -2212,17 +2209,13 @@ 0 0 0 -1 -1 0 0 -1 0 1 0 0 0 -0 1 0 0 @@ -2230,10 +2223,11 @@ 0 0 1 +1 +0 0 0 0 -1 0 0 1 @@ -2243,26 +2237,32 @@ 0 1 1 -0 1 0 1 0 +1 +1 +1 +1 0 +1 +1 +1 +1 +1 0 0 0 0 0 -0 -1 -0 1 1 0 0 0 -1 +0 +0 0 1 0 @@ -2277,11 +2277,8 @@ 0 0 0 -1 0 0 -1 -1 0 1 0 @@ -2294,19 +2291,16 @@ 0 1 0 -0 -0 -0 1 1 0 0 -1 +0 0 1 1 0 -1 +0 0 0 1 @@ -2314,11 +2308,8 @@ 0 0 0 -1 -1 0 1 -1 0 0 0 @@ -2327,26 +2318,26 @@ 1 0 1 -0 1 0 0 0 0 -0 1 1 0 0 -1 0 1 0 0 -1 +0 1 0 1 +0 +0 +0 1 0 0 @@ -2354,12 +2345,21 @@ 1 1 1 +0 +0 1 +0 +0 +0 +0 1 0 +0 +0 1 1 0 +0 1 1 1 @@ -2380,17 +2380,17 @@ 0 0 0 -1 -1 0 0 -1 +0 +0 +0 0 1 1 -1 -1 -1 +0 +0 +0 1 1 0 @@ -2398,34 +2398,34 @@ 0 1 0 -1 0 -1 +0 +0 0 0 0 0 1 0 -1 +0 0 1 0 0 0 0 -1 +0 0 0 0 0 1 -1 +0 1 0 0 0 -1 +0 1 0 1 @@ -2445,20 +2445,20 @@ 0 0 0 -1 0 0 0 0 -1 +0 1 1 0 -1 0 -1 0 0 +1 +1 +0 0 0 0 @@ -2480,8 +2480,8 @@ 1 1 0 -1 0 +1 0 1 1 @@ -2489,26 +2489,23 @@ 0 0 0 -1 -1 0 +1 0 0 0 1 1 +0 1 0 0 0 -1 -1 0 -1 0 0 0 -1 +0 0 0 1 @@ -2516,30 +2513,33 @@ 1 1 0 -0 1 0 0 0 0 +0 +0 +0 +0 1 0 1 0 1 0 +1 +0 +0 0 0 0 0 0 -1 0 0 0 -1 0 -1 1 0 0 @@ -2557,16 +2557,15 @@ 0 0 0 -1 -0 0 0 0 -1 0 0 1 +1 0 +1 0 0 0 @@ -2575,22 +2574,23 @@ 0 0 0 +1 0 1 0 0 0 1 -0 1 0 -1 0 1 +0 +0 +0 +0 1 1 -1 -0 0 0 1 @@ -2606,29 +2606,29 @@ 1 0 0 -1 +0 0 0 1 0 0 -1 -1 -1 -1 0 0 +1 0 0 0 1 +0 +0 1 0 +0 1 0 0 0 -1 +0 0 0 0 @@ -2647,62 +2647,61 @@ 0 0 0 -1 0 -1 -1 0 0 0 -1 0 0 0 -1 0 0 +0 +0 +1 +0 1 +0 1 0 0 0 -1 0 0 0 0 -1 0 1 0 1 +1 +1 +0 +0 0 0 0 -1 0 0 -1 0 -1 1 0 0 0 -1 0 -1 +0 +0 1 0 0 1 1 +0 1 0 0 0 0 -1 0 0 0 @@ -2713,7 +2712,8 @@ 0 0 0 -1 +0 +0 0 0 0 @@ -2726,15 +2726,15 @@ 1 0 0 -1 -1 +0 1 0 0 0 0 -1 -1 +0 +0 +0 1 0 0 @@ -2748,41 +2748,41 @@ 1 1 1 -1 -1 0 0 0 -1 -1 0 0 0 0 0 -1 0 -1 +0 0 0 1 0 +1 0 0 0 0 -1 0 0 1 0 0 0 +0 +1 1 0 0 0 -1 +0 +0 +0 +0 0 0 0 @@ -2801,53 +2801,53 @@ 0 0 1 -1 0 0 -1 -1 0 -1 0 0 -1 0 1 0 -1 +0 1 0 1 +0 1 1 0 1 1 -1 0 -1 0 -1 -1 -1 0 0 1 0 0 -1 -1 0 1 1 +0 +0 1 1 0 +0 +0 +0 +0 +0 1 0 1 0 0 +0 +1 +1 +0 1 1 1 @@ -2861,20 +2861,20 @@ 1 0 0 +1 +0 0 0 -1 0 0 0 -1 0 1 1 1 0 1 -1 +0 0 1 0 @@ -2884,16 +2884,16 @@ 0 0 0 -1 -1 0 0 0 -1 +0 0 1 +0 1 1 +0 1 0 0 @@ -2904,9 +2904,9 @@ 0 0 0 +0 1 1 -0 1 0 0 @@ -2915,17 +2915,17 @@ 0 1 0 -1 0 -1 0 0 -1 0 0 1 0 0 +0 +0 +0 1 1 1 @@ -2948,9 +2948,9 @@ 0 1 0 -1 0 -1 +0 +0 0 0 0 @@ -2958,12 +2958,12 @@ 1 1 0 +1 0 0 0 0 0 -1 0 0 0 @@ -2972,16 +2972,16 @@ 0 0 1 +1 +0 +1 +0 0 0 0 -1 0 0 -1 0 -1 -1 0 0 0 @@ -2995,23 +2995,27 @@ 0 0 1 -1 0 0 -1 0 -1 0 0 1 0 +0 1 0 0 +0 +0 1 +1 +0 0 0 0 +1 +1 0 0 1 @@ -3023,13 +3027,11 @@ 0 1 1 -1 0 1 +1 0 0 -1 -1 0 0 0 @@ -3038,12 +3040,10 @@ 0 0 0 -1 0 0 0 1 -1 0 0 0 @@ -3059,7 +3059,7 @@ 0 0 0 -0 +1 0 0 1 @@ -3083,12 +3083,12 @@ 0 0 0 -1 0 0 0 1 -1 +0 +0 0 0 0 @@ -3106,37 +3106,37 @@ 0 0 0 -1 -1 -1 0 -1 +0 +0 0 0 0 1 0 +1 +1 0 0 0 +1 0 0 0 0 -1 0 1 0 0 0 0 -1 -1 -1 +0 +0 0 0 0 1 +0 1 0 0 @@ -3147,28 +3147,28 @@ 0 1 1 -1 -1 0 0 0 -1 0 1 +1 +0 0 0 0 -1 0 1 +0 +0 1 1 0 0 -1 0 0 -1 +0 +0 0 0 1 @@ -3179,22 +3179,22 @@ 0 1 0 -1 0 0 0 -1 0 -1 0 0 0 +1 +0 +0 0 0 0 1 1 -0 +1 0 0 0 @@ -3208,25 +3208,25 @@ 1 1 1 -1 0 -1 0 1 +0 1 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 +0 +0 +0 +0 0 0 0 @@ -3257,12 +3257,12 @@ 0 1 1 -1 0 0 -1 0 -1 +0 +0 +0 0 0 1 @@ -3270,7 +3270,7 @@ 0 0 0 -1 +0 0 0 1 @@ -3280,8 +3280,8 @@ 0 0 0 -0 1 +0 1 0 0 @@ -3293,7 +3293,7 @@ 1 1 0 -1 +0 0 1 1 @@ -3301,16 +3301,13 @@ 1 0 0 -1 0 0 0 -1 0 +1 0 0 -1 -1 0 1 0 @@ -3330,7 +3327,10 @@ 0 0 0 -1 +0 +0 +0 +0 1 0 0 @@ -3346,12 +3346,9 @@ 0 0 0 -1 0 -1 0 0 -1 0 0 1 @@ -3362,37 +3359,36 @@ 0 0 0 -1 0 0 0 1 0 -1 0 -1 +0 1 0 1 0 1 0 +0 1 +0 +0 +0 1 1 1 0 +0 1 0 0 0 -1 0 0 -1 -1 0 -1 0 1 1 @@ -3400,43 +3396,51 @@ 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 -1 0 0 0 0 -1 +0 +0 0 1 0 0 +0 +0 1 +0 1 0 0 1 0 +0 +0 +0 +0 1 1 0 1 0 0 +0 +0 +0 +0 1 1 0 0 -1 +0 0 0 0 @@ -3450,15 +3454,12 @@ 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 @@ -3466,12 +3467,11 @@ 0 0 0 -1 -1 +0 1 0 0 -1 +0 0 0 0 @@ -3488,9 +3488,9 @@ 0 0 1 +0 1 -1 -1 +0 0 0 0 @@ -3501,7 +3501,7 @@ 0 1 0 -1 +0 1 0 1 @@ -3515,6 +3515,8 @@ 0 0 1 +0 +0 1 0 0 @@ -3524,33 +3526,29 @@ 0 0 0 +0 +0 1 1 0 1 -0 1 0 0 0 -0 -0 1 1 0 0 0 1 -1 -1 -1 -1 +0 +0 +0 1 1 0 -1 0 -1 0 0 0 @@ -3558,7 +3556,9 @@ 0 0 0 -1 +0 +0 +0 0 0 0 @@ -3569,9 +3569,9 @@ 0 1 0 -1 0 -1 +0 +0 0 1 0 @@ -3584,7 +3584,6 @@ 1 0 0 -0 1 0 0 @@ -3592,35 +3591,36 @@ 0 0 0 +0 +1 1 0 0 0 0 0 -1 0 0 -1 -1 0 1 0 0 0 +0 +0 1 0 +0 1 1 1 1 -0 1 0 0 0 1 -1 +0 0 1 1 @@ -3632,9 +3632,11 @@ 0 0 0 -1 0 0 +1 +1 +1 0 1 0 @@ -3642,39 +3644,37 @@ 0 0 0 -1 -1 0 0 0 0 1 -1 -0 0 0 0 -1 0 0 +1 0 0 0 0 0 1 +0 1 +0 1 0 0 0 1 -1 -1 0 +1 0 0 0 +1 0 0 1 @@ -3682,7 +3682,7 @@ 0 0 0 -1 +0 0 1 0 @@ -3692,14 +3692,14 @@ 0 0 0 -1 +0 1 0 0 1 0 0 -1 +0 0 1 1 @@ -3717,12 +3717,13 @@ 0 0 0 -0 1 0 0 0 +0 1 +0 1 1 0 @@ -3732,17 +3733,16 @@ 0 0 0 -0 1 0 0 -1 0 0 1 0 0 0 +0 1 1 0 @@ -3750,9 +3750,9 @@ 0 1 0 -0 1 0 +0 1 1 0 @@ -3761,25 +3761,25 @@ 0 0 0 -1 -1 0 +1 0 0 0 0 0 -1 0 0 1 0 0 1 +0 1 0 0 -1 +0 +0 0 1 1 @@ -3797,23 +3797,23 @@ 1 0 0 -0 +1 1 0 0 -1 +0 1 0 1 1 -0 +1 0 0 0 1 0 0 -1 +0 0 0 0 @@ -3837,7 +3837,7 @@ 0 0 0 -1 +0 0 0 1 @@ -3853,24 +3853,23 @@ 0 0 0 +1 +0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 0 -1 -1 0 1 +0 1 1 0 @@ -3878,33 +3877,34 @@ 0 0 0 -1 0 -1 0 -1 0 +1 +1 +1 0 0 1 0 0 +0 1 0 0 0 1 0 -1 -1 0 1 +0 1 0 0 0 0 0 +0 1 1 0 @@ -3913,25 +3913,25 @@ 0 0 0 -0 +1 0 0 1 -1 -1 0 1 0 -1 0 0 0 +0 +0 +1 1 0 1 0 0 -1 +0 1 0 0 @@ -3962,15 +3962,15 @@ 1 1 0 -1 0 0 -1 -1 0 0 +1 +1 0 0 +1 0 0 0 @@ -3982,7 +3982,7 @@ 0 0 0 -1 +0 1 0 0 @@ -3997,10 +3997,8 @@ 0 1 0 -1 0 0 -1 0 0 0 @@ -4009,6 +4007,8 @@ 0 0 0 +1 +0 0 0 0 @@ -4032,30 +4032,30 @@ 0 1 0 -1 0 0 -1 +0 1 1 1 0 0 0 -1 0 0 -1 0 0 0 0 +1 +0 0 0 0 0 1 1 +0 1 0 1 @@ -4065,11 +4065,9 @@ 0 0 1 -0 1 0 0 -1 0 0 0 @@ -4080,12 +4078,14 @@ 0 0 0 -1 0 0 1 +0 +0 1 -1 +0 +0 0 0 0 @@ -4098,19 +4098,19 @@ 0 1 0 -1 0 0 -1 0 -1 0 0 1 +0 +0 +0 1 1 0 -1 +0 0 0 0 @@ -4121,10 +4121,10 @@ 0 0 0 -1 0 -1 -1 +0 +0 +0 0 1 0 @@ -4150,20 +4150,13 @@ 1 0 0 -1 -1 0 -1 -1 0 0 0 1 0 0 -1 -1 -1 0 0 0 @@ -4171,14 +4164,13 @@ 0 1 0 +1 0 0 0 0 0 0 -1 -0 0 0 0 @@ -4186,18 +4178,24 @@ 0 0 1 +0 +0 +0 1 0 +0 +0 1 +0 +0 1 +0 1 1 0 -1 0 0 -1 -1 +0 0 1 0 @@ -4205,12 +4203,14 @@ 0 0 0 +0 +0 1 1 0 -1 0 1 +0 1 0 0 @@ -4218,85 +4218,91 @@ 0 1 0 -1 -1 0 0 -1 0 -1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 0 0 0 1 1 +0 1 0 0 0 1 +0 1 0 0 -1 0 -1 0 0 1 +1 +1 +1 0 0 0 0 0 1 +1 +0 0 0 0 0 0 1 +0 1 -1 +0 1 0 0 0 0 0 -1 0 +1 0 1 0 0 0 -1 -1 0 0 0 0 0 -1 -1 0 0 0 -1 -1 -1 -1 -1 0 0 -1 -1 0 0 0 -1 -1 +0 0 0 0 @@ -4304,19 +4310,13 @@ 0 0 0 -1 -1 0 0 -1 -1 -1 0 0 0 0 0 -1 0 0 0 @@ -4328,9 +4328,9 @@ 1 1 0 -1 0 0 +1 0 0 0 @@ -4344,15 +4344,13 @@ 0 1 0 -1 0 0 0 -1 0 0 0 -1 +0 0 1 0 @@ -4360,6 +4358,8 @@ 1 1 1 +1 +1 0 0 0 @@ -4367,7 +4367,7 @@ 0 1 0 -0 +1 0 0 0 @@ -4377,14 +4377,14 @@ 1 0 0 -1 0 -1 0 -1 0 0 -1 +0 +0 +0 +0 0 0 0 @@ -4393,7 +4393,7 @@ 0 0 1 -1 +0 0 0 0 @@ -4412,53 +4412,52 @@ 0 0 0 +1 0 0 0 0 0 -1 0 -1 -1 -1 0 1 1 1 +1 0 1 0 +1 0 1 1 1 0 0 -1 0 1 -1 0 0 0 0 0 -1 0 0 0 1 +0 +0 +0 +0 1 1 -1 -1 +0 1 1 0 0 1 -0 +1 0 0 0 @@ -4468,16 +4467,17 @@ 0 1 0 -1 -1 0 0 +1 +0 0 0 1 1 1 1 +1 0 1 1 @@ -4492,7 +4492,7 @@ 0 1 0 -1 +0 0 0 1 @@ -4501,7 +4501,7 @@ 1 0 0 -1 +0 1 0 0 @@ -4519,21 +4519,20 @@ 0 0 1 -1 +0 1 0 0 1 0 -1 0 0 0 0 0 +1 0 0 -1 0 0 0 @@ -4543,6 +4542,7 @@ 0 0 0 +1 0 0 0 @@ -4550,20 +4550,19 @@ 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 -1 +0 +0 +0 0 1 +0 1 0 0 @@ -4572,14 +4571,14 @@ 0 0 0 +0 1 0 0 0 0 0 -1 -1 +0 0 0 0 @@ -4590,10 +4589,11 @@ 0 0 0 +0 +0 1 1 -1 -1 +0 0 0 0 @@ -4614,7 +4614,7 @@ 0 0 0 -1 +0 1 0 0 @@ -4633,7 +4633,7 @@ 0 0 1 -1 +0 0 1 1 @@ -4645,8 +4645,6 @@ 0 1 0 -0 -0 1 0 0 @@ -4654,22 +4652,21 @@ 0 0 0 -1 -1 0 0 0 1 +1 0 0 +1 0 0 0 +1 0 0 0 -1 -0 0 0 0 @@ -4688,31 +4685,27 @@ 0 0 1 -1 0 0 -1 0 1 0 +1 +1 0 1 0 0 0 -1 0 0 0 -1 -1 0 -1 -1 0 0 0 1 +1 0 1 0 @@ -4720,8 +4713,6 @@ 0 0 0 -1 -1 0 1 1 @@ -4729,26 +4720,35 @@ 0 0 0 +1 +0 0 1 1 0 0 0 +0 1 0 1 0 0 +0 +0 +0 1 0 +0 +1 +1 1 0 0 0 0 1 -1 +0 0 0 1 @@ -4762,13 +4762,9 @@ 0 0 0 -1 -1 0 0 0 -1 -1 0 0 1 @@ -4777,11 +4773,14 @@ 0 1 0 +0 +0 1 0 0 0 -1 +0 +0 0 0 0 @@ -4790,6 +4789,7 @@ 0 0 0 +0 1 0 0 @@ -4806,16 +4806,16 @@ 0 1 1 +0 1 -1 -1 -1 +0 1 0 0 -1 0 1 +1 +1 0 1 0 @@ -4826,12 +4826,12 @@ 1 1 0 -1 0 -1 0 0 -1 +0 +0 +0 0 1 0 @@ -4840,14 +4840,14 @@ 1 1 0 -1 0 0 -1 0 1 0 -1 +0 +0 +0 0 0 0 @@ -4860,7 +4860,7 @@ 0 0 0 -1 +0 1 0 0 @@ -4876,13 +4876,13 @@ 0 0 0 -0 1 0 0 -1 -1 -1 +0 +0 +0 +0 0 1 1 @@ -4892,6 +4892,7 @@ 0 1 0 +0 1 0 0 @@ -4899,8 +4900,6 @@ 0 0 0 -1 -1 0 0 0 @@ -4909,6 +4908,7 @@ 0 0 0 +1 0 0 0 @@ -4925,7 +4925,7 @@ 0 0 0 -0 +1 1 1 0 @@ -4940,16 +4940,16 @@ 0 1 0 +1 0 0 -1 0 0 0 0 1 0 -0 +1 0 0 0 @@ -4959,7 +4959,7 @@ 0 0 1 -1 +0 0 0 1 @@ -4972,46 +4972,53 @@ 1 1 1 +0 1 1 1 0 0 -1 0 -1 -1 +0 1 0 0 -1 0 1 +0 1 +0 1 0 0 0 0 0 +1 +1 +1 +1 +1 +1 0 0 0 0 0 1 -0 1 0 0 0 -1 +0 +0 1 0 0 0 0 1 +0 1 0 0 @@ -5019,8 +5026,6 @@ 0 0 1 -1 -0 0 0 0 @@ -5029,7 +5034,6 @@ 0 0 0 -0 1 0 0 @@ -5037,16 +5041,12 @@ 1 1 0 -1 -1 -1 0 0 0 0 0 -1 -1 +0 0 0 0 @@ -5054,24 +5054,24 @@ 0 0 0 -1 -1 0 1 +0 1 +0 1 0 0 1 -1 +0 0 0 1 1 0 -1 0 -1 +0 +0 1 0 0 @@ -5084,51 +5084,53 @@ 0 0 0 -1 0 0 0 0 -1 0 1 0 1 0 0 +0 +0 1 -1 -1 +0 +0 +0 +0 1 0 +0 1 1 0 0 -1 0 1 0 -1 0 0 0 0 0 -1 0 0 0 0 1 1 +0 1 +0 +0 1 0 0 0 0 -1 0 0 0 @@ -5139,7 +5141,6 @@ 0 1 0 -1 0 0 0 @@ -5149,4 +5150,3 @@ 0 0 0 -1 diff --git a/test-A/outNB.tsv b/test-A/outNB.tsv new file mode 100644 index 0000000..15cc96f --- /dev/null +++ b/test-A/outNB.tsv @@ -0,0 +1,5152 @@ +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +1 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +0 +1 +1 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +1 +1 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +1 +1 +0 +1 +1 +1 +0 +1 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +0 +0 +1 +1 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +0 +1 +1 +1 +0 +1 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +0 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +1 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1