Skip to content

Latest commit

 

History

History
1075 lines (947 loc) · 105 KB

day_09.md

File metadata and controls

1075 lines (947 loc) · 105 KB

Day 9 - Rope Bridge

A photo of Santa's Elfs in single file crossing a rope bridge over a river in a tropical forset

Part One

This rope bridge creaks as you walk along it. You aren't sure how old it is, or whether it can even support your weight.

It seems to support the Elves just fine, though. The bridge spans a gorge which was carved out by the massive river far below you.

You step carefully; as you do, the ropes stretch and twist. You decide to distract yourself by modeling rope physics; maybe you can even figure out where not to step.

Consider a rope with a knot at each end; these knots mark the head and the tail of the rope. If the head moves far enough away from the tail, the tail is pulled toward the head.

Due to nebulous reasoning involving Planck lengths, you should be able to model the positions of the knots on a two-dimensional grid. Then, by following a hypothetical series of motions (your puzzle input) for the head, you can determine how the tail will move.

Due to the aforementioned Planck lengths, the rope must be quite short; in fact, the head (H) and tail (T) must always be touching (diagonally adjacent and even overlapping both count as touching):

....
.TH.
....

....
.H..
..T.
....

...
.H. (H covers T)
...

If the head is ever two steps directly up, down, left, or right from the tail, the tail must also move one step in that direction so it remains close enough:

.....    .....    .....
.TH.. -> .T.H. -> ..TH.
.....    .....    .....

...    ...    ...
.T.    .T.    ...
.H. -> ... -> .T.
...    .H.    .H.
...    ...    ...

Otherwise, if the head and tail aren't touching and aren't in the same row or column, the tail always moves one step diagonally to keep up:

.....    .....    .....
.....    ..H..    ..H..
..H.. -> ..... -> ..T..
.T...    .T...    .....
.....    .....    .....

.....    .....    .....
.....    .....    .....
..H.. -> ...H. -> ..TH.
.T...    .T...    .....
.....    .....    .....

You just need to work out where the tail goes as the head follows a series of motions. Assume the head and the tail both start at the same position, overlapping.

For example:

R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

This series of motions moves the head right four steps, then up four steps, then left three steps, then down one step, and so on. After each step, you'll need to update the position of the tail if the step means the head is no longer adjacent to the tail. Visually, these motions occur as follows (s marks the starting position as a reference point):

== Initial State ==

......
......
......
......
H.....  (H covers T, s)

== R 4 ==

......
......
......
......
TH....  (T covers s)

......
......
......
......
sTH...

......
......
......
......
s.TH..

......
......
......
......
s..TH.

== U 4 ==

......
......
......
....H.
s..T..

......
......
....H.
....T.
s.....

......
....H.
....T.
......
s.....

....H.
....T.
......
......
s.....

== L 3 ==

...H..
....T.
......
......
s.....

..HT..
......
......
......
s.....

.HT...
......
......
......
s.....

== D 1 ==

..T...
.H....
......
......
s.....

== R 4 ==

..T...
..H...
......
......
s.....

..T...
...H..
......
......
s.....

......
...TH.
......
......
s.....

......
....TH
......
......
s.....

== D 1 ==

......
....T.
.....H
......
s.....

== L 5 ==

......
....T.
....H.
......
s.....

......
....T.
...H..
......
s.....

......
......
..HT..
......
s.....

......
......
.HT...
......
s.....

......
......
HT....
......
s.....

== R 2 ==

......
......
.H....  (H covers T)
......
s.....

......
......
.TH...
......
s.....

After simulating the rope, you can count up all of the positions the tail visited at least once. In this diagram, s again marks the starting position (which the tail also visited) and # marks other positions the tail visited:

..##..
...##.
.####.
....#.
s###..

So, there are 13 positions the tail visited at least once.

Simulate your complete hypothetical series of motions. How many positions does the tail of the rope visit at least once?

Your puzzle answer was 6018.

Part Two

A rope snaps! Suddenly, the river is getting a lot closer than you remember. The bridge is still there, but some of the ropes that broke are now whipping toward you as you fall through the air!

The ropes are moving too quickly to grab; you only have a few seconds to choose how to arch your body to avoid being hit. Fortunately, your simulation can be extended to support longer ropes.

Rather than two knots, you now must simulate a rope consisting of ten knots. One knot is still the head of the rope and moves according to the series of motions. Each knot further down the rope follows the knot in front of it using the same rules as before.

