Jelajahi Sumber

day 4 python

metya 1 bulan lalu
induk
melakukan
facfd95f4f

+ 1 - 1
aoc2025/aocutils.py

@@ -94,7 +94,7 @@ def bench(part):
 
 
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":
-    day = 3
+    day = 4
     root = os.path.dirname(__file__)
     root = os.path.dirname(__file__)
     task_dir = os.path.join(root, f"day{day}")
     task_dir = os.path.join(root, f"day{day}")
     generate_readme(task_dir, day)
     generate_readme(task_dir, day)

+ 0 - 11
aoc2025/day3/day3.py

@@ -1,5 +1,4 @@
 import os
 import os
-import time
 
 
 with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
 with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
     example_data = example.read().splitlines()
     example_data = example.read().splitlines()
@@ -7,15 +6,6 @@ with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
 with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
 with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
     input_data = example.read().splitlines()
     input_data = example.read().splitlines()
 
 
-def bench(part):
-    def wrapper(*args, **kwargs):
-        start = time.perf_counter()
-        value = part(*args, **kwargs)
-        print(f"\tevaluation time: {time.perf_counter() - start} s")
-        return value
-
-    return wrapper
-
 
 
 def part1(data=input_data):
 def part1(data=input_data):
     sum = 0
     sum = 0
@@ -50,7 +40,6 @@ def part2(data=input_data, number_digits=2):
     print(f"Part 2: {sum=}")
     print(f"Part 2: {sum=}")
 
 
 
 
-
 part1(example_data)
 part1(example_data)
 part1(input_data)
 part1(input_data)
 
 

+ 181 - 0
aoc2025/day4/README.md

@@ -0,0 +1,181 @@
+--- Day 4: Printing Department ---
+----------------------------------
+
+You ride the escalator down to the printing department. They're clearly getting ready for Christmas; they have lots of large rolls of paper everywhere, and there's even a massive printer in the corner (to handle the really big print jobs).
+
+Decorating here will be easy: they can make their own decorations. What you really need is a way to get further into the North Pole base while the elevators are offline.
+
+"Actually, maybe we can help with that," one of the Elves replies when you ask for help. "We're pretty sure there's a cafeteria on the other side of the back wall. If we could break through the wall, you'd be able to keep moving. It's too bad all of our forklifts are so busy moving those big rolls of paper around."
+
+If you can optimize the work the forklifts are doing, maybe they would have time to spare to break through the wall.
+
+The rolls of paper (`@`) are arranged on a large grid; the Elves even have a helpful diagram (your puzzle input) indicating where everything is located.
+
+For example:
+
+```
+..@@.@@@@.
+@@@.@.@.@@
+@@@@@.@.@@
+@.@@@@..@.
+@@.@@@@.@@
+.@@@@@@@.@
+.@.@.@.@@@
+@.@@@.@@@@
+.@@@@@@@@.
+@.@.@@@.@.
+```
+
+The forklifts can only access a roll of paper if there are *fewer than four rolls of paper* in the eight adjacent positions. If you can figure out which rolls of paper the forklifts can access, they'll spend less time looking and more time breaking down the wall to the cafeteria.
+
+In this example, there are `13` rolls of paper that can be accessed by a forklift (marked with `x`):
+
+```
+..xx.xx@x.
+x@@.@.@.@@
+@@@@@.x.@@
+@.@@@@..@.
+x@.@@@@.@x
+.@@@@@@@.@
+.@.@.@.@@@
+x.@@@.@@@@
+.@@@@@@@@.
+x.x.@@@.x.
+```
+
+Consider your complete diagram of the paper roll locations. *How many rolls of paper can be accessed by a forklift?
+
+*--- Part Two ---
+----------------
+
+Now, the Elves just need help accessing as much of the paper as they can.
+
+Once a roll of paper can be accessed by a forklift, it can be *removed*. Once a roll of paper is removed, the forklifts might be able to access *more* rolls of paper, which they might also be able to remove. How many total rolls of paper could the Elves remove if they keep repeating this process?
+
+Starting with the same example as above, here is one way you could remove as many rolls of paper as possible, using highlighted `@` to indicate that a roll of paper is about to be removed, and using `x` to indicate that a roll of paper was just removed:
+
+```
+Initial state:
+..@@.@@@@.
+@@@.@.@.@@
+@@@@@.@.@@
+@.@@@@..@.
+@@.@@@@.@@
+.@@@@@@@.@
+.@.@.@.@@@
+@.@@@.@@@@
+.@@@@@@@@.
+@.@.@@@.@.
+
+Remove 13 rolls of paper:
+..xx.xx@x.
+x@@.@.@.@@
+@@@@@.x.@@
+@.@@@@..@.
+x@.@@@@.@x
+.@@@@@@@.@
+.@.@.@.@@@
+x.@@@.@@@@
+.@@@@@@@@.
+x.x.@@@.x.
+
+Remove 12 rolls of paper:
+.......x..
+.@@.x.x.@x
+x@@@@...@@
+x.@@@@..x.
+.@.@@@@.x.
+.x@@@@@@.x
+.x.@.@.@@@
+..@@@.@@@@
+.x@@@@@@@.
+....@@@...
+
+Remove 7 rolls of paper:
+..........
+.x@.....x.
+.@@@@...xx
+..@@@@....
+.x.@@@@...
+..@@@@@@..
+...@.@.@@x
+..@@@.@@@@
+..x@@@@@@.
+....@@@...
+
+Remove 5 rolls of paper:
+..........
+..x.......
+.x@@@.....
+..@@@@....
+...@@@@...
+..x@@@@@..
+...@.@.@@.
+..x@@.@@@x
+...@@@@@@.
+....@@@...
+
+Remove 2 rolls of paper:
+..........
+..........
+..x@@.....
+..@@@@....
+...@@@@...
+...@@@@@..
+...@.@.@@.
+...@@.@@@.
+...@@@@@x.
+....@@@...
+
+Remove 1 roll of paper:
+..........
+..........
+...@@.....
+..x@@@....
+...@@@@...
+...@@@@@..
+...@.@.@@.
+...@@.@@@.
+...@@@@@..
+....@@@...
+
+Remove 1 roll of paper:
+..........
+..........
+...x@.....
+...@@@....
+...@@@@...
+...@@@@@..
+...@.@.@@.
+...@@.@@@.
+...@@@@@..
+....@@@...
+
+Remove 1 roll of paper:
+..........
+..........
+....x.....
+...@@@....
+...@@@@...
+...@@@@@..
+...@.@.@@.
+...@@.@@@.
+...@@@@@..
+....@@@...
+
+Remove 1 roll of paper:
+..........
+..........
+..........
+...x@@....
+...@@@@...
+...@@@@@..
+...@.@.@@.
+...@@.@@@.
+...@@@@@..
+....@@@...
+```
+
+Stop once no more rolls of paper are accessible by a forklift. In this example, a total of `43` rolls of paper can be removed.
+
+Start with your original diagram. *How many rolls of paper in total can be removed by the Elves and their forklifts?*

