From 28bc6cdd704e42702ac1c42ee4a95b240a777449 Mon Sep 17 00:00:00 2001 From: Vicky Date: Fri, 5 Dec 2025 07:36:27 +0000 Subject: [PATCH] Upload dec4 code. --- vicky/dec4/dec4.ipynb | 176 +++++++++++++++++++++++++++++++++ vicky/dec4/dec4.py | 112 +++++++++++++++++++++ vicky/dec4/dummy_input.txt | 10 ++ vicky/dec4/paper_roll_grid.txt | 139 ++++++++++++++++++++++++++ 4 files changed, 437 insertions(+) create mode 100644 vicky/dec4/dec4.ipynb create mode 100644 vicky/dec4/dec4.py create mode 100644 vicky/dec4/dummy_input.txt create mode 100644 vicky/dec4/paper_roll_grid.txt diff --git a/vicky/dec4/dec4.ipynb b/vicky/dec4/dec4.ipynb new file mode 100644 index 0000000..607d1d0 --- /dev/null +++ b/vicky/dec4/dec4.ipynb @@ -0,0 +1,176 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "aa9a2307-0fb5-4993-a0d9-35e6528a1c0f", + "metadata": {}, + "source": [ + "# Puzzle 2 of AoC 2025\n", + "Author: Victoria Ramírez López\n", + "\n", + "Date: Dec 4, 2025" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "051c8d59-04e3-4349-b029-32a76466583c", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from scipy.signal import convolve2d" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "f40bd11f-5e02-4833-a0ea-17d6474f21c8", + "metadata": {}, + "outputs": [], + "source": [ + "# Read input file\n", + "\n", + "paper_roll_grid = open('paper_roll_grid.txt', mode ='r') # Open in 'read only' mode\n", + "grid = paper_roll_grid.readlines()\n", + "grid = [line.strip('\\n') for line in grid]" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "cd2ef290-5e35-4b12-b3f0-87018f2b30b6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Part 1 answer: 1346\n", + "Part 2 answer: 8493\n" + ] + } + ], + "source": [ + "# Find roll papers accessible by fork lift\n", + "\n", + "total_accessible_rolls = 1\n", + "total_removed_rolls = 0\n", + "\n", + " # Turn grid to boolean matrix \n", + "bool_grid = create_boolean_grid(grid)\n", + "bool_grid_np = np.array(bool_grid) # Convert into numpy array\n", + "\n", + "# For part 1\n", + "accessible_rolls = find_accessible_rolls(bool_grid_np)\n", + "total_accessible_rolls = accessible_rolls.sum()\n", + "print('Part 1 answer: ', total_accessible_rolls)\n", + "\n", + "# For part 2\n", + "while total_accessible_rolls >= 1:\n", + " accessible_rolls = find_accessible_rolls(bool_grid_np)\n", + " total_accessible_rolls = accessible_rolls.sum()\n", + " bool_grid_np = remove_accessible_rolls(bool_grid_np,accessible_rolls)\n", + " total_removed_rolls = total_removed_rolls + total_accessible_rolls\n", + " \n", + "print('Part 2 answer:', total_removed_rolls)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "f5966994-e969-4723-8c50-3a26e6bd424d", + "metadata": {}, + "outputs": [], + "source": [ + "def find_accessible_rolls(bool_grid_np):\n", + " # This function finds the number of rolls that can be \n", + " # accessed by forklift\n", + " # input: grid = [[String]]\n", + " # output: sum_accessible_rolls = int\n", + "\n", + " # Add padding\n", + " bool_grid_padded = np.pad(bool_grid_np, 1, mode='constant') \n", + "\n", + " # Calculate how many rolls surround each roll\n", + " convolution = convolve2d(bool_grid_padded, \n", + " [[1,1,1],[1,0,1],[1,1,1]], mode='same')\n", + " convolution = convolution[1:-1,1:-1] # Remove padding\n", + "\n", + " # Determine how many rolls are reachable\n", + " accessible_rolls = bool_grid_np & (convolution < 4)\n", + "\n", + " return accessible_rolls" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "a62faf9d-2c86-474f-a403-7264129b6c42", + "metadata": {}, + "outputs": [], + "source": [ + "def remove_accessible_rolls(bool_grid_np, accessible_rolls):\n", + " # This function removes the number of rolls that can be \n", + " # accessed by forklift\n", + " # input: accessible_rolls = numpy array\n", + " # output: updated_grid = numpy array\n", + " \n", + " updated_grid = np.logical_not(accessible_rolls) & bool_grid_np\n", + "\n", + " return(updated_grid) " + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "2b34b18d-6d8f-40fb-b619-502ec1b0a346", + "metadata": {}, + "outputs": [], + "source": [ + "def create_boolean_grid(grid):\n", + " # This function turns the original grid to a matrix where\n", + " # '@' is 1 and '.' is 0\n", + " # input: grid = [String]\n", + " # output: boolean_grid = [int]\n", + " \n", + " boolean_grid = []\n", + " \n", + " for row in grid:\n", + " boolean_row = [1 if x == '@' else 0 for x in row]\n", + " boolean_grid.append(boolean_row)\n", + "\n", + " return boolean_grid" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "77ebe3d0-11bb-4553-ae88-666f704357c0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/vicky/dec4/dec4.py b/vicky/dec4/dec4.py new file mode 100644 index 0000000..b58388b --- /dev/null +++ b/vicky/dec4/dec4.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# coding: utf-8 + +# # Puzzle 2 of AoC 2025 +# Author: Victoria Ramírez López +# +# Date: Dec 4, 2025 + +# In[23]: + + +import numpy as np +from scipy.signal import convolve2d + + +# In[110]: + + +# Read input file + +paper_roll_grid = open('paper_roll_grid.txt', mode ='r') # Open in 'read only' mode +grid = paper_roll_grid.readlines() +grid = [line.strip('\n') for line in grid] + + +# In[111]: + + +# Find roll papers accessible by fork lift + +total_accessible_rolls = 1 +total_removed_rolls = 0 + + # Turn grid to boolean matrix +bool_grid = create_boolean_grid(grid) +bool_grid_np = np.array(bool_grid) # Convert into numpy array + +# For part 1 +accessible_rolls = find_accessible_rolls(bool_grid_np) +total_accessible_rolls = accessible_rolls.sum() +print('Part 1 answer: ', total_accessible_rolls) + +# For part 2 +while total_accessible_rolls >= 1: + accessible_rolls = find_accessible_rolls(bool_grid_np) + total_accessible_rolls = accessible_rolls.sum() + bool_grid_np = remove_accessible_rolls(bool_grid_np,accessible_rolls) + total_removed_rolls = total_removed_rolls + total_accessible_rolls + +print('Part 2 answer:', total_removed_rolls) + + +# In[98]: + + +def find_accessible_rolls(bool_grid_np): + # This function finds the number of rolls that can be + # accessed by forklift + # input: grid = [[String]] + # output: sum_accessible_rolls = int + + # Add padding + bool_grid_padded = np.pad(bool_grid_np, 1, mode='constant') + + # Calculate how many rolls surround each roll + convolution = convolve2d(bool_grid_padded, + [[1,1,1],[1,0,1],[1,1,1]], mode='same') + convolution = convolution[1:-1,1:-1] # Remove padding + + # Determine how many rolls are reachable + accessible_rolls = bool_grid_np & (convolution < 4) + + return accessible_rolls + + +# In[109]: + + +def remove_accessible_rolls(bool_grid_np, accessible_rolls): + # This function removes the number of rolls that can be + # accessed by forklift + # input: accessible_rolls = numpy array + # output: updated_grid = numpy array + + updated_grid = np.logical_not(accessible_rolls) & bool_grid_np + + return(updated_grid) + + +# In[112]: + + +def create_boolean_grid(grid): + # This function turns the original grid to a matrix where + # '@' is 1 and '.' is 0 + # input: grid = [String] + # output: boolean_grid = [int] + + boolean_grid = [] + + for row in grid: + boolean_row = [1 if x == '@' else 0 for x in row] + boolean_grid.append(boolean_row) + + return boolean_grid + + +# In[ ]: + + + + diff --git a/vicky/dec4/dummy_input.txt b/vicky/dec4/dummy_input.txt new file mode 100644 index 0000000..8209399 --- /dev/null +++ b/vicky/dec4/dummy_input.txt @@ -0,0 +1,10 @@ +..@@.@@@@. +@@@.@.@.@@ +@@@@@.@.@@ +@.@@@@..@. +@@.@@@@.@@ +.@@@@@@@.@ +.@.@.@.@@@ +@.@@@.@@@@ +.@@@@@@@@. +@.@.@@@.@. diff --git a/vicky/dec4/paper_roll_grid.txt b/vicky/dec4/paper_roll_grid.txt new file mode 100644 index 0000000..6577989 --- /dev/null +++ b/vicky/dec4/paper_roll_grid.txt @@ -0,0 +1,139 @@ +...@@@@@..@@@@@@@@@..@@@@.@@@@..@@.@@@@@.@.@@@@.@@@@@@@.@@@@@@@...@@.@@@.@.@@..@.@@@@..@.@@@@@@@..@@@@@@@@@@@.@@.@@@@.@@@.@.@@@.@@@@.@..@@. +@@.@@@@@.@@@..@.@@@@@@.@@@@.@.@.@@..@.@.@..@.@@@@@@.@@.@@@@..@.@@@@@@.@.@@.@.@@@..@.@@.@.@@@.@@.@@...@@..@@.@.@@@@..@..@@@@..@.@.@...@@@@@. +..@.@.@@@.@@@@@@...@@@.@.@@.@@@.@.@@@@@.@...@.@.@@@..@.@@@@@.@..@@.....@@@@@@@@@.@@.@..@@@@@...@@@@..@.@@@@@.@@@@@.@@.@@@@@@.@@@...@.@@@@@@ +.@@.@.@@@.@.@@@@@.@@..@@@@@@@@.@@...@.@..@.@.@@.@@@.@@@@.@..@.@@..@.@@.@@@@..@@@@@@@@@.@@@@@@@@@..@@@@....@..@@@.@.@@@@@@@@.@.@@.@@...@.@@. +@..@@@@.@@...@@@@@@@@@@...@@@@@@@@.@.@@@@.@@@@.@@.@@..@@@@@@.@@@@@.@@@@@@@@..@.@.@@.@@@@.@@@@@...@@@@@.@@.@..@@@..@@@@..@@..@.@@@@.@@.@...@ +@@@..@@..@.@@.@.@@@.@@.@...@@@@@.@@@@@...@@..@@.@@@@@@@@@.@.@@..@@@@.@@@@@..@@..@@@@@@@@@@@...@@.@@.@@@.@..@....@.@@@@@@@.@..@....@@@@@.@.. +@@@@.@@@@.@@@@@..@@@.@.@@@@@@@@.@...@@.@@..@@@..@@.@@@@@.@....@@.@@.@@.@.@.@@@@..@.@....@@@.@.@...@@.@.@@@@@@..@@@..@.@@@.@...@.@@@.@.@@@@@ +@@@@@@..@@@@@@.@@@@@@@@@@..@@@@.@.@@@.@@@..@@@@@@@....@@..@@.@@@@..@.@@.@.@@.@@@@.@@@@@..@...@@@@@@@@@@@.@@@.@@.@.@..@@@.@@..@@.@@@@@@@..@. +@@.@@@..@.@@@@.@@@@@@@@@@@@.@@@@@@.@@.@..@@@@..@@@@@@@@....@.@@@.@@.@@@.@@.@.@@@@@@@..@@...@@@@.@@@@..@@@@.@@.@...@....@.@...@@@.@@..@@...@ +@.@@.@@@@@@@@@@.@@@.@@@@.@@@@@@.@..@..@@@@@..@@.@@..@@.@@@.@@.@@..@@@.@@@@@@.....@@@@.@..@@@@.@@..@...@.@@@@..@.@@@.@@@..@@@@..@@@@@@@@@.@@ +...@@@@@.@@.@@@.@...@.@..@@.@@..@@@@@@@@@.@@@@@@@@..@@.@@@...@@...@@@@@@@@@@...@.@@.@.@@.@@@@@@.@@@@...@@@@@@@@@@@@.@..@@@@@.....@@@@@..@@@ +@...@@.@@@@.@@@@@....@@@@.@@..@@@..@.@@..@.@.@@...@.@...@@......@.@@@@..@@@@@@.@@@@.@@@@@@@@@@@..@@@@@@.@@.@@@@..@@@@.@.@@@.@@.@@.@..@...@@ +@@@@.@.@@.@.@.@@.@@..@@@@.@.@.@..@@@@..@@...@@@@.@@@@@.@.@@.@@@@@.@@@@@@@@...@.@@..@@@..@@@.@@@@.@@.@@.@@.@.@@..@@.@.@.@@@@@@.@@...@@@..@.. +@.@....@@@@@...@@@@@.@@@.@.@@@.@@.@.@@@@@@@@.@@.@@.@@@@.@.@@@...@@@@@@.@..@@@.@.@.@@@.@@@@.@@@..@@@@..@.@@@@.@@@@@@.@.@@@@.@.@.@@@..@@..@@@ +@@@@@.@.@.@@@@....@@.@.@.@@@@.@@..@@.@..@@@@.....@@@.@@.@.@@.@@@@@@@@.@...@@@@@...@@.@@@@@@@@.@@@@@@@.@@...@@@@.@.@@@.@....@@@@....@@@...@@ +@@@@@@@@.@@.@@@@..@.@.@..@@.@.@..@@@@@@@.@..@@@@@.....@....@@@.@@.@@.@.@@.@@.@@@@.@.@@.@..@@.@@..@@@..@@@.@@@@@@@.@@.@@@.@..@@@@@..@@@.@.@@ +@@@..@.@.@@.@@.@@.@.@....@@@@.@@@@@.@@...@@@@@@...@@.@@@@@@@@@..@.@...@.@....@.@@@@@@@...@@..@.@@@.@@@@.@@.@@@@@.@@@@@@@@..@.@.@@@@@@@.@@@. +@@@.@@@@@.@..@@.@@@..@.@@....@.@@.@.@@@@@.@@@@@.@..@.@@@@@.@@..@@.@.@@@..@.@@@@.@@@@..@@@@.@@@@@.@@.@@.@@@.@@@@@@@@@@@.@.@.@@@@@@@@.@@...@. +@@...@.@@@.@@..@@.@@@.@..@.@...@@.@@@@@@@..@..@@.@...@@@@@.@@@.@@@@..@@@@.@@@@@@@@.@@@.@@@@....@@@@@.@@..@.@.@@@.@@@@@.@.@@@@@@@@.@.@@@@@@@ +@@@@..@@...@@.@@@..@@.@.@@.@@.@@@.@@@.@@.@@@.@...@@@@@..@.@@@@@.@@@@..@@@@.@.@....@..@@@@@@@......@.@@..@.@@@.@@@@@@.@.@@@.@.@@@..@@@@@@@@. +@.@@.@..@@@.@@@@@@..@@@.@@@..@@.@@@@@@.@@@.@@@@@@@@@.@.@...@@.@.@.@@.@@@@@@..@@@@@.@@@@@.@.@@@...@@@...@@@@@@@@@..@.@.@@..@@..@@@..@.@@@@.@ +@@@@.@@@@@@@@@@@@@@.@@@@@@.@@@.@@@@@@..@@@@..@@@@@@@@.@...@....@@@@.@@...@@@@@.@@@@...@@.@@@@@@.@@.@@@..@..@...@@@@@@@@.@@@@.@@@.@@@@@@.@@@ +.....@@@@@@@........@....@@@@@..@@.@@.@...@@@..@@@@@@..@.@@@.@@@@@.@..@@.@@.@@.@@.@@@@@.@@@@.@@@@@.@.@@@..@@..@@.@.@.@.@.@@@.@@@.@@.@.@...@ +.@@.@@..@@@.@@.@...@@@@@.@@@...@@@@@@@@@..@@.@@@.@@.@@@..@@@...@@@@@.@@@@...@@@.@@@...@.@@.@@@.@@..@.@.@@@@.@@@.@@@..@.@@@@@@@@@@.@@@.@.@.@ +.@@@@..@@@@@.@.@.@.@@@@@@@@.@@.@@@@.@.@..@@@@@@@@@.@@@@@.@@@@@@@@.@@@.@@@@@@..@..@@@.@@@..@@@....@.@@@@@..@@.@..@@.@@..@@@.@@..@@@@@@..@@.@ +@..@@@.@..@.@@@@@@@@..@@@.@@.@..@...@@...@@@@@@@@@.@@@@@@.@@.@@@@@@@@.@@@...@@.@.@..@.@@@@.@....@@@@@@.@..@@@.@@@@.@@@.@@@.@.@.@@.@@@.@@@@@ +@.@@@@@@.@@@@@@.@@@@@@@@.@.@.@@......@@@@@..@..@@@@@..@@@.@.@.@@@@.@@@.@...@..@@@@@.@@@@..@@@@@@@@@..@@@@.@@@@@..@@@@.@@@.@@@@@.@.@.@@..@@@ +..@..@@.@@.@.@@@@.@@.@@@.@@@@@..@@@@@@..@@@@@@.@.@......@@..@@@.@.@@.....@@.@.@@@...@..@@@@@.@@.@.@....@@.@.@@..@@@@.@@.@@@.@@.@@@@..@.@..@ +@@@@@..@@@@@@..@@.@@@.@..@@@.@@.@@.@@@@.@.@.@..@@@@@@@@@@@@..@@..@.@@.@@.@@.@.@@.@.@@...@.@.@.@@@.@@@.@@@@@@@@@@..@@@@@.@.@.@.@@@.@@..@.@@@ +@@.@.@@@@.@@.@.@@.@.@@.@@..@@@@@@...@@@@.@@.@@@..@@@.@..@.@.@@@@@..@@@@@.@@@@@@.@@@@.@.@@@@...@..@@@.@.@..@@..@@..@@....@@.@@@@@@@@..@@@@@@ +..@.@....@@@@.@@..@@.@@...@@.@@@...@.@..@@.@@@@.@@@@@..@.@@@@..@@@@@@@.@@@.@.@@.@@@@@@@.@@@.@.....@..@@@@.@.@@@@.@@@.@@@.@..@@@@@.@@@@@.@@. +@@..@@@@@.@@@@@@@.@@@@.@@@@....@..@..@@..@@@@...@..@@.@.@@@@@@@@..@@@.@..@@@@@@@..@@@.@@@@@@@@@@@@@@.@@.@@@@@.@.@.@.@.@@.@@.@.@.@@@@.@.@@@@ +@@@.@@@@@.@..@.@@@@@@.@@@@@.@.@@@...@@.@..@.@@@@@@.@.@@.@@@@@.@@@..@@.@..@@@@..@.@.@..@@.@.@@.@@.@@@@...@@@..@@@@@@@@.@@@@@@.@...@..@@@@@@. +...@@@@@@@@@..@@@.@@..@@.@@.@@@.@@@@@@@..@..@@.@@@@@@@@@.@...@@@.@..@@@@.@@@@.@@@@@.@.@....@.@.@..@...@@.@.@@@@@.@@@@@.@.@@@@@@@@@.@.@@.@@. +@@.@.@@@@..@.@@@@@.@@@@@@@@.@.@.@..@@.@.@..@@@@@@@@.@@@.@..@@.@@@@@@@@@@@.@@.@@.@@@.@@@@.@@@.@..@@...@@@...@.@...@@.@...@@@...@@.@.@@.@@@.. +..@@@@@..@@...@@@@@...@@.@@@.@@@@@@@@..@.@@.@@@@.@.@@@@@@@@...@@.@...@@@.@@.@@@@.@@@@..@@.@@@@@@@..@.@@@@@..@..@@.@@..@..@.@@@.@@@@.@....@@ +.@@.@.@...@@.@@@@.@@.@@.@@@.@@@@.@.@@@@.@..@@@@@@@@.@@@...@@.@.@..@.@.@@.@....@.@@@..@@.@@@@@@@@..@.@...@@@@@@@@@@@..@..@@@..@.@.@..@@@..@@ +@@.@@.@@@@@@@.@@..@@@@.@@@@.@@..@@.@..@@.@@@@@.@..@.@@@@@@@@.@@.@@..@..@@@@@@.@..@@@@.@@.@.@@.@@@@@.@@@@.@@@@@@@.@.@@@..@@@@@.@@@@..@@@@@@@ +@@@@.@.@@@@@@@@@.@@.@@@@@@..@@.@.....@@@@@..@@@@@@@.@....@@@@.@@.@@@@..@@@@...@.@@@@@.@..@@@@@@@.@.@@..@@@@@@.@@@.@@@@.@.@.@@.@@@@@@@@@@@.@ +.@@.@.@@@@@....@@..@..@.@.@..@@.@@..@.@@@@@@@..@@@@@@@.@@@@@.@..@.@.@@@@@@@@.@@.@@@@@@.@@@@@@@.@@@.@@@@@@@@@@@@@.@@.@..@@@@@.@@.@.@.@.@.@@@ +@@.@@@@@.@@@@@...@@@.@.@.@.@...@.@.@@..@@@@@.@.@.@.@.@@@@..@.@@.@@@@@@.@@@@@@.@@@@@..@@@.@@@@@@@.@@.@@@@..@..@.@@..@.@.@.@..@@.@@.@..@...@@ +@@@@@..@@.@@@@..@@@@@@@@@@@@@@..@@@@@@@.@.@.@@.@@@.@...@.@@@@..@@.@.@.@@@.@.@@.@@@@..@.@@@@..@@@@@.@@@@@@@@..@.@@@@@.@@.@@@@.@.@.@@...@..@. +@@@@@@.@.@.@@@.@.@@@@@.@@@@.@.@@@@.@..@@@@@.@@@@.@.@..@.@.@@.@.@@..@@@@@@.@.....@@@@.@.@..@@..@@@..@.@.@.@@.....@@..@@..@@.@@@.@@@@.@@.@..@ +@@.@@@.@@.@@.@@.@@@@@@@@@.@@..@@..@@.@@@@.@@@.@.@.@@@@@@@@@...@@.@@@@@@@@@.@.@@@@@@@.@@@..@.@@.@@..@@.@.@@@.@@@@@@@@..@@@@@@@..@@@.@@@@@@.. +@@@@@..@.@.@.@.@@@@@@@.@@@@@@@@.@@@.@@..@@.@.@.@@@@..@@@@.@@@@@@@.@@....@..@.@@..@@@@.@....@@@@.@.@.@@@@@.@@@@@.@.@@@@..@@@.@@.@....@@.@@@@ +.@@@@@@@..@@.@@.@.@.@@..@..@@..@@@@.@@..@@@.@@@@@@@@@.@.@@.@.@@@@@@@@..@@....@..@@@@@@..@.@.@@@.@@.@.@@@.@..@@@.@@@@@@@..@@.@@@..@@@@.@@@@@ +@...@@@...@@.@...@.@@@@.@@@@..@.@@@@..@@..@@..@@.@..@@@.@@.@..@.@.@@@@.@@@@@.@.@@@..@@.@@@@@@@@.@@.@.@@@.@.@@@@@@.@.@@@@@@@@@.@@.@@@@@.@.@@ +.@@.@.@...@@@.@@@..@...@@.@@.@...@@@.@....@.@@@.@@@@@@.@.@...@@.....@@.@@..@@@@@@@@@.@.@.@@@.@...@@....@@..@@@@@.@@@@@@@@@@.@..@@.@@@@...@@ +..@@@@@.@..@@@@@.@..@@@.@..@.@@@....@@@..@@@@.@@.@.@@@@...@@.@.@.@@@..@@@@@@.@@@@@@@..@@@@@@@....@@.@@....@@@@.@.@.@@..@.@@@.@.@..@@@@@..@@ +@.@.@@@@@@@.@@@.@.@@@@@@@@@.@.@@.@@@..@@@.@@@..@@@@.@.@@@@.@..@.@@@@@@@@@@@@@.@@....@@@@@@.@@@.@@@.@@@@@@@.@@.@@@@.@@@@@..@.@@...@@@@@@..@@ +.@@@@@..@@.@@@.@@.@.@@..@@@@@@@.@.@..@@@@.@@@@@@@@@..@@@...@@.@@@@@@@@@@..@..@@@@@@@@.@.@@@@@@@..@@@@@@@@@@@..@.@@@.@..@.@.@@..@.@@@..@@.@. +...@@@@@@.@@@@@@@@@.@@@@@@@..@@@@.@@@.@.@@@@@@..@.@@@@..@@.@@@@@.@@@.@.@@.@..@.@@@@@.@.@@.@@.@..@@@..@@..@@@.@@@.@.@@@..@.@@@....@@@..@@@@@ +@..@..@@@@@@@@@@@@@@@....@@@@@@.@@@@@...@@@@.@@@.@.@@@..@....@@@@@..@@...@@..@@@@.@@..@@@@@.@@.@..@@.@...@@@@..@.@@@@@@.@.@.@@.@@.@@.@.@@@@ +....@.@@@..@@@...@.@@.@@@@.@@.@@@@..@@@@@@@.@@@@.@@@@@.@@@.@@..@@...@@.@@..@.@@@@@.@@@@@..@.@@...@@.@@.@.@@@.@.....@@@.@@.@@.@@..@..@.@@@.@ +@@@@@@@.@@@@@@..@..@.@@@.@@..@@@@@@@.@.@@@..@@@@@@..@@.@@@@@@@@@.@@@@@@@@@@@.@.@@.@@@@..@.@..@@.@@.@@@@.@@.@...@@@@@@@@.@@.@@..@@@@..@@@@.. +@@@@@@.@@@@.@.@.@@.@@..@@@.@...@@@.@@@@.@@@@..@.@..@@@@.@..@@@.@@@@@@@@.@@@@..@@@..@@.@@@.@@@@.@@@.@.@.@@@@@.@@.@@@@@...@.@....@.@.@@.@.@@@ +@@..@@@...@@.@@@.@.@@...@@@@@@@@@.@@@.@@..@@@.@@.@@@@@.@.@@@@@@..@@@@@@@@@@.@@@...@....@@....@..@@.@.@@..@@@@@@@@@.@@@@@@@.@...@..@@.@@@.@@ +@@.@.@@.@@@@@@..@.@@.@...@@@@@@@.@@@.@.@@@@@.@@@@@@.@..@@@@@@@.@@.@@@@...@..@..@@.@@.@..@@@@..@.@@@@.@@@.@@...@@.@...@@@.@.@@@.@@.@.@@@..@@ +@..@.@.@@.@......@.@@@@@@.@@.@@.@@...@@@@@@@@@@@@.@@@@@@@@.@.@.@@.@..@@.@@.@@@@@.@@.@.@..@@@.@@@@@@.@@@@@.@.@@@@@.@@..@@@.@@@.@.@@.@@@@.@@. +@..@@.@.@.@@.@.@.@.@.@......@@@.@@@@@@....@.@@@.@.@@@.....@@@@@@.@@@@@@@@@@@...@..@@@@@@..@.@.@@@@.@@@...@@@@...@@@.@@@@.@.@.@..@@@@@.@.@.. +@@@.@@...@...@.@@@@@@....@@@@@.@.@@@@...@.@@..@@..@.@.@@.@..@.@@@@.@@.@.@@.@@@@@@@@@@@@.@@@@.@.@@@@@@...@@@.@@.@@@@@...@@@@@@.@.@@..@@@.@@@ +.@.@..@@.@@@.@@@.@...@@.@@.@.@@@@...@...@@@.@@@@..@.@@.@@..@@..@@.@@@.@.@@.@.@.@.@@@@.@@@@@@@@@@@.@@@@@@@@@@@@.@.@@@.@....@@.@.@@@..@@@@.@@ +@@..@.@@.@.@.@@.@.@@@@@@@@@@.@..@@.@@@..@.@@.@@@@..@...@@.@.@@@@...@@@@@.@.@@..@@@.@@@@@@@@.....@@@.@@@..@@@@@@@@.@@@..@@..@.@@.@.@.@@.@..@ +..@@.@@.@@.@.@@@@.@..@..@@@@.@@.@@@@@@.@@@@@..@@@.@@@.@.@@@@..@..@@@@@@@@.@@..@@@@@@@.@.@@@@@..@@@@@@.@@@.@@.@@@.@...@@@@@@@@@..@.@.@...@@. +@@.@@@.@.@.@@@@@@@.@@@@@@.@@@@@..@@.@@@.@@@@@...@@@..@.@@@@.@@@@@..@.@..@.@@@@.@@.@..@@@@@@@@@@.@.@.@.@@@@@@@@.@.@@..@@@@.@@@.@..@.@.@...@@ +.@@@.@@@.@@@@.@.@.@@@@@@@..@@@@...@@.@@.@.@@@@@..@@.@@@@.@@.@@.@@@@.@@.@.@@.@@.@@..@@@@@...@.@.@@@...@@@@.@..@@@.@@@..@@..@..@.@@.@@@@@@... +@.@@@@@@...@@@@@@.@@@@.@@.@..@@@@@@@@@.@.@@@..@..@@.@...@.@@@@.@@@.@..@@.@@@...@@.@@@@.@.@.@@@@@.@@@@@.@@...@.@...@.@@@@@@@..@.@.@.@@.@.@@. +@@@..@@@.@@@@@@@@@@@..@.@.@.@..@@@@.@@@..@@.@@.@@.@.@....@.@.@@.@@.@@@@@.@@@..@@@@@@@@@..@..@......@.@.@.@@@@.@.@.@@.@@@@@.@@.@.@@.@@.@@..@ +.@...@.@@@@@@..@@@@.@.@@@@@@@.@@@@@..@@@@@@..@.@@@@...@@@@..@@@@@@...@@@@.@@@@@....@@@.@@@@@@@.@..@@@..@@..@@@@...@@.@.@@@.@@.@...@@.@@.@.. +@@@@..@@@@@@..@@@@@.@.@@@@@@@@@@....@..@@@.@@@.@.@.@..@@@@.@....@@@@@@@@@...@@@.@@@@@@@.@@@.@@@@@@@@@@@@...@@.@@@@@@@@.@@@.@@@.@@.@@@.@@@.@ +@@@.@.@@.@.@@@@@.@.@@@@.@@.@@@..@@.@.@.@@.@@.@@..@@@@.@@@@@@..@@@@@..@.@@@@@@@@@@@@.@@.@@.@@.@@.@..@..@..@.@@@...@@@.@.@.@@@...@@@@@@@@.@@. +.@@....@...@@..@@@.@@@@@.@@.@@@..@@...@@@@.@.@@@@@@.@..@@@..@@@@..@@@@@@@@.@....@@.@.@@@@@.@@@@@..@@@@@@@.@..@@.@@@@@.@@@@..@@.@.@.@@@.@@@@ +@....@@@@.@.@@.@@.@@@@@..@@@.@.@@@@....@@@@.@@.@@@.@..@.@@@@..@@@.@@@.@.@@..@.@...@@@.@....@@@@@..@@@@..@@@..@..@.@@@.....@....@@@.@@@@@.@@ +.@@@@@.@.@.....@.@@@@@@...@@@...@@.@@.@.@@..@@@@@@@.@@.@@.@@@@.@@@@@.@.@@.@@@..@@.@..@@....@.@.@..@@@.@.@@.@@@@@.@@.@@.@@@@@..@.@@.@@.@@@@. +.@@.@@@.@@.@.@.@..@.@.@..@@@@....@@@@..@@@...@@@...@@.@.@...@@...@@@@@.@.@@...@@.@@.@@.@.@@..@@..@@.@@@@@.@@@@@@@@@@@.....@@@.....@...@@@.@ +@.@.@@@.@@.@@@@@.@.@..@@.@@@@.@.@@@@@@@.@@@@@.@@@@@@.@...@.@@.@@.@.@@@.@@@@@@@@@@@@@@.@.@@..@@@@@@@@...@.@.@.@.@@..@@@@@@@@@@@@.@@@@..@..@. +.@.@@.@@@..@.@.@.@@..@.@@@..@@@..@.@..@@.@.@@@.@@@@@.@.@.@@.@@@@.@@@@....@@.....@@@..@@@.@@@@@@@@.@@.@@..@@@@@@..@..@.@@.@@....@@@@@@@.@.@. +..@.@@.@@@@@@@@.@..@@@.@@@...@.@@@.@@@...@.@.@..@.@@@@@@@..@..@..@...@@@@@.@@@..@.@@.@@@@.@.@@@@..@.@@.@..@@..@.@@....@@@.@.@@@.@.@@..@@@.@ +@..@@@.@@..@@@.@@@.@@..@.@@..@@@@@@.@@@.@.@.@@@.@@@@@.@..@@..@@@@@.@.@.@@...@.@...@@.@@.@@@@.@@@.@.@@@.@....@@.@@...@@@@@..@@@..@@@@.@@@@@@ +.@.@@@@@@@@@@@..@@.@@.@@@..@@.@@.@@@.@.@@@@.@.@@@@@.@@@@...@.@@@@.@..@@@@@.@.@@@.@@@...@..@@.@@@@@..@@@@@@@.@.@@@..@.@@@..@@@.@.@@@..@....@ +@@@.@@@..@@..@@.@.@@@@..@.@@@@@@@@@@....@@@.@@.@.@@.@.@.@@@.@@@.@..@@@@@@.@@@@@@...@@...@@@@..@@@@@@@@@@@....@@@@@@.@@@.@@.@@@@@@@@.@@@@.@@ +.@@@@.@..@@@@@@@@.@@@@@.....@@@@@@.@....@@.@@@@..@..@.@.@.@@@@@..@@@@..@.@@@.@@@@.@@.@@@..@..@@@@@.@@@..@@.@.@@.@@.@.@.@.@@.@.@@@..@@@@@@@@ +@@@@@@@@@@@...@.@..@.@.@@@.@@@.@.@.@..@@.@.@.@@@@@@.@@@..@.@@.@@@@@.@..@@@@@@.@.@@@@@@@.@.@..@@@.@.@@@.@@@@.@@@.@.@..@.@@@@@@@@.@@@.@@@@@@@ +..@.@..@@.@...@@@@@@@@@@@@@.@.@@@.@@@@@.....@@@@@@@@@@@.@@..@@@.@.@@@@....@.@.@@@.@@..@.@@@.@@@..@@@@@@@@.@..@@@@@@@@.@@@@@.@.@@.@@@..@@..@ +@.@.@.@@....@@.@@@@@@.@.@.@@@.@@.@...@.@@@@@.@@..@@.@@...@@@@@@@.@@@@@@@@@@..@.@..@.@.@.@.@.@..@@@@@@.@.@@@@.@..@.@.@@.@..@@@...@..@..@.@.. +@@@.@@@.@@@@@@@@.@@.@..@..@@.@.@@@@@@@@@@@@@@@@@..@@@@@@@.@@@@@.@.@..@..@@..@@.@@@@@.@@@@@.@@...@.@@@@@..@@@@@@@@.@@@.@@@@@@@..@@@@.@@.@... +@@@@.@@.@@@@.@@.@@.@.@.@@@@.@@@@.@.@.@@@@@@...@..@.@@@...@@@@.@@@@@@.@@.@..@@@@@@@..@@@@@@.@..@@@.....@@....@@@@.@@@.@@.@.@..@..@@@@@.....@ +..@@@.@.@@.@@@@@@@.@.@@@@@..@.@@@@@..@@..@@@.@@.@@@@@@@@@@@..@@@.@.@@.@.@.@@..@.@@.@@.@.@@@@@@@@.@@@@@@@.@.@.@@@@@.@@@...@@@@..@@.@@@...@@@ +@@.@@..@.@@@@@..@@..@@@.@@@..@..@.@@.@@@@@@@@.@@@@@@@@.@@.@@@.@...@@@@@@@@.@...@...@@@...@@@@@.@@.@.@..@.@..@@@@@@@..@@.@.@@@.@@@.@...@..@@ +@@.@..@.@@.@.@@@.@@.@...@@.@@.@@.@@@@@@@@.@@.@@@@@@@@.@@.@.@@@@@.@..@@@@@@@@.@@@@...@.@@@...@@@@@...@@@..@@@@@@.@@@...@.@@@@@@@.@@@@@@.@... +@.@@@.@..@@@.@@@@@@..@@@...@@.@@@@.@@.@@.@..@@@@..@@.@@@@@..@...@.@@.@@..@@..@@..@@@@@...@@@@@@@@.@@@@.@.@@@..@@...@.@@@...@@@@@@.@@..@@.@@ +@@@@.@@.@@..@@.@@.@.@.@@@@.@@@@@@.@...@@@@@.@@@@@@....@@@@.@@@@@@@@@@@@@@..@@@@@@@..@@@@....@@@@.@..@@....@@@@@@@.@.@@@@@@@@@@@@@@@@..@@..@ +@@@@.@.@..@.@@@@.@@@@.@@@@@@.@@@@...@@@@@@...@.@@@@....@@@@.@@@@..@@.@@@@.@@@@@..@@@@.@.@@@.....@@.@@@.@..@@@@.@@.@@.@@.@@.@@...@...@@@@..@ +.@@@@@.@..@..@@.@@@@@@@@@..@@.@..@.@@.@@..@@@@@@@@@@.@..@.@@@@@@@.@...@@.@@..@..@..@@@...@@@@.@@@@@@@.@@.@.@.@@..@.@..@.@@.@@@@@@@@.@.@.@.. +@@@@@@@..@@@@@@.@.@@@@@@@@.@@.@.@..@.@@.@@@@..@.@@.@.@@@@@@@..@@@@.@@@....@@@.@@@@.@@..@@@..@...@.@@.@.@@@@@.@@@..@@@....@..@@@..@@@@@.@@.. +@.@...@.@.@@@.@@.@.@@@@..@.@.@...@..@.@@@@...@.@@@@@..@@@@@@@@...@.@@.@.@.@@@@@@@@@..@@@.@@@@@@@@@@@@@@@@..@.@.@.@@@@@.@@.@@@@@.@@@@@.@@@@@ +@@@@.@@@@@@@.@@.@@.@@@@.@@.......@..@.@@...@@@@@@@@.@@@@@.@.@@@@@@@@.@@....@@...@.@@@..@@@@@@..@.@@...@.@.@@@@.@@@.@....@@@@@@@..@@@@@.@@@@ +.@@..@.@@@.@@@..@@@@@@@@@@@@@.@...@@@@.@@@.@@@@@@@@.@@@@@.@@@..@@.@@@.@@@@@.@@@@@.@@@@@@@@@@@...@..@@.@.@.@.@@@.@@.@@...@@.@@..@@@@..@.@.@@ +.@@.@.@..@@@@.@@.@@@.@@..@@.@@@@@@@@@@@@@@....@.@@..@.@@@..@@@@.@@..@@@.@@@@@@@.@..@......@.@.@@@@..@..@@@@.@@@@..@@@.@@@@..@@.@.@@@@@@.@@. +@..@@@@..@@.@@..@@..@@.@@@@@@.@@@@.@...@.@.@.@@.@@.@@.@@@@..@@@@@@@@@@@...@@@@@.@@.@.@@..@@........@.@@@@@.@..@@@@..@.@......@@@@.@@@@@@@.@ +.@.@.@@@..@@@@@@@@@..@@@@@@@@.@.@@@@@...@@..@@@..@.@@@@.@@..@.@@.@@@@.@@..@.@.@@@.@@.@@@@@@@@@@@@@..@@..@@.@@@@...@@...@@@@@@@@.@@@.@@.@@@@ +@..@@.@@@@@@@@@..@@@@@@.@..@.@@@..@@.@.@@.@..@@@@@@@.@@@@.@@@.@@.@@...@@..@@@.@@..@@@@.@..@.@.@.@@.@@@@@@@@.@...@@.@.@@@@@.@.@@@.@.@@.@.@.@ +.@@@...@.@....@@@.@@@@...@@..@@.@@@@@@@@@@@@..@..@.@@@.@.@@..@.@@.@.@@@@.@.@..@.@@@@@@@.@.@.@..@@@@@...@@@@@@@@...@@@@@@@@@.@@@@@@@..@@@@@@ +.....@...@.@@@..@@@.@@@@@.@@.@.@.....@@.@@...@@@@.....@@@@.@@@@@@@@.@@@..@@..@@.@@.@@@@@@@@..@..@..@@..@.@..@@@.@@@@.@@@@@@@..@@@.@@@..@@@. +.@@@@.@@..@@.@@@@@@@..@@@.@@@.@@@@@@.@@....@@@@.@@.@.@.@@@..@..@.@@..@@@@@@@@.@@@.@..@@@@.@@@.@.@@@.@@.@@@..@@@@@@@..@.@@@@@.@...@.....@... +.@@@@.@@@@..@.@@@@@@...@@@@@..@@.@@@@..@.@@.@@..@@@@@@..@@@@@.@@@@.@....@@@@@@@@@.@.@@..@@@@.@@@@@@.@.@@@@@@@@@@@@.@.@@@@@@@@@@..@.@.@.@... +@@..@@@.@@@.@@@@@@..@@@@@@.@@@@@@..@@@.@@..@@@@@@@..@@@@@@.@@@@@@@@@@@@@..@.@.@.@..@.@@@@@@.@@@..@....@.@.@@@...@@.@.@.@@@@@@.@.@..@@..@@@@ +@@..@@.@@@@@@@@@.@@@@@@..@@@@@..@@@.@@..@@@@@@@@..@..@.@.@.@.@.@..@....@@.@@@.@@@@@@@@.@@@.@@@@@@.@.@.@@.@..@@@@@@@@@.@@@@..@..@.@@...@.@@@ +@@@@@@@@@@@@.@@@.@@@@@@@@@..@.@.@....@@@.@@.@@@@@@....@@@.@@...@@@.@.@@@..@@@.@@@.@@@@@@.@@@.@@@@.@.....@@@@@@@@.@@.@@@@@@@.@.@.@.@@.@@.@@@ +@..@@@..@.@..@@.@@.@@@@@@@@@@@@@@@@.@@@...@.@..@...@.@@@@@@@@@..@@.@@@@.@.@@@@..@.@@@@@@@..@@...@@@..@..@..@@.@@@@.@@@.@@@..@...@.@.@@.@@@@ +@@@.@@.@@@..@..@@@@@@@@@@.@...@@@@.@@@.@.@.@.@@@@@.@.@@@@@.@@.@@..@...@@@..@.@.@.@@@@@@.@@@@..@@@@.@.@..@....@@@.@@.@@@@.@@@@@@..@@...@@.@. +.@@@@.@@@@@@.@@@@@...@@@@.@@@@.@@@..@@@@@@@.@@@@@@@@@@...@@...@@@@@@...@@@@@@@.@@@..@..@@@.@..@.....@..@.@@..@@@@@@@@@..@@.@.@..@@@@@@.@@@@ +@@.@@@...@.@@@@@.@...@@@.@@@@.@@@.@@.@@@.@.@@@@...@@@@.@@.@@@.@@@...@.@..@@@.@@@@@.@.@@@.@@@@@@@.@@..@@@@...@..@...@@@..@@@@@@@.@..@@..@@@. +@@@@@.@@.@..@@...@@@@.@@@@@..@@@..@@...@...@@@@@@@@@@.@@.@.@.@@.@@@@@@..@@@@@@.@@@@@@@@.@@@.@.@..@@.@@@@...@..@@@@@@.@.@@..@@..@@....@.@@@. +.@@@..@.@.@@@@@@.@@.@@@@@@.@@@.@@.@.@.@@..@...@.@@@.@.@@.@@@@@@.@@.@@@@@..@@@@...@@@..@...@@...@@..@.@.@@@.@.@@@@@.@@.@@@@.@@@.@@@@...@@@@@ +@@.@.@..@@....@@.@@@@@@@.@@@.@..@@@@..@@@@.@.@@@@@.@@....@@@@@@@@@.@@..@.@@....@.@.@.@@@@@@@@.@@@@..@..@.@@.@@@..@...@@@@@.@..@@..@@@.@.@@. +@@.....@@@@@@@..@@@....@@@.@..@..@@.@..@@..@..@.@@@@.@@.@@@@@@.@@@..@@@.@@.@.@.@@@@@@@@@.@@..@.@.@@.@@@@@...@.@@@@@@@@.@@@@.@@@@.@@@..@.@@@ +.@@....@@@@@@@.@@@.@.@@@.@.@@..@.@@@.@@@@@@.@@@@@..@@.@@@.@@..@.@@..@@@@@@@@@@@@@@...@@@@.@.@....@..@@@.@@@@@..@@@@@.@@@@@@@@@@@.@...@@@@@. +..@@@@.@@..@@@@@.@@@@@@@.@@..@@@@@.@...@@..@.@@@@@@@@@@@@@@@.@@@@..@@@.@@@@@@@@..@@@@@...@@@@@.@@@@@@.@.@.@...@@@...@@@@@@.@@@@.@@..@@@@@@@ +@@@.@@@@@..@@@....@.@.@@@.@..@@.@@@@@@@@.@@..@@.@.@@@@.@..@@@.@@.@@@@@@@@@@.@.@.@@.......@@@@@..@@@..@@@@.@@@@@@@@@.@.@@@.@@..@@..@@.@@@..@ +...@@@@.@@@@@@@@@@@@@@..@@.@..@.@@.@@@@@@@@@@@.@@.@@@@.@.@@@@.@@@@@...@.@@@.@@@@@.@@.@@@..@@@..@@@@@@@@@@@@@@@@@@@@@@@..@.@.@.@.@@.@.@@@.@@ +@.....@@@@.@@@..@@@@..@.@@.@@@.@@.@@@@@@..@@@@@@@@@@..@..@@.@@@.@@@@@.@@@.@@@@@@.@.@@@@@@@@@@@@@@..@@..@.@@.@@@@..@@@.@@@..@@@...@@@@.@@@@@ +@...@.@.@@.@@@@@@@..@.@@.@@@...@@@@@@@@@@@@.@@@@@@@@.......@@@..@@.@@@..@.@@.@.@@@@@..@...@@.@..@.@.@@@@@@@@@.@@.@.@...@@@.@@@@.@@@.@..@@@. +@@@@@@...@@.@@@@.@@@@.....@@.@@@.@..@@.@@@@@@@.@@.@@@@@@.@.@.@@@@@.@..@@@@@@@@@.@..@@.@@@.@@@.@.@.@@@..@@..@@@.....@....@@@@@@@.@@@@.@.@..@ +.@@..@@@@@@@@@@.@@@.@@@@..@@@.@@@@.@@@@@...@..@@@.@@.@@@@.@..@@.@@@.@.@@...@@@@@@...@@@.@@@@@@@@@@..@..@.@@@@@...@.@@@@@..@@@@.@.@.@@@@.@.. +@@@@..@@..@@@@@@.@@@.@@@@@...@@@@.@@@..@@.@@@@@@.@.@@@@.@@..@@@@.@@@.@...@......@@@@@@..@@@@@@.@@.@@@@..@@.@@@@.@@.@@@.@@.@@@@.@@..@@..@@.@ +@@@..@@@@.@.@@...@@.@@@@@@@....@.@@..@@@@@..@.@@@@@@@..@@@@@@..@.@@.@.@@...@...@@@.@@@@@@..@.@@..@@@..@@@.....@.@@@@@@.@@.@@@.@@.@@@@@@.... +...@@@.@..@@@.@.@@@@@...@@.@@.@@@.@@.@.@.@@.@@@@@@@.@@@@..@@@@@@...@@@..@..@.@.@@.@@@@@....@@@@@@.@@@@@@@..@@..@.@@@@@@@@@@@.@@@@.@@.@@@@@@ +@..@@@@@..@@@@...@.@@@.@@@.@@@@..@@@.@@@@@@@@@@..@...@@..@@@@@@.@@@@..@@@@@@@@@.@.@.@@@..@@@@@@.@.@@@...@@@.@@@.@@@@@@@@@@.@@.@.@...@@@@@@. +..@@@@@@.@@@.@@@@@@.@@@@@@@..@.@.@@.@@@@@@@@.@.@@@@@.@@.@.@@..@@@@@@.@@..@..@@@.@@@@@@..@.@...@@@@.@@@@..@@@@@@@@@@.@.@@.@...@@@....@@..@.@ +.@....@...@@@@@@..@.@.....@@.@@@.@.@.@@.@.@.@.@@@@@.@@@@.@@@@@.@@.@@@@@@.@@@.@@@.@..@@@@@.@..@@@@@.@.@..@@.@@...@@.@.@@@.@@@.@.@@@@@.@@@@@@ +...@.@@@@@@@@@@@..@..@@@.@@@@@@@.@@@.@.@@.@@@....@.@@@.@@@@..@@.@@.@@.@.@.@@@@@@...@.@@..@@.@.@@..@.@@@@.@@@...@..@.@@@..@..@@@@@@@@..@@..@ +@@.@@@@@@@....@.@@..@.@@.@@@.@.@@@......@.@@@..@.@.@.@...@@..@@@.@@@.@.@@@@@..@@@@.@..@@@@@@@...@@@@@.@....@.@@..@@@@@@@@.@.@@@.@@@@..@..@@ +@@.@@.@.@@.@@@@......@..@.@@@@@.@@.@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@..@@..@@@.@@@.@@@@@.@.@@@@@..@.@@...@@@@..@.@.@...@@@@@@@@@.@.@@@.@.@@@@.@ +@@@.@@@@@@@@@@@@@@@.....@@@..@@@.@.@.@@@.@..@.@.@.@@...@..@..@.@@@.@.@@@@@@.@@...@.@@@@..@@@@@.@@.@@@.@..@@..@@@@@@.@@@..@.@.@@.@@@@@@..... +@@..@@@@.@.@.@@@@@@@@.@@@@@...@@.@@@@@@@.@@@@@@@.@@@@@.@@@.....@.@@@@....@.@.@@@.@.@.@.@@@@@@....@.@@@...@@@@.@@@@...@@@@@@@.@@.@@@....@.@@ +@@@@@.@@.@...@@....@..@@@..@@.@@@...@.@@@@@.@.@@@@@.@@@@@@.@@@@@.@.@@@@..@.@@.@@@@@@.@.@@@@@@@@.@@...@.@@..@@..@.@.@@@.@@@@@@@@@@.@....@@.@ +@@@@.@.@..@.@..@.@.@@@@@.@@@.@@@@...@@@..@.@@.@...@.@@.@@.@@@@..@@@@@@@@@@@@.@@@@@.@.@@@@.@@@@.@.@.@....@@@@@.@.@.@@.@@@@@@@@@..@@@@@..@@.@ +@@.@@@@.@.@....@@@.@@@@.@..@@@@@@@.@@@@@@@....@@...@@@@@@...@@@.@@.@@@@.@@@@@@@@@@@.@.@@@@.@@@@@@@@@.@.@@@.@@@.@....@@.@.@..@@@@@@@@@.@.@@@