Using the same series of motions as the above example, but with the knots marked H, 1, 2, ..., 9, the motions now occur as follows:

== Initial State ==

......
......
......
......
H.....  (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)

== R 4 ==

......
......
......
......
1H....  (1 covers 2, 3, 4, 5, 6, 7, 8, 9, s)

......
......
......
......
21H...  (2 covers 3, 4, 5, 6, 7, 8, 9, s)

......
......
......
......
321H..  (3 covers 4, 5, 6, 7, 8, 9, s)

......
......
......
......
4321H.  (4 covers 5, 6, 7, 8, 9, s)

== U 4 ==

......
......
......
....H.
4321..  (4 covers 5, 6, 7, 8, 9, s)

......
......
....H.
.4321.
5.....  (5 covers 6, 7, 8, 9, s)

......
....H.
....1.
.432..
5.....  (5 covers 6, 7, 8, 9, s)

....H.
....1.
..432.
.5....
6.....  (6 covers 7, 8, 9, s)

== L 3 ==

...H..
....1.
..432.
.5....
6.....  (6 covers 7, 8, 9, s)

..H1..
...2..
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

.H1...
...2..
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

== D 1 ==

..1...
.H.2..
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

== R 4 ==

..1...
..H2..
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

..1...
...H..  (H covers 2)
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

......
...1H.  (1 covers 2)
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

......
...21H
..43..
.5....
6.....  (6 covers 7, 8, 9, s)

== D 1 ==

......
...21.
..43.H
.5....
6.....  (6 covers 7, 8, 9, s)

== L 5 ==

......
...21.
..43H.
.5....
6.....  (6 covers 7, 8, 9, s)

......
...21.
..4H..  (H covers 3)
.5....
6.....  (6 covers 7, 8, 9, s)

......
...2..
..H1..  (H covers 4; 1 covers 3)
.5....
6.....  (6 covers 7, 8, 9, s)

......
...2..
.H13..  (1 covers 4)
.5....
6.....  (6 covers 7, 8, 9, s)

......
......
H123..  (2 covers 4)
.5....
6.....  (6 covers 7, 8, 9, s)

== R 2 ==

......
......
.H23..  (H covers 1; 2 covers 4)
.5....
6.....  (6 covers 7, 8, 9, s)

......
......
.1H3..  (H covers 2, 4)
.5....
6.....  (6 covers 7, 8, 9, s)

Now, you need to keep track of the positions the new tail, 9, visits. In this example, the tail never moves, and so it only visits 1 position. However, be careful: more types of motion are possible than before, so you might want to visually compare your simulated rope to the one above.

Here's a larger example:

R 5
U 8
L 8
D 3
R 17
D 10
L 25
U 20

These motions occur as follows (individual steps are not shown):

== Initial State ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
...........H..............  (H covers 1, 2, 3, 4, 5, 6, 7, 8, 9, s)
..........................
..........................
..........................
..........................
..........................

== R 5 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
...........54321H.........  (5 covers 6, 7, 8, 9, s)
..........................
..........................
..........................
..........................
..........................

== U 8 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
................H.........
................1.........
................2.........
................3.........
...............54.........
..............6...........
.............7............
............8.............
...........9..............  (9 covers s)
..........................
..........................
..........................
..........................
..........................

== L 8 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
........H1234.............
............5.............
............6.............
............7.............
............8.............
............9.............
..........................
..........................
...........s..............
..........................
..........................
..........................
..........................
..........................

== D 3 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
.........2345.............
........1...6.............
........H...7.............
............8.............
............9.............
..........................
..........................
...........s..............
..........................
..........................
..........................
..........................
..........................

== R 17 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
................987654321H
..........................
..........................
..........................
..........................
...........s..............
..........................
..........................
..........................
..........................
..........................

== D 10 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
...........s.........98765
.........................4
.........................3
.........................2
.........................1
.........................H

== L 25 ==

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
...........s..............
..........................
..........................
..........................
..........................
H123456789................

== U 20 ==

H.........................
1.........................
2.........................
3.........................
4.........................
5.........................
6.........................
7.........................
8.........................
9.........................
..........................
..........................
..........................
..........................
..........................
...........s..............
..........................
..........................
..........................
..........................
..........................

Now, the tail (9) visits 36 positions (including s) at least once:

..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
..........................
#.........................
#.............###.........
#............#...#........
.#..........#.....#.......
..#..........#.....#......
...#........#.......#.....
....#......s.........#....
.....#..............#.....
......#............#......
.......#..........#.......
........#........#........
.........########.........