+ 0 - 0
aoc2025/day4/day4.go


+ 57 - 0
aoc2025/day4/day4.py

@@ -0,0 +1,57 @@
+import os
+import numpy as np
+
+with open(os.path.join(os.path.dirname(__file__), "example.txt")) as example:
+    example_data = example.read().splitlines()
+
+with open(os.path.join(os.path.dirname(__file__), "input.txt")) as example:
+    input_data = example.read().splitlines()
+
+
+def part1(data):
+    grid = np.array([list(w) for w in data])
+    sum = 0
+    grid = np.pad(grid, pad_width=((1, 1), (1, 1)), mode="constant", constant_values="_")
+    H, W = grid.shape
+    for i in range(H - 3 + 2):
+        for j in range(W - 3 + 2):
+            if grid[i, j] == "@":
+                subgrid = grid[i - 1 : i + 2, j - 1 : j + 2]
+                count = np.sum(subgrid == "@")
+                if count < 5:
+                    sum += 1
+
+    print(f"Part 1: {sum=}")
+
+
+def part2(data):
+    grid = np.array([list(w) for w in data])
+    sum = 0
+    grid = np.pad(grid, pad_width=((1, 1), (1, 1)), mode="constant", constant_values="_")
+    H, W = grid.shape
+    can_remove = True
+    rounds = 0
+    while can_remove:
+        coords2remove = []
+        for i in range(H - 3 + 2):
+            for j in range(W - 3 + 2):
+                if grid[i, j] == "@":
+                    subgrid = grid[i - 1 : i + 2, j - 1 : j + 2]
+                    count = np.sum(subgrid == "@")
+                    if count < 5:
+                        sum += 1
+                        coords2remove.append((i, j))
+        if len(coords2remove) == 0:
+            can_remove = False
+        else:
+            rounds += 1
+            grid[tuple(zip(*coords2remove))] = "."
+
+    print(f"Part 2: {sum=} after {rounds} rounds")
+
+
+part1(example_data)
+part1(input_data)
+
+part2(example_data)
+part2(input_data)

+ 10 - 0
aoc2025/day4/example.txt

@@ -0,0 +1,10 @@
+..@@.@@@@.
+@@@.@.@.@@
+@@@@@.@.@@
+@.@@@@..@.
+@@.@@@@.@@
+.@@@@@@@.@
+.@.@.@.@@@
+@.@@@.@@@@
+.@@@@@@@@.
+@.@.@@@.@.

+ 140 - 0
aoc2025/day4/input.txt