Simulate your complete series of motions on a larger rope with ten knots. How many positions does the tail of the rope visit at least once?

Your puzzle answer was 2619.

Visualization

Final Rope Track:

.............................................................................#.....................................................................................................................................................................................
............................................................................#......................................................................................................................................................................................
.....................................................................########......................................................................................................................................................................................
....................................................................#.......#......................................................................................................................................................................................
...................................................................#.........#.....................................................................................................................................................................................
..................................................................#...........#....................................................................................................................................................................................
.................................................................#.............#...................................................................................................................................................................................
................................................................#...............#..................................................................................................................................................................................
...............................................................#.................#.................................................................................................................................................................................  
..............................................................#...................#................................................................................................................................................................................  
.............................................######.....######.....................#...............................................................................................................................................................................  
............................................#......#.....#..##......................#..............................................................................................................................................................................  
...........................................#........#.....##..#......................#...................#.........................................................................................................................................................  
..........................................#.........#.....##...#......................#.................#..........................................................................................................................................................  
.........................................#..........#....#..#...#......................#...............#...........................................................................................................................................................  
........................................#...........#...#..#.....#......................#.............#............................................................................................................................................................  
.......................................#............#..#..#.......#......................#...........##............................................................................................................................................................  
......................................#.............#.#..#.........#......................#.........#..#...........................................................................................................................................................  
.....................................#..............##..#...........#......................#########....#..........................................................................................................................................................  
....................................#...............#..#.............#...................................#.........................................................................................................................................................  
..................................##................#.#...............#...................................#........................................................................................................................................................  
.................................#..................##.................#...................................#.......................................................................................................................................................  
................................#...................#...................#...................................#......................................................................................................................................................  
...............................#...................##....................#...................................#.....................................................................................................................................................  
..............................#...................#.#.....................#...................................#....................................................................................................................................................  
.............................#...................#..#......................#...................................#...................................................................................................................................................  
............................#...................#...#.......................#...................................#..................................................................................................................................................  
............................#..............#####....#........................#...................................#.................................................................................................................................................  
.............................#............#.........#.........................#...................................#................................................................................................................................................  
..............................#..........#.....................................###.................................#......................................##.......................................................................................................  
...............................#........#.........................................#.................................#.............################.......#..#......................................................................................................  
............................#...#......#...........................................#.................................#...........#................#.....#....#.....................#...............................................................................  
...........................#.#...#....#.............................................#.................................#.........#..................#...#......#...................##...............................................................................  
..........................#...#..#...#...............................................#.................................#.......#....................#.#........#.................#.#...............................................................................  
.........................#.....######.................................................#.................................#######......................#..........#........##############............................................................................  
........................#........#.....................................................#............................................................#.#..........#......#####..#...#...#...........................................................................  
.......................#.........#................................................######...........................................................#...#..........#....##..#..#....#....#..........................................................................  
......................#.........#................................................#.................................................................#....#..........#..##..#..#.....#.....#.........................................................................  
.....................#.........#................................................#...................................................................#...##.........#..#..#....#....#.....#.........................................................................  
....................#.........#................................................#.....................................................................#....#....##########......#...#.....#.........................................................................  
...................#.........#................................................#.......................................................................#...#...#....#............##.#.....#.........................................................................  
..................#.........#................................................#.........................................................................##.#..#.....#...........#...#.....#.........................................................................  
....#............#.........#................................................#...........................................................................###.#..#..#...........#...#......#.........................................................................  
...#.#..........#.........#................................................#.............................................................................###...#.#...........#...#.......#.........H...............................................................  
..#...#........#.........#................................................#...............................................................................##..#.#...........#...#........#.........1...............................................................  
.#.....#......#.........#................................................#..............................................................................#.#.##.#.#.........#...#........#..........2...............................................................  
#.......#....#.........#.................................................#.............................................................................#.##..##...#.......#...#..........#.........3...............................................................  
#........####.#.......#..................................................#............................................................................#...##.###...#.....#...#............#........4...............................................................  
.#.........#...#.....#...................................................#.............................................................................#..###.##....#...#...#..............#...T8765...............................................................  
..#.......#.....#...#.....................................................#.............................................................................#.####..#....#.#####................#.#....................................................................  
...#.....#.......#.#.......................................................#.............................................................................##...##########...................#.#.....................................................................  
....#...#.........#.........................................................#.............................................................................#.....#...........................#......................................................................  
.....#.#.....................................................................#...........................................................................#......#..................................................................................................  
......#.......................................................................########..................................................................#......#...................................................................................................  
.............................................................................#........#................................................................#......#....................................................................................................  
............................................................................#..........#................................................................#....#.....................................................................................................  
........................................................................................#................................................................#..#......................................................................................................  
.........................................................................................#................................................................##.......................................................................................................  
..........................................................................................#........................................................................................................................................................................  
...........................................................................................#.......................................................................................................................................................................  
............................................................................................#......................................................................................................................................................................  
.............................................................................................#.....................................................................................................................................................................  
............................................................................................#......................................................................................................................................................................  
...........................................................................................#.......................................................................................................................................................................  
..........................................................................................#........................................................................................................................................................................  
.........................................................................................#.........................................................................................................................................................................  
.....................................................................................##.#..........................................................................................................................................................................  
....................................................................................#..#...........................................................................................................................................................................  
...................................................................................#...............................................................................................................................................................................  
..................................................................................#................................................................................................................................................................................  
.................................................................................#.................................................................................................................................................................................  
................................................................................#..................................................................................................................................................................................  
...............................................................................#...................................................................................................................................................................................  
..............................................................................#....................................................................................................................................................................................  
.............................................................................#.....................................................................................................................................................................................  
.............................................................................#.....................................................................................................................................................................................  
.............................................................................#.....................................................................................................................................................................................
..............................................................................#....................................................................................................................................................................................  
...............................................................................#...................................................................................................................................................................................  
................................................................................#..................................................................................................................................................................................  
.................................................................................#.................................................................................................................................................................................  
..................................................................................#................................................................................................................................................................................  
...................................................................................#...............................................................................................................................................................................  
....................................................................................#..............................................................................................................................................................................  
.....................................................................................#.............................................................................................................................................................................  
......................................................................................#............................................................................................................................................................................  
.......................................................................................#...........................................................................................................................................................................  
........................................................................................#..........................................................................................................................................................................  
.........................................................................................##########................................................................................................................................................................  
...................................................................................................#...............................................................................................................................................................  
....................................................................................................#..............................................................................................................................................................  
.....................................................................................................#.............................................................................................................................................................  
......................................................................................................#............................................................................................................................................................  
.......................................................................................................#...........................................................................................................................................................  
........................................................................................................#..........................................................................................................................................................  
.......................................................................................................#...........................................................................................................................................................  
......................................................................................................#............................................................................................................................................................  
.....................................................................................................#.............................................................................................................................................................  
....................................................................................................#..............................................................................................................................................................  
...................................................................................................#...............................................................................................................................................................  
..................................................................................................#................................................................................................................................................................  
.................................................................................................#.................................................................................................................................................................  
................................................................................................#..................................................................................................................................................................  
........................................................######.................................#...................................................................................................................................................................  
.......................................................#....#.................................#....................................................................................................................................................................  
......................................................#.....#................................#.....................................................................................................................................................................  
.....................................................#.......#..............................#......................................................................................................................................................................  
....................................................#.........#............................#.......................................................................................................................................................................  
...................................................#..##.......#..........................#........................................................................................................................................................................  
..................................................#...#.#.......#........................#.........................................................................................................................................................................  
.................................................#....#..#.......#.......................#.........................................................................................................................................................................  
................................................#.....#...#.......#.....................#..........................................................................................................................................................................  
.................................................#....#....#.......#...................#...........................................................................................................................................................................  
..................................................#...#.....#.......#.................#............................................................................................................................................................................  
...................................................#..#......#.......#...............#..........##.................................................................................................................................................................  
....................................................#.#.......#.......#.............#..........#..#................................................................................................................................................................  
.....................................................##.......#........#...........#..........#....#...............................................................................................................................................................  
......................................................##.....#..........#.........#..........#......#..............................................................................................................................................................  
.......................................................##...#............#.......#..........#........#.............................................................................................................................................................  
........................................................##.#..............#########........#..........#............................................................................................................................................................  
.........................................................##.....................#..#......#............#...........................................................................................................................................................  
..........................................................#.....................#...#....#..............#..........................................................................................................................................................  
..........................................................#.....................#....#..#................#.........................................................................................................................................................  
..........................................................#.....................#.....##.................#.........................................................................................................................................................
..........................................................#.....................#........................#.........................................................................................................................................................  
..........................................................#.....................#........................#.........................................................................................................................................................  
..........................................................#.....................#........................#.........................................................................................................................................................  
..........................................................#.....................#........................#.........................................................................................................................................................  
.........................................................#......................#........................#.........................................................................................................................................................  
........................................................#.......................#........................#.........................................................................................................................................................  
.......................................................#........................#........................#.........................................................................................................................................................  
......................................................#.........................#........................#.........................................................................................................................................................  
.....................................................#..........................#........................#.........................................................................................................................................................  
....................................................#...........................#........................#.........................................................................................................................................................  
...................................................#.............................#........................#........................................................................................................................................................  
..................................................#................#..............#........................#.......................................................................................................................................................  
...................................................#..............#.#..............#........................#......................................................................................................................................................  
....................................................#............#..#.............#..........................#.....................................................................................................................................................  
.....................................................#............##.............#............................#....................................................................................................................................................  
......................................................#............##...........#..............................#...................................................................................................................................................  
.......................................................#............##.........#................................#..................................................................................................................................................  
........................................................#............##.......#..................................#.................................................................................................................................................  
.........................................................#............##.....#....................................#................................................................................................................................................  
..........................................................#............##...#......................................#...............................................................................................................................................  
...........................................................#............##.#........................................#..............................................................................................................................................  
............................................................#............##..........................................#.............................................................................................................................................  
.............................................................#............#######.....................................#............................................................................................................................................  
..............................................................#..................#....................................#............................................................................................................................................  
...............................................................#..................#..................................#.............................................................................................................................................  
...............................................................#...................#.......................#........#..............................................................................................................................................  
...............................................................#....................#.....................#.#......#...............................................................................................................................................  
...............................................................#.....................#...................#...#....#................................................................................................................................................  
................................................................#.....................#.................#.....#..#.................................................................................................................................................  
................................................................#......................#...............#.......##..................................................................................................................................................  
................................................................#.......................#.............#...#....##..................................................................................................................................................  
................................................................#......................#.............#...#....#.#..................................................................................................................................................  
................................................................#.....................#.............#...#.#..#.#...................................................................................................................................................  
................................................................#....................#...............#.##..#..#....................................................................................................................................................  
................................................................#...................#.................#..#..##.#...................................................................................................................................................  
................................................................#..................#.................#.#..#.############...........................................................................................................................................  
................................................................#.................#.................#...#..#...#........#..........................................................................................................................................  
................................................................#.................#................#.....##.#.#..........#.........................................................................................................................................  
.................................................................#...............#................#......##..#............#........................................................................................................................................  
..................................................................#.............#................#......#..##..............#.......................................................................................................................................  
...................................................................#...........#................#......#....................#......................................................................................................................................  
....................................................................#.........#................#......#......................#.....................................................................................................................................  
.....................................................................#.......#.................#.....#.......................#.....................................................................................................................................  
......................................................................#.....#..................#....#........................#.....................................................................................................................................  
.......................................................................#...#...................#....#........................#.....................................................................................................................................  
........................................................................#.#....................#....#.......................#......................................................................................................................................  
.........................................................................#.....................#....#......................#.......................................................................................................................................  
...............................................................................................#.....#....................#........................................................................................................................................  
...............................................................................................#......#..................#.........................................................................................................................................  
................................................................................................#......#................#..........................................................................................................................................
.................................................................................................#......#..............#...........................................................................................................................................  
..................................................................................................#......#............#............................................................................................................................................  
...................................................................................................#......#..........#.............................................................................................................................................  
....................................................................................................#......#........#..............................................................................................................................................  
.....................................................................................................#....#........#...............................................................................................................................................  
......................................................................................................#..#........#................................................................................................................................................  
.......................................................................................................##........#.................................................................................................................................................  
................................................................................................................#..................................................................................................................................................  
...............................................................................................................#...................................................................................................................................................  
..............................................................................................................#....................................................................................................................................................  
.............................................................................................................#.....................................................................................................................................................  
............................................................................................................#......................................................................................................................................................  
...........................................................................................................#.......................................................................................................................................................  
..........................................................................................................#.................#......................................................................................................................................  
.........................................................................................................#.................#.#.....................................................................................................................................  
..........................................................................................................#...............#.#......................................................................................................................................  
...........................................................................................................#.............#..#......................................................................................................................................  
............................................................................................................#...........#....#.....................................................................................................................................  
.............................................................................................................#.........#......#....................................................................................................................................  
..............................................................................................................#.......#........#...................................................................................................................................  
...............................................................................................................#######..........#..................................................................................................................................  
.................................................................................................................................#.................................................................................................................................  
..................................................................................................................................#................................................................................................................................  
...................................................................................................................................#...............................................................................................................................  
....................................................................................................................................#..............................................................................................................................  
.....................................................................................................................................#.............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
......................................................................................................................................#............................................................................................................................  
.....................................................................................................................................#.............................................................................................................................  
....................................................................................................................................#..............................................................................................................................  
...........................................................................................................##......................#...............................................................................................................................  
..........................................................................................................#..#....................#................................................................................................................................  
.........................................................................................................#....#..................#.................................................................................................................................  
........................................................................................................#......#................#..................................................................................................................................  
.......................................................................................................#........#...............#..................................................................................................................................  
..................................................................................................#####..........#..............#..................................................................................................................................  
.................................................................................................#................#.............#..................................................................................................................................  
................................................................................................#..................#............#..................................................................................................................................  
................................................................................................#...................#...........#...#..............................................................................................................................  
.................................................................................................#...................#..........#..#.#.............................................................................................................................  
..................................................................................................#...................#........#..#...#............................................................................................................................  
...................................................................................................#...................#......####....#............................................................................................................................  
....................................................................................................#...................#.............#............................................................................................................................  
.....................................................................................................#...................###..........#............................................................................................................................  
......................................................................................................#.....................#.........#............................................................................................................................  
.......................................................................................................#.....................#........#............................................................................................................................  
........................................................................................................#.....................#.......#............................................................................................................................  
.........................................................................................................#.....................#......#............................................................................................................................  
..........................................................................................................#.....................#.....#............................................................................................................................
...........................................................................................................#.....................#....#............................................................................................................................  
...........................................................................................................#......................#..#.............................................................................................................................  
..........................................................................................................#........................##..............................................................................................................................  
.........................................................................................................#...#.....................##..............................................................................................................................  
........................................................................................................#.....#...................#..#.............................................................................................................................  
.......................................................................................................#.......#.................#....#............................................................................................................................  
......................................................................................................#........##................#.....#...........................................................................................................................  
.....................................................................................................#.........#.#..............#.....#............................................................................................................................  
....................................................................................................#..........#..###..........#.....#.............................................................................................................................  
...................................................................................................#............#....#........#.....#..............................................................................................................................  
..................................................................................................#..............#....#......#.......#.............................................................................................................................  
.................................................................................................#........####....#....#....#.........#............................................................................................................................  
................................................................................................#........#....#....#....#..#...........#...........................................................................................................................  
...............................................................................................#........#......#....#....##...........#............................................................................................................................  
.........................................................................................#....#......#.#........#....#...##..........#.............................................................................................................................  
.......................................................................................##.#...#......##..........#....#.#..#........#..............................................................................................................................  
......................................................................................#....#.#.......#............#....#....#......#...............................................................................................................................  
.....................................................................................#......##.......#............#..........#....#................................................................................................................................  
.............................................................................##.....#........##......#............#...........#..#.................................................................................................................................  
............................................................................#..#...#..........#......#............#............##..................................................................................................................................  
...........................................................................#....#.#..................#............#................................................................................................................................................  
..........................................................................#......#...................#............#................................................................................................................................................  
.........................................................................#..........................###...........#................................................................................................................................................  
........................................................................#..........................#.#.#..........#................................................................................................................................................  
.......................................................................#..........................#..#..#........#.................................................................................................................................................  
......................................................................#..........................#...#...#......#........................................................#.........................................................................................  
.......................................................................#........................#....#....#....#........................................................#.#........................................................................................  
........................................................................#......................#.....#.....#..#........................................................#...#.......................................................................................  
.........................................................................#.#..................#.......#.....##........................................................#.....#............#.........................................................................  
..........................................................................#.#................#.........#.............................................................#.......#..........##.........................................................................  
.........................................................................#.#.#..............#.........#.............................................................#......##.#........##..........................................................................  
.........................................................................#.#..#............#..........#.........................................................#..#......#..#.#......##...........................................................................  
........................................................................#..#...#....##....#............#.......................................................#.##.......#...#.#....##............................................................................  
........................................................................#.#.....#..#..#..#..............#.....................................................#............#...#.#..#.#............................................................................  
.........................................................................#.......##....##................#...................................................#.........#..#.....#.##.#.............................................................................  
........................................................................................#.................#.................................................#...........#..##....##.#..............................................................................  
........................................................................................##.................#...............................................#.............#.###..##.#...............................................................................  
........................................................................................#.#.................#.............................................#...............#..######................................................................................  
........................................................................................#..#.................#.............................................#..............#...##.#.................................................................................  
........................................................................................#...#.................#.............................................#............#......##.................................................................................  
.........................................................................................#...#.................#.............................................#..........#......#.#.................................................................................  
..........................................................................................#...#.................#.............................................#........#......#..#.................................................................................  
...........................................................................................###...................#.............................................#......#......#...#.................................................................................  
..................................................................................................................#.............................................#.....#.....#.....#................................................................................  
...................................................................................................................#.............................................#....#....#.......#...............................................................................  
....................................................................................................................#.............................................#...#....#........#..............................................................................  
.....................................................................................................................#.............................................#..#.....#........#.............................................................................  
......................................................................................................................#.............................................#.#......#........#............................................................................  
.......................................................................................................................#.............................................#############.....#....................#......................................................  
........................................................................................................................############...........................##.....######...#..#....#...................#.#.#................##.................................
....................................................................................................................................#.............##.....#....#..#...#..#.#.....#..#..##..................#...#.#..............#..#................................  
.....................................................................................................................................#...........#..#...###..#..#####....#.......#..##.##................#.......#............#....#...............................  
......................................................................................................................................#.........#....#.##.###..###.##.....#.......#.###..#..............#.........#..........#......#..............................  
.......................................................................................................................................#.......#......##...##.##..#..#...##.......##.#.##.#............#...........##########........###...........................  
........................................................................................................................................#.....#.......#......##....##.#.#.#......##.#..###.#..........#.................................#..........................  
.........................................................................................................................................#...#.........#....###......#.#..#.....#..#..#..##.#.......#.#...........#..#...................#.........................  
..........................................................................................................................................#.#...........#..##..#......#...#....#..#.##....##.#.....#.##..........#.##.#...................#........................  
...........................................................................................................................................#.............###....#......##.#...#..#..##.....##.#...#...#.........#......#...................##......................  
.........................................................................................................................................................##......#......##.#.#..#..##.#...#..#.#.#.............#........#....................#.....................  
........................................................................................................................................................##.#......#......##.#..#..#.#..#...#..#.##............#..........#....................#....................  
........................................................................................................................................................#...#.....#........#.#####...##.#...#..#.##..........#............#........#...........#...................  
.......................................................................................................................................................##....#######.........##.......#..#...#..###.........#..............#........#..........#...................  
......................................................................................................................................................#####.#.#...#.#.......#..#.....#.#..#...#....#..##...#...............#.........#.........#...................  
....................................................................................................................................................###.#..#.#....#..#.....#.####...#...#..#...#....##.#.##................#..........#.#......#...................  
....................................................................................................................................................##..#.#.#.....#...#...#..##..#.#.....#..#...#...###.#..................#...........#.#.....#...................  
....................................................................................................................................................##..##.#......#....#....#..#..#.......#..#...#.#...#..................#.............#.#....#...................  
............................................................................................................................................##.....#..#.###.......#.....#..#....#..........#.#....#...#..................#...............#.#....#..................  
...........................................................................................................................................####...#....###........#.....#.####...#..........#....#.###..................#.................#.#..#...................  
..............................................................................................................................................##.#......#.#.......#.....#.....#..#.........#.#..#......................#...................######..................  
...............................................................................................................................................##......##..#......#.....#......##...#.....#...#.#.....................#..s....###................#.................  
................................................................................................................................................#.....#.#...#.....#.....############.#...#.....#####.................##.#....#...#................#................  
.................................................................................................................................................#...#..#....#.####.....#.....#..#....#.#.......#...#................###....#...#..................#...............  
..................................................................................................................................................#.#....#....#...##...##....#....#....#........#....##..............##....#....#...................#..............  
...................................................................................................................................................#......#.......#.#.#..#..#......#..#.#.......#......#............##....#......#...................#.............  
...........................................................................................................................................................#......#..#....##........##...#.......#......#..........#..#..#........#...................#............  
..........................................................................................................................................................#.......#......#.#........##....###.....#......#........#....##..........#...................#...........  
.........................................................................................................................................................#........#.....#...#......#..#...#........#......######.#....##...........##..................#...........  
........................................................................................................................................................#.........#....#.....#....#...####..........#...........#....##...........#.##..................#..........  
.................................................................................................................................................#.....#..........#...#.......#..#...#..#............#..............##...........#...##..................#.........  
..................................................................................................................................................#...#...........#..#........#.#...#....#............#.........................#.........................#........  
...................................................................................................................................................#.#............#.#.........##.#.#......#......##....#........................#..........................#.......  
....................................................................................................................................................#...........##.#..........#..##.......#.....#..#....#.......................#...........................#......  
.....................................................................................................................................................#.........###..#........##.##.......#.....#....#....#.....................#.............................#.....  
......................................................................................................................................................#.......##..######....#.###.......#....##......#....#.....................#.............................#....  
..................................................................................................................................................############.#..##....####..##.......#..###.........#..#.......................#.............................#...  
.................................................................................................................................................#......#......#....#.....##.##.......#..#.............##.........................#.............................#..  
................................................................................................................................................#........#.....#.....#...#..##.......#..#..........................................#.............................#.  
...............................................................................................................................................#..........######......###...####....#..#............................................#.............................#  
..............................................................................................................................................#................#.......#...####....#..#............................................#..........................#...#  
.............................................................................................................................................#.................##.....#...#.####..#..#............................................#..........................#.#.#.  
............................................................................................................................................#..................#.#...#.....#..#.##..##...........................................#..........................#...#..  
...........................................................................................................................................##..................#..###.....#...####.#.#...........................................#.........................#.......  
..........................................................................................................................................##.#................#..........#....###.#..##.........................................#.........................#........  
.........................................................................................................................................##...#..............#..........#.....#..#..#..#.......................................#.........................#.........
....................................................................................................................................######.....#.........#####.........#.....##.#.##....#.......................................#.......................#..........  
...................................................................................................................................#####........#.......#...#.#.......#.....#..#..##.....#.......................................#.....................#...........  
.................................................................................................................................................#.....#....#..##....#.....#....#.#.#.....#.......................................#...#...............#............  
..................................................................................................................................................#.#####...#.#.##..#######......#.#.#.....#.......................................#.#.#.............#.............  
...................................................................................................................................................#.#...#..##........#.#.......#.#.#.#######.......................................#...#...........#..............  
..................................................................................................................................................#.#.....###..........#########...#.#.......#.......................................###...........#...............  
.................................................................................................................................................#........#...............#.#.........#.......#.....................................#...........#.#................  
................................................................................................................................................#........#.................#...........#.......#...................................#...........#.#.................  
...............................................................................................................................................#........#.................#.............#.......#..........................##.....#...........#....................  
..............................................................................................................................................#..........#...............#...............#................................#..###.#...........#.....................  
.............................................................................................................................................#..........#...............#.................#..............................#...##.#...........#......................  
.............................................................................................................................................#.........#...............#...................#............................#....#.#.#.........#.......................  
..............................................................................................................................................#.......#...............#...................#............................#......#...#.......#........................  
...............................................................................................................................................#.....#.................#.................#............................#........#..#......#.........................  
................................................................................................................................................#...#...................#..............#..#..........................#.........#...#....#..........................  
.................................................................................................................................................#.#.....................#............#.#..#........................#..........#....#..#...........................  
..................................................................................................................................................#.......................#..#########..#...#......................#...........#.....##............................  
...........................................................................................................................................................................##...........#....#....................#............#.....##............................  
........................................................................................................................................................................................#.....#..................#..............#...##.............................  
.........................................................................................................................................................................................#.....#................#................#.##..............................  
..........................................................................................................................................................................................#.....#..............#..................##...............................  
...........................................................................................................................................................................................#.....#............#...................#................................  
............................................................................................................................................................................................#.....#..........#...................#.................................  
.............................................................................................................................................................................................#.....#.........#..................#..................................  
..............................................................................................................................................................................................#.....#.........#...........##...#...................................  
...............................................................................................................................................................................................##....#.......#...........#..#.#....................................  
................................................................................................................................................................................................###..#......#...........#....#.....................................  
................................................................................................................................................................................................#..#.#.....#.........###...........................................  
................................................................................................................................................................................................#...#.#.....#.......#..............................................  
................................................................................................................................................................................................#....#.###...#.....#...............................................  
...............................................................................................................................................................................................##.....#...#...#...#................................................  
..............................................................................................................................................................................................##.......#...#...#.#.................................................  
............................................................................................................................................................................................###.........#...#...#..................................................  
.........................................................................................................................................................................................................#...#.#.#.................................................  
..........................................................................................................................................................................................................#...#.#..................................................  
...........................................................................................................................................................................................................###.#...................................................