@@ -0,0 +1,140 @@
+@@..@.@.@..@@.@@@@@.@@@@@@..@@.@@.@@..@@@.@@@.@.@@@@.@@@.@@@.@..@.@@@@..@@@.@@..@@@.@@@..@@@@..@.@@.@@@.@..@.@@@.@@@..@@@.@.@@@@@.@.@.@@@@@@
+@.@@@@@@....@..@@@.@..@.@.@@.@@.@@..@@@..@.@@..@..@@@.@@@.@..@.@.@@..@@.@..@@.@@@..@.@@.@.@..@@...@@@@@@@@.@@@.@@@.@@.@@@@@@@..@..@@@.@.@@.@
+.@.@@@@.@@.@@.@.@.@@.@..@@.@@..@@@@@@@@@@@@...@@.@...@@@@.@.@@.@@@.@.@@..@@.@@.@@.@@..@...@@@@.@@@@@@@@@@@.@@@....@@@@@.@.@...@@.@@@@@@@.@@@
+@@@..@@@@.@@@@@@@@.@@@@@.@@.@....@.@..@.@@@@@@@...@@@@@@@@.@@...@.@@.@@@@@@.@....@@.@@@.@.@@..@@@.@.@@@..@.@.@@@.@.@@@@@@@@...@.@@@@@@.@..@@
+@.@@@@@.@@.@.@.@.@..@@@@.@..@...@.@@@.@.@@@@.@@.@@@@@@.@@@@@..@@..@.@.@@.@.....@@@.@@@.@..@@@.@@.@..@@@@.@.@@@@..@@@@@@.@@@.@@.@@..@@.@.@@@@
+@@.@@@@@.@@@.@@@@@.@@.@.@@@@.@@...@.@@@..@@.@@.@@@..@@@...@@.@@@@..@@@@@@@...@.@@@@@@....@..@@@@@.@...@.@.@@.@...@@@@.@.@@@.@@.@.@@@@.@.@@@@
+...@.@@.@@.@.@.@@@@...@@@@@@@@@.@.@@@.@@.@@@.@@.@@@@.@@@@@@@@@.@@..@..@.@@@@@@@@@@@@...@.@.@@@.@.@.@.@@@.@..@@@@@@@@@@@.@@.@...@@@@@@@@.@@@@
+..@@@.@.@.@@@@@...@@..@@..@@.@...@@@.@.@.@.@.@@.@.@@@.@@.@.@@@@.@.@@@@@@@.@@.@.@@@@@@.@.@@@@@@@@@@@.@.@@@@@.@@@@@@@@@.@...@@@.@@@@.@..@@@@..
+.@@@@.@@@.@.@@@.@@@..@@..@@@@@@.@..@.@@.@.@@@@@..@@@@@@@@.@.@@@.@@@@@.@.@@@@...@@.@@@.@.@@@@@@.@@.@.@@@@.@.@@@.@.@@@@@.@@@@...@@@@@@@@@@.@..
+@.@....@@.@..@@@.@.@..@@@@.@.@@.@..@@.@.......@.@@@@@@@.@@@@@@@@.@@@.@.@@.@@@@.@..@.@@@@@@.@@@@....@@.@@@@.@..@@@.@@.@.@@@@@@@@.@@@@.@.@@..@
+@@@@@.@@.@.@.@@.@..@@@.@.@@@@.@@@.@.@.@@@.@.@@@.@@@@@..@@@@@@..@@@@@@@@@@@@@@.@@@@.@@@@...@.@@@@..@@@@@@@.@@@@.@@.@@@@@@.@@@.@.....@@@@@@.@.
+@.@@...@@@.@@..@@@@..@@.@@.@...@@@@@...@@@@.@@@.@@.@..@@@@..@.@@@@..@@@.@..@@@@..@.@@.@.@.@@....@.@@..@@.@@..@@@@...@@.@..@@@@@@@...@@@..@.@
+...@.@...@@@..@..@.@@@@.@.@....@@@@@@.@..@@@@@.@@@@@@@@@@.@@@@@@@@.@@..@@@@@@@@@@@@@@.@.@...@@....@@.@@.@@@.@@@@@@.@.@..@@@@@@.@.@.@@..@@@@.
+@@@@.@@@@.@.@@.@.@..@@@..@@@.@@@@@..@@@@@@.@...@.@@@.@.@..@@@@@@.@@.@@@.@@..@@@@@@@..@@@@@@@@..@@..@@@@@..@.@.@@@.@@..@.@.@@@@@@@.@.@@@.@@@.
+@@@@@@@@.@@@@@@@.@@@.@.@.@@.@..@@@@@@@.@@..@@..@.@..@.@@@@@@..@.@.@@.@.@@@.@.@@@@..@@@@@@@@....@.@.@@@@@@@@@.@@@..@@@@@@..@@@@...@@@...@.@.@
+..@@@..@.@@.@.@@...@@@..@.@@@...@..@@.@@@@@..@@@@.@@@@.@@@.@@.@@.@@@@@@@..@.@..@.@.@@@..@@@@@...@@..@....@......@.@.@.@.@@@.@.@@@@@@@.@@.@@.
+.@@.@@@@@.@..@@@@@@.@....@@@.......@..@@@.@@@...@..@@..@@@@..@.@@@@.@@.@@..@@.@.@@@@.@@.@@.@@@@@...@@@@.@@@..@.@.@@@.@.@@.@@@..@@@..@@@@@..@
+@.@.@..@.@.@.@@.@@@@@@@@@@@@.@@@@.@@..@.@.@@@..@@@@.@@@@@...@.@@.@@@@@@@...@@..@@@@..@@....@.@@@.@.@@@@@.@@@@@@@..@@@@@@@@@.@@@@..@@@.@....@
+@@..@@.@@.@.@..@@...@.@.@.@@....@@@@@@.@.@@@@@@.@..@@@@@@.@@@@..@.@.@.@.@.@@.@@...@@@.@.@@.@@.@@@@@@@.@..@@.@.@.@@..@.@@@@@@@@.@@@@..@@...@.
+.@@..@@@@@@@.@.@@@@.@@@@@@@@.@.@@@@@@@@@.@@@@@.@@@@..@@@@..@.@@@@.@.....@.@@.@@.@@@@@..@@@@@.@@@@@.@@@.@@.@@@..@@@..@@@@.@@.@@@@@@@@@@@@.@@@
+.@..@@@@@@@@@@@.@@.@@.@..@..@@@...@@..@@@.@@.@.@@.@.@..@@.@@.@@@@@.@@@.@.@@@@.@@@@@.@...@@.@@.@.@@..@@@.@@@@@.@@@@@.@....@@@@@@@@.@@.@@@@@@@
+@..@@..@@@@.@@.@.@.@.@.@@@@..@@.@..@.@@@@@@@.@@..@@@@@.@@@.@@@.@.@@.@@.@@@.@@@@@@@@@@@@@.@@@@@@.@@@@@@@...@@@@@@@.@@@@.@.@.@@@.@@@.@..@@@..@
+@@@@@@@@.@.@@..@.....@.@@@...@.@@..@@@..@..@..@@@.@@@@@@@@.....@..@@.@.@.@.@@@@.@@.@@.@@@@@@.@.@.@@.@@@@@.@.@@@...@@.@@@@@@@...@.@@.@@@..@.@
+.@@@@@@..@.@@...@@@@@@@@@@@.@@@@@..@...@.@.....@@@.@.@@@.@@...@.@.@.@@@@@@.@@@@@@.@@@@@...@@@@.@..@@.@@@.@@.@.@@@..@@@@@@@@.@@@.@@..@.@.@.@@
+@.@@.@@@.@.@.@.@@@@@@@@.@@@@..@.@@@@@.@@.@@....@..@@.@..@@@....@@..@@.@@@@@@@@@....@@.@@@.@@..@...@@@@@@@.@@@@@.@@@.@@@@@@@@@@...@@.@.@@@@@@
+@@@@@@@@@...@.@.@@@.@@.@@.@.@..@..@..@..@.@.@@@.@@@@@@@@@...@@@@@@@@@@.@@@.@@.@@...@@@@@@@.@.@@.@@@@@.@.@@..@..@....@.@@@.@...@..@..@@.@@@@@
+@@@@@@@@...@@@.@@@....@@@.@..@@@@.@@@@@..@@@...@@.@.@@@.@@.@.@@.@.@@@@.@@.@@@@@@@@@@@@..@@....@@.@@@@@.@@@@@....@@@....@@@@@.@.@@.@@..@@@@@@
+.@@@@.@@@@....@..@.@@@@@.@@@@@@..@..@@.@@@@.@@@..@@@...@.@@@.@.@@@@@@@..@..@...@@@.@@@.@@@..@@@@@...@...@..@@@@@.@@..@@...@@@.@@@@@.@@@...@@
+@..@@@...@@@.@.@@@@.@@@@@@.@@@@.@@.@@@@@@@..@@@..@@@@.@@@@..@@@..@.@@@...@@.@@@@..@@@@@@@@.@@@.@@...@@...@.@..@.@.@@.@.@@@@.@@.@..@@..@..@@.
+@@@@@@@..@@..@@.....@@..@@@..@@@@@..@@@@@.@@@@@.@..@@@@..@.@@@@...@..@@@.@.@@@..@@@..@@@@@..@@@@.@.@.@@.@@@@@@...@@@@@@@@@@..@@.@.@@.....@@@
+.@@@@......@@@.@@..@@@.@..@.@@@@@@.@.@..@@.@@@.@@@@....@@@@.@@.@@@@@@@.@.@@@..@@@.@@@@@@..@@@.@@@@.@@@@@.@@@@@@@.@@.@@@@@@.@@@@@@@@@.@..@@@@
+....@@@@@.@.@@@@@@@@@.......@.@@@@@@..@@.@@@@.@@@..@@@.@..@@@.@.@@.@@@.@@..@@@.@@@@@@@.@.@@@@@@...@@.@..@.@@.@.@@.@@@@@.@@@@@.@..@...@@@.@@@
+@@@@@@@@@@@@.@@.@@@.@@.@@.@@@..@@@@@.@@@.@..@.@.@@.@@.@@@@@..@@.@@..@....@..@...@@@@@..@..@.@.@@..@...@@@@..@.@@@@@@@@.@@@@@@@@@.@..@.@@@@@.
+@.@..@@@@..@@.@@.@.@@@@@..@@@@@@@....@@.@@..@@.@@@@...@@@@.@@@@@@@@@@.@.@@.@..@.@@@@@@@@.@@@..@@..@..@@@..@@@@....@@@@@@.@@..@@@@@@@@@@@@@@.
+.@@.@.@.@@@@@@.@@@.@@@@.@..@.@@.@@@@..@@@@@@.@@@.....@.@.@....@.@@@@@.@@@@.@@@@@@@@@@.@@@.@@@@@@@..@@..@@.@...@.@@@.@.@.@@.@.@@@@@@..@@@@.@@
+@.@@.@@@@@@@@@.@.@@.@@@@@@@.@@....@@.@@.@@@@@.@@@@.@...@@.@@@@.@@@@@.@..@@@@@@@.@@..@@@@@..@@.@...@@.@@.@@@@.@@@@..@..@@@@@.@@@.@@.@@@@@...@
+@.@@@.@.@..@.@@.@.....@.@.@@@@@@@@@.@@@@@@@@@@.@..@.@@.@@...@@@.@.@@.@.@.@@.@@@..@@@@@@.@@@@@@@@@.@....@.@@@@@@.@@@@@.@@.@.@@@@@@@.@@@@@@@.@
+@.@...@@@...@@.@@..@@..@.@.@@..@.@.@..@..@@@@@@@..@@@@@@@@@@.@@.@@@.@@@@..@..@.@@..@@@.@.@.@@@.@.@.@@@@@@....@.@@@@@@@@@.@@@@@@..@@@.@@@.@@@
+.@@@@.@@@.@.@.@@..@@@.@@@@..@@@.@@.@@@..@@@.@@..@.@@@@@@..@@@@@.@@@.@@..@.@.@@@@...@@.@...@.@@@.@@@@.@@@.@..@@@@..@@@..@@.@@.@.@@.@.@.@@.@@@
+..@@@@..@@@..@.@@@@@.@..@.@@.@...@@@@@@@@..@.@@@@@@...@@@@.@.@@@....@...@@.@..@@@@@.@.@.@.@@.@@@@@.@@@@@..@@@@@@@..@@.@@.@@..@...@@@@@@@.@.@
+.@@@@.@@@@.@@@@@..@..@@..@.@.@@....@@@@.@...@@@@@@@@..@.@..@.@@@@@@@@@@@.@.@@..@.@@.@.@@@@@@.@@@.@@@.@@@..@@..@@..@.@@...@@.@..@..@.@@@.@.@@
+.@@@@@@@@@@@@.@@@.@@...@..@..@..@.@.@@@.@..@.@@...@@.@@..@@@@@@..@@@@@@@.@.@@@@@.@@.@...@@.@@.@@@@@@.@@@.@.@@@@..@...@@@@...@@.@@@@@@@@.@@.@
+.@@@@.@..@..@.@@@@@.@.@@@@.@.@.@.@..@.@@@@..@@@..@@..@..@@@@@.@.@@@@...@..@....@..@@.@...@@.@.@@@.@@@@.@@@.@@@@@....@@@@.@@@.@..@@@@@@@..@.@
+@@@@@@@@.@@@...@@..@.@.@.@@.@@.@@..@@@..@@.@@@@@@.@@.@@...@.@@@@..@@@@@..@@..@.@@@@@@@@@..@@...@@.@@@.@@@@@@@.@@..@@.@@@@.@...@.@.@..@@.@.@@
+@.@@@.@.@@@@@@@@@@@..@@...@.@@@..@@@@@..@.@@@..@.@@@@.@@@@@@@@@.@.@@@.@@@@@@@..@.@@...@@@..@@.@.@@.....@@@.@@.@..@@.@..@@@.@.@.@.@@@.@@.@@@@
+@.@.@....@@@.@@..@@@.@@@@@@@.@.@@.@.@@@@@@@.@@.@@@@@.@.@@....@.@@@..@@@@@.@@@@.@.@@@.....@@@@@@@@@@..@..@@@@@@..@.@@@@@@@.@.@@.@@@.@@@@.@.@@
+.@@@@.@@@.@..@@@.@@@.@..@@.@@.@.@@.@@@.@.@@@@@.@@.@..@.@.@@@@.@@@.@@.@@@..@.@.@@@..@@@@@@@@@@@.@@@@@@@@@.@@@@@@..@@@...@@@.@@.@.@@@@@@.@@@@@
+@@.@.@@@@@@@@@..@@...@@@@..@@@.@@.@.@.@@....@@..@@.@@..@@@.@@.@..@@.@@@@.@@@@@@@@.@@@@@@@@@..@.....@@@@....@@@@@...@...@..@@@@@.@@.@....@.@@
+.@@.@@...@@@@@@.@@.@@@@.@.@@@@.@@.@..@@@@.@...@@@@.@.@....@.@@@@@@@@@.@@..@@.@.@@@@@@.@.@@.@.@@@@@@....@.@@@@@.@.@.@.@@@@..@@@@.@.@..@..@@@@
+.@@@@@.@@@.@.@@...@@..@@@..@@...@@@@..@...@.@...@@.@.@@@@...@@@..@@@@@@@@@.@@.@..@.@.@@.@@@.@@@..@@@@...@@@@@@@..@.@@@@@@.@@.@.@@@@.@...@@.@
+@@..@.@.@@.@.@@.@.@@@..@@...@@@@@@@@@@.@.@@@@@@.@.@.@@..@@@..@...@@@@..@......@.@.@..@.@.@.@.@@@@.....@.@.@.@@.@@.@.@@@@@@.@@@@@..@.@.@..@@@
+.@@@@@@@@@@.@@@@..@.@.@.@@@@@@@@.@@@.@@.@@..@@..@@@.@@..@.@.@.@@@..@.@.@@@.@..@@@.@@.@.@..@@@...@.@@@@...@@@.@.@@.....@@...@.@@.@@@@@.@@@@@.
+.@@@..@@@@@@@.@@@.@@@@..@@@..@..@@@..@@@..@@.@@.@@@@@@@.@.@@@.@.....@@@@@.@@.@@..@@@@.@@....@@@..@@@@.@@@@@@.@@.@..@@@.@..@@..@..@@.@@@.@@..
+@@@@@@..@.@@@@@.@@@@.@..@.@@@@@..@@@@..@..@@@@@.@@@@@@@.@..@@..@@@@@@@@..@@@@.@.@@.@@...@.......@@.@..@@@@.@..@@@@...@.@@@.@......@@...@@@..
+@.@.@.@....@.@.@@.@@@@@@@.@..@.@..@@.@.@.@@@@@@..@...@...@.@.@.@.@@@@@@@@@..@@@.@@@@@@@@@.@..@@@@@@.@@.@@@@@@.@@.@@...@@@@@@.@@@.@@.@..@..@@
+.@@@.@@@@@@@@.@@@.@..@@.@..@..@@.@@@..@@@@@@.@@@@..@@....@@@@.@.@@.@@.@@@..@@@@@@@....@..@@.@@@@@..@..@...@@.@@@@@.@@.@@@@.@@@@@@.@..@.@@@.@
+@..@...@@@@..@@..@@..@@@.@.@@@@.@..@@@.@.@.@@@@@.@@...@..@@...@....@.@.@@@@@.@@@.@@..@@.@@@.@.@@..@@@@..@@@@@@@@@.@@@@@.@@.@@.@.@@.@.@.@@@.@
+@.@.@@@.@..@.@.@.@.@@@@@@@.@.@@.@..@@@.@@@@@@@...@@@.@@@.@@@@.@@@....@@@@@@@.@@.@.@@...@..@@.@..@.@@.@.@@@@..@@@.@@@@@@..@@@..@.@@@@@@@@@@.@
+.@@.@@@@..@..@@.@.@.@@.@@@@..@@.@....@@@@.@@@.@@@.@@@@@@@@.@@.@@@.@@@@.@@@@@@@@@.@@@@..@@.@..@@@.@.@@@@@@@@@@@.@@.@.@.@...@@@@@.@@.@...@@@@@
+.@..@@...@@.@@@@@@@@@@.@@@.@@.@@@@@@@.@@.@@@@.@@..@@.@.@@.@@@.@@@@.@.@@@@..@...@.@...@@@.@@@@@..@@@@@@@..@.@@@.@.@.@.@.@@.@@@@..@.@..@.@.@@.
+.@..@...@.@@.@..@@@@@@..@.@@@@@@...@@..@@.@@@@.@....@.@@@..@@@@..@@.@.@..@.@@.@.@.@@@.@..@.@@@@@@.@@@.@@.@.@..@@.@@.@.@@@.@.@.@.@@@.@@@.@@..
+.@@@.@.@..@..@@@..@@@.@@.@.@@@.@@@.@@@.@@@..@@@@@@..@@@@@@@.@@@@.@.@...@@@@@@@.@@@@...@..@@@@.@.@@@......@@@.......@@.@..@@@@@..@.@.@@@...@@
+.@@@@@@.@@@.@@@@@@@.@@.@@.@@@@@..@.@.@.@..@@.@.@.@@@.@.@@@.@@@.@@.@@..@@@..@@@@...@@..@.@.@@@..@@..@.@@@.@..@.@@@@@@@@@...@@@@.@@@@@@@.@.@.@
+@.@.@@.@@@....@@@@@@@.@@@...@@@..@.@@@@@@@@@@@@.@.@@@@@.@@@.@@.....@.@@@....@.@@....@@@@@@@.@@@@@.@@@.@.@.@@.@@@@@@@@..@.@.....@@@@@..@@@@.@
+@....@...@.@.@..@@@@@......@.@...@.@.@..@@.@@@@@@..@@@@.@.@.@.@.@.@...@@@@.@@@.@...@...@@@...@@@@@@@@@@@..@@@..@.@@@@@@.@@@@@....@@@.@@.@..@
+@@@@.@..@@@.@@@..@@.@@@@@@.@.@.@.@@@@@@@.@.@@.@@@.@@...@@.@.@.@@..@@@.@@@@@.@@.@.@@@@@.@@@@@@.@@.@@@@@.@.@@.@@....@@....@....@@@@.@@.@@@..@@
+@.@@@@@@@@@..@@@@@..@.@@.@..@@@.@@@@@@@@..@@@@@..@@@.@.....@@@..@.@@@@@@..@@..@@@.@.@..@.@@.@@@@@@.@.@@.@@@.@@.@@.@..@.@.@@@@..@.@@@@..@.@.@
+@@@@@.@.@.@@...@@...@@@@@@@@.@..@..@@@@..@@@..@.@@.@.@@@.@.@@@...@.@@@..@@@@@@@@@....@@@@@.@@@.@@..@@...@@@.@.....@@..@@@@@@@@@..@@@@@.@@@@@
+@@@..@@@.@@@@@@@@@@@@..@..@.@@.@@@@@@@@@@@@@.@@@@@@.@..@.@@@@@@@.@@@@@.@@@@@@@...@@@@@...@@.@.@@@@..@@@@@@.@@@@@..@@@@@@.@...@..@@@.@@.@.@@.
+.@@..@@@@@.@@.@@@@@@.@@@.@@.@.@@@@.@@..@@@....@@@@@@@.@@....@@@@@@.@@.@@...@..@@@@@@..@.@.@@@@@@@@@@.@@@@.@@@@.@.@@@@...@.@.@@.@.@@.@.@@@@..
+@.@@.@@.@@@@@@@@@.@@@@@@@.@@@..@..@.@...@..@..@.@....@@.@@.@@@@.@.@@.@@.@@.@.@@@@@@@@@@@.@.@@@..@@@..@@@.@@@@@@@@.@.@@@@@@@.@@.@..@@@@@@@@@@
+..@@..@.@@@@@.@@@.@@@.@.@@@@.@.@@@@@@@@@@@@@.@@@@...@@@@@@@@@@.@.@@.@...@@@@@..@@.@@@@..@@@...@..@@@.@@@.@@@..@@@@.@.@@.@@@.@.@.@.@@@.@@.@..
+@@..@@@@@...@@@.@@@@.@...@@@@@@@.@@@.@...@@@@@@@..@..@@@@@.@.@@.@.@@.@.@.@@@@@@...@.@....@@@..@.@@@@@@@@@@@@.@..@@@@@@@@@.@@.@@@@@..@@@@.@@.
+@.@@.@@..@...@@@@@@..@.@@...@@.@@@@@@.@.@...@@.@@@.@.@@@@@.@@@@@.@.@@@.@.@@@@@@@@@.@@@.@.@@@@@@@@@@@@.@.@@@.@@.....@.@@@@@@@@@@@@@@@..@...@@
+@.@.@.@.@.@@...@@@@@@.....@.@.@..@..@@@@@@@..@@@@@@....@@.@..@@..@.@@..@@@.@@.@@.@@@@@.@....@@@@....@.@@@...@..@...@@.@@@@@@@@@@.@@...@@@@.@
+@@@.@@@...@@@.@@@@@@@@.@.@@...@@@@..@..@@@@@..@@@@@@@@@....@@@@@.@@@....@.@.@.@.@@.@@@@..@@@.@@..@.@.@@@@@@@@@@@@@@@@.@.@.@@@@@....@..@@.@@@
+...@@@.@@.@@.@@.@@...@.@.@...@@.@@.@@.@..@@@@.@@.@@@@.@@.@@..@@@@...@@@@@.@..@.@@@@@@..@@..@@@.@.@.@@..@@@@@@..@@..@.@@@@@@@@.@...@@.@@.@@.@
+@@@@..@@.@@..@.@@@@@.@.@@@@.@@..@..@@.@.@@@@..@@@@@@@@@@@@@.@.@@@@.@.@@@@@@.@...@@@@.@.@@...@.@@@@.@@@..@@@..@.@@@@@..@.@@.@@.@@@@@@@@.@@@@.
+@@@..@@..@@@@@.@@.@..@@@.@..@.@@.@@..@.@.@@.@....@@@...@@@.@@@..@.@.@.@@@.@.@.@....@@....@@@@@.@@@@@@@.....@@..@.@@@.@@@@....@@..@@@.@@.@.@.
+@@.@..@@@@@@@.@.@@.@@@.@@@.@@.@@@@@@@@@@.@@@..@.@@@@..@@.@@.@.@.@@@.@.@@@@@@......@@@..@@@.@.@@.@@@@..@@.@@.@.@@..@.....@@@@@.@.@@.@.@.@.@.@
+@@@.@@@@..@.@@.@@@.@.@@@.@....@.@.@@..@..@@.@@@@@@.@@.@@@@.@@@@@@@@@@@@@..@.@.@@..@..@@.@@@@.@@.@@.@@..@@@@@@.@@@@@.@@.@@@.@@.@...@@.@@.@.@@
+@.@@@@@@@..@.@@@.@.@@@.@.@@@@@..@@@@@...@@@@.@@..@@.@.@...@@@@@@@@@@@.@@@@@@...@@@@@.@@@@@..@@@.@@.@..@.@@@@.@@.@@@.@@@.@@@.@.@@@@@@@@@..@@.
+@.@@.@..@@.@@@@@.@@.@@@.@..@..@@@.@.@.@@@@@.@@..@.@@....@@@@@.@..@@.@@.@@.@@.@@.@.@@.@@@.@@@.@@.@.@@@.@@@@@@@..@@@.@.@@.@.@@.@@@.@@...@.@@@@
+@@......@@@@@.@.@.@.@@@@..@@.@@@@@@@@@.@@@@.@@@.@@@.....@@@@@@@@..@@@@.@@...@@@@@@@@..@.....@.@@@..@.@@@@@@@@@.....@@@@@@@@.....@@.@@..@@.@.
+@@@...@@.@.@.@@.@@.@..@.@@.@@@@@..@..@.@@@@@@@.@@.@@@..@..@.@@@@.@@.@@@@@@@@@@@.@..@@@@.@..@@@@@.@.@@@@@@@@@..@@.@@@@...@@@@@@@.@@..@@.@@@@@
+.@.@@@.@@@@.@@.@@@@@...@@..@@@@@@@@@.@.@@..@.@@.@@@.@@@@@@.@@@@...@@.@@@..@...@@.@@@@.@....@@@.@....@....@@@@@@.@@@..@@.@@..@@...@@@..@.@@@.
+.@....@.@@@@@@@@@@...@@@@.@.@.@.@@@.@@@@@@@@@.@@.@@@..@.@.@@@@.@...@@@@..@.@@@@..@@.@@@@.@@@@@@.@@.@.@@.@..@@@@@@@@@@@@@@@@.@@@@@@.@.@.@.@..
+..@@@.@..@@..@@@@@@@..@@@.@@@@..@@..@@@@.@@@@..@@@.@@@.@@@@..@@..@.@.@.@@@@@@@...@@.@@@@@@.@@.@@@.@@@.@@@@@@@@.@.@@@@@@@@@.@.@....@@.@@@@@@.
+@.@@@.@@@@@.@@@@@.@@@...@.@@.@@@@@@.@..@.@@@@@@.@@.@@@@@@.@@@@@.@@@@@@...@@..@@@@@..@.@@@.@.@@.@.@.@@.@@@@.@.@..@@@.@.@@@...@@@..@@.@@@@@..@
+@@@.@@@.@@..@..@@@....@.@@@..@....@.@.@@@.@....@@@..@@.@@@@.@.@@...@..@.@@@.@@@@@@@@@..@.@@...@@@.@@@@@...@@....@@@@@@.@....@@@.@@.@@..@@@@@
+@.@..@...@@..@.@@@..@@@@@@.@..@@@..@@@@@.@@@@@@@.@..@@@@...@@.@@@@.@@@@@.@.....@@@@@.@@@@@.....@@.@..@@.@@@@@.@@.@@@@@.@@.@@.@@.@.@@..@.@.@.
+@..@@@@@@.@@...@.@..@@@@.@@@.@@@@@@@@.@..@@@@...@@@@@@@.@.@@.@@@@..@....@.@....@...@@.@@.@.@.@.@.@@.@@.@@.@@@..@@@@.@@@@.@@@.@.@@...@..@@...
+@@@@@@.@@@@@.....@@@@@@@@@@@..@.@@@@@@@@..@...@.@@.@@@@.@@@.@@@.@.....@.@@@.@@..@@@@...@@..@.@@@@.@@.@@@@..@@.@..@@@@@@@.....@@.@...@@..@.@.
+@@@.@@@@..@@.@.@@@@..@.@@.@@..@@@..@@.@@.@@...@@@@@..@..@@@@.@@.@@@@@.@@@..@@.@@@@..@.@.@...@@.@@@@@@..@@@@@@@..@@@@@@@.@.@.@.@.@...@@@.@@.@
+@@@@.@..@@.@.@.@@@.@..@@.@@@@@@@..@@@@@@@@@@@.@@@@@@.@@.@.@@.@@..@@@.@@@@@.@@.@..@@@.@@@@.@@@....@@@@@@@.@....@.@@@@@@@.@@@@.@@@...@.@@.@@@@
+@@.@.@@...@@@.@@..@@.@@@@.@@.@@.@..@.@..@@@@@@..@...@@..@@@.@.@@@@.@@.@@@.@.@@.@.@@@@@...@.@.@@@..@@@@.@@@@@.@...@@@.@@@@.@@.@...@.@@@.@@@.@
+@.@.@..@@@@..@@.@.@..@@@@@.@@@.@....@@.@..@@.@.@..@@..@....@@@.@@@..@@.@@@@@@.@.@.@@@@@.@@..@.@@.@@@..@@@.@@.@@@@..@@@@@@@@@.@@@@@@.@@@@.@.@
+.@.@@.@@@.@..@@..@@..@@@.@.@@.@@.@@.@....@@.@@.@.@@@@@.@@@.@.@....@.@@@.@@@@@@@@@@.@@@..@@@@....@@.@@...@.@@...@.@@....@...@.@@.@.@@..@.@@@@
+.@@@@@@.@@@@@@@..@@@@@@@@@@..@..@@@@@@@@@@....@.@@@@@@.@@@@@@@@@.@@..@.@...@......@.@@@@@.@.@.@@.@@....@@..@@@..@@.@@.@..@@@.@@...@@@@@@@@@.
+@@@.@@@@@@.@...@.@@...@..@@@@.@@@@@..@.@@.@@@@@@@....@@@.@.@@.@..@.@.@@.@.@@..@.@@@@.@....@...@@@.@@@@.@@@@@@@@.@...@@@@@@@@@@.@@@..@.@..@@@
+@@@@.@@..@..@@@@.@.@@@..@@.@@@.@@.@@.@@@..@@@@.@@@@@@.@@..@.@@@.@.@@...@..@@@...@.@@.@@.@.@@@@.@.@...@@@.@@@.@@.@.@@.@@.@@@@@@.@@@@.@@..@@@@
+.@.@.@@@@@@@@@.@...@..@@.@@@@@@@@@.@@@@.@@..@@.@@.@@@@.@@@@@@@..@@..@...@@.@@@@@@@@@.@@@@@@@@@@@@....@.@@@.@.@@@..@@..@@.@@.@@.@..@@.@.@@@@@
+.@@.@@@....@@...@@.@@@.@@...@@..@@.@@..@@@@...@@@@@..@@.@..@.@@@.@.@..@..@@@@.@@..@@......@.@@@@@@.@....@.@.....@@@.@@.@@@@..@@.@@@@..@@..@@
+..@.@@@@@.@@.@..@..@@.@@@@.@@@...@..@@@.@..@@@.@@@.@@...@@@@@@.@@.@.@@@@..@@@@@.@@@.@.@@@@@...@...@@@@.@@@@@.@@@@@@.@@@.@@@@@@..@....@.@....
+......@.@@@@@@@..@@@..@@@@@.@@@.@@@.@@.@.@.@@..@@@@.@.@@...@.@@@@.@@.@.@.@@@@@.@@@@@@@...@@.@@@@@..@@@.@@@.@.@@@@...@@@@@@.@@@.@@@@.@..@@@.@
+@.@@@@.@@.@@.@.@@.@@@@@@@@@@@@@@@@@@@@@@.@@@@.@.@.@@@@.@..@@@..@.@..@@@@@..@@@@@.@..@@.@@@@@@.@@@@@@.@@.@@@@@.@@@.@@@@.@.@@@@@@..@@.@@..@@@@
+.@@@@.@@@@@@@@.@@@@@.@..@.@..@..@@.@@@@@...@@@.@@@@@@.@@@@@@@@.@.@@@@..@@..@@@.@@@@@@.@.@@@@@@@.@@@.@..@.@@.@.@..@@@.@@@@@.@@@@@...@@@.@@.@.
+@...@@@@..@@.@@@.@@@.@@@@@.@@@....@@@@@@@@@@.@@..@.@.@.@.@@..@.@@@@@.@@.@.@@@@@.@@@.......@..@@......@@..@@.@@@.@@@@@@.@.@@@@@.@@@@.@@@@..@.
+.@@....@..@.@.@@@@@@@@@@@@..@@@@.@@@@@@@@@..@@.@.@@@@.@@.@@@@@@@.@@@..@.@.@@@@.@.@@@@@@@@.@@@@..@@@..@@@.@@@.@@@@......@@.@@..@@.@@@@.@...@.
+@@@@@@@@@@@@@@@@@@.@@.@...@@.@..@@.....@@@@@@..@@.@.@@..@..@@@...@@....@@@@@.@@@@.@@.@@@@.@..@@.@@.@@@.@@@......@...@...@@@@@@@@@@@.@@@@@.@@
+@@...@@@.@@.@.@.....@.@@@@@@@.@.@.@@@..@@@@@..@@.@@@@@@@@@@@@@@@.@@..@@@@...@@@.@@.@@.@@@@@.@..@@@.@@@@@..@@....@.....@@@..@@@@@@@@....@@@.@
+@@@@.@.@@@@@@@@..@..@.@@@@.@.@@..@@@@@@@.@@@@.@..@@@@@.@.@.@@@@@@..@.@.@...@@@@@@@@....@.......@...@@@@@@@.@.@..@@@@@..@@@@@@.@@@@@@.@@.@@@@
+@.@@@@@.@@@@..@..@.@@..@@..@@@..@@.@@...@@@.@.@@.@@@@@@@@@@..@@.@@@@@@.@@@..@@.@@@@@@@.@.@@..@.@..@@.@@@@.@@.@@@..@@.@@@.@..@@@@.@@@@.@.@@@@
+.@@@@@@@....@...@.@.@@...@@@@....@..@.@@@@.@.@@@@@.@@.@.@@@....@@.@@.@.@...@@.@...@.@....@@@.@@.@@@@.@@@.@.@.@.@@.@@.@@@@.@@@@@@.@@@@.@@@@@.
+@@@.@@@@.....@.@.@@@.@@....@@..@@.@@@@.@@.@@.@.@@.@@@@@@@@@@@@@@@..@..@@@@@@..@@@.@@.@..@...@@@.@@@@.@@@.@...@@@@@@@.@@@.@@.@@.@.@@@@@@@@.@@
+..@@@.@.@@.@@.@@.@@.@@...@@.@@..@.@.@.@..@@@@.@@..@@@@@@@@.@@@@@@@@.@.@.@@.@.@@..@@.@@@@@.@@@...@@@.@.@..@..@@@@@.@@..@@@@@@...@.@...@@@@@@.
+@@.@.@@..@@@@@@@.@.@@@@.@.@.@.@@@.@.@@@..@.@.@.@@.@@@@@@@@..@.@@.@....@.@@@@@@@@@@..@..@@@@@@@..@.@@@.@@@@@@@.@@..@.@@@@@@...@@@...@@@@@...@
+@@@@@...@@@@..@@@@@@@@@@.@@@.@@@@@@.@.@@.@@...@..@.@@@...@@@..@@.@.@@@@@@@@@@...@@.@@.@@@.@@@.....@@@@@.@@@@@@@@.@@@...@@.@@..@.@@@@@@@.@@@@
+...@@@@@.@.@.@.@..@@@@.@@@@@@@@@@...@.@.@@@...@@@..@@@@@.@@@@@@@@@@@@@.@@@@@@.@...@@@@.@@@@@.@.@@.@...@@.@@.@@@@@@@@@@@@@.@@..@.@@@@.@@@.@@@
+@@.@@..@@@@.@@..@@@.@@.@.@@@@.@@@.@@@..@@....@@@@..@@@...@@@.@@@.@.@@@.@@..@@@@@..@..@@..@@..@.@..@..@.@@@@.@.@.@@@@@@@.@@.@@@@@@..@@..@.@..
+@@@.@@.@@@.@@@.@..@.@@...@@.@@@.@..@.@@.@....@@@.@.@@@.@.@@.@@.@@.@@.@.@.@@.@..@.@.@@.@@.@@.@.@@@@@...@@@@..@@.@@..@.@@@@@@..@@@@.@@@@..@@..
+@@.@.@@@@@@@@@@..@@..@..@@@@@..@@@.@.@@@.@@@@.@@....@@.@.@@..@@.@@@@.@@.@@@@.@@.@@.@@@@.@...@@.@..@@@..@.@.@@.@@@@.@.@@@@.@.@@.@.@..@.@@.@.@
+@@@@@..@@.@...@@@@@.@@@.@@@@@@@.@@@.@@@@@@@@@@@.@@.....@..@..@.@@@@@@@@@.@@@.@@.@@..@.@........@..@.@@@@@@@@.@@.@.@.@@.@@@@.@....@@.@.@@@@.@
+@@@.@..@.@@.@@@@@..@@@@.@@..@@@@@@@@@@@.@@@@@@@..@@.@@.@@@@@@@@.@@@@@...@.@..@.@..@..@@@.@@.@@@.@@.@@.@....@@@@@@@@@.@@..@.@@@@...@.@@.@@@@.
+.@.@@...@@.@@.@.@@@@.@@..@@..@..@@.@@@.@@@@.@.@@.@.@@@@@@@..@@@.@@@@@@@@.@@.@@@..@..@@@@@.@@@.@.@@@@.@...@@@@@@@@@@.@@.@@.@@@.@@@@.@.@@..@..
+@..@.@..@@...@.@@@@..@@.@@@.@@@@@.@.@@@@..@@@@@.@@@@.@.@@.@@.@@@@.@@@..@@@@@..@..@@@@@@@.@...@@@@..@@@@@@@.@.@...@.....@@@@@..@.@.@@.@@@@@..
+.@.@@@@...@@@.@@@@@.@@@@@@.@@@@@@..@@..@@@@.@@@@@@@@@@@@@.@@@@@@..@@@@@.@@@@@@@@@.@...@@@@@@@.@.@@.@.@@@..@@@@@@@..@..@@@@@@@@..@@@...@@@.@.
+.@@@@..@@@@@@@@@@@@@@...@.......@.@.@@@@@@.@.@@@@@@@@@@@...@.@@@@@@.@.@@@@@.@.@@@@@.@.@@..@..@.@@@.@@..@@@@..@@@@@@.@@@@.@@@@..@@@.@..@..@@@
+...@@@.@..@@@@@.@@@@@@@.@.@.@....@@@@.@@@.@@@.@@@@@.@.@@@.@@@@@@@@.@@@@..@@.@@...@@@@@@@@@@@@@@@@.@@@@.@@@..@@@@.@@.@..@@...@@@.@@@@.@..@..@
+@..@.@@@@@@@..@@@@..@@@@..@.@@@@@@@@@@@.@@@@@@@@@@@@....@@.@@@@@@@@@@@@@@@@@.@@.@.@.@@.@.@.@@@@@@@@@@@@@@@...@@@@@.@@...@@@...@@..@@@@..@.@@
+@.@....@@@@@@@@@@@.@@@.@@.@@@@.@..@@@@@@.@@..@@@@@@...@.....@.@@...@@..@@...@@@@@@@@@@.@@@@@..@...@.@@.@@@.@@@@...@@@@@..@@@@..@@@@@.@@@@...
+@@..@@@@@@@@@@.@.@@@....@@@@@@.@@.@@@@@..@@@.@@..@.@.@@@@@@.@@@@@@.@@...@@@@@@@@@.@@@@@..@@@.@@@.@.@@@@@@@@@@.@..@.@@@@.@@@..@@@@.@@@..@..@@
+@@@....@..@@@@@@@@@@.@...@@.@@@@@@@@@@@@@..@@..@@..@@@..@.@@.@@@@.@@.@@@@.@@.@.@@@.@..@@@@@@@@.@.@@@.@@@@@@@@.@@.@@@.@@@.@.@.@@@@..@@@.@@.@.
+@@@@.@@@..@@@@@@@...@@@@@.@@@.@@@@@@@@@.@@.@.@@@.@@@.@.@.@@@@.@@@@@@.@@.@@....@@@@@@@@@.@@@.@@@.@@@..@@....@@@@.@.....@@@..@@@@@..@.@@.@@@@.
+@@.@@@@.@.@@.@@.@@@@@@@@@@@.@.@@.@.@@.@@@@...@@.@.@@@@@@.@.@@@@@@@..@.@@.@@@@...@@..@@@@@@@@@.@@@.@@.@@.@.@..@.@@@..@@.@@@.@...@.@@.@@..@@@.
+@@.@@@@@@@@@@@.@@@@.....@.@@@@.@@.@@@@@.@@@@...@@@.@.@@@@@@@@@..@@.@.@.....@@@@@@@@@@@@@@@@@..@.@@@.@@@@@.@@@.@.@@@@@.@.@.@@@@@@.@@@.@..@@.@
+@.@.@@@@@.@.@@...@@@@@@..@@.@@@@@@.@@..@@@@...@...@.@.@@@@@@@@@@@@@@...@@@..@.@@.@@.@.@@.@@...@@@@@..@@@...@.@@.@@@...@@@@.@@.@.@@..@.@@@@@.
+@@@.@@.@@@@..@@@@@@.@@....@.@.....@@.@.@@.@@.@@@@@...@..@@...@@.@@@@@.@...@@@@.@@.@..@@.@.....@@@@@@@@@.@.@@@...@.@.@.@.@@@...@@@@@@..@@@@@@
+@.@.@@@@@@@@@@.@.@@@..@..@.@.@..@.@@@@.@@@@@@.@@@@@@...@.@.@@@.@.@@@.@.@@..@@.@@@.@.@.@@.@..@@.@..@@@@@..@@..@@.@@@..@..@@@...@@@@.@..@..@@.
+.@@@@@@@..@@@.@@.@.@@@@.@.@@@@..@@..@@@..@.@@@.@@@@@@@.@@..@..@..@@@..@@@.@@@@.@@@.@@..@@@.@.@@@@.@@@@@...@.@@.@@.@@@@..@..@.@@...@.@@..@@..