On Day 14 we need to build a simulator of falling sand grains :) You should read the full description at puzzle page. I will just mention that our input describes the layout of large cave, positions of solid rock. The sand is produced at certain location, one unit at a time and then begins to fall. If it falls on another sand grain it slides down in certain pattern and finally settles on solid rock.
The input is kind of weird:
498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9
Above are ranges of solid rock and the actual map generated by this input looks like this:
4 5 5
9 0 0
4 0 3
0 ......+...
1 ..........
2 ..........
3 ..........
4 ....#...##
5 ....#...#.
6 ..###...#.
7 ........#.
8 ........#.
9 #########.
We need to simulate falling sand and output how many units of sand come to rest before sand starts flowing into the abyss below.
The first task is to parse this input:
data = File.readlines("14.txt", chomp: true)
@min_x = Float::INFINITY
@max_x = -Float::INFINITY
@height = -Float::INFINITY
data.map! do |line|
line.
split(" -> ").
map do |position|
x, y = position.split(",").map(&:to_i)
@min_x = x if x < @min_x
@max_x = x if x > @max_x
@height = y if y > @height
[x, y]
end
end
width = @max_x - @min_x + 1
@height += 1
@map = []
@height.times { @map.push(Array.new(width, 0)) }
def get(x, y)
return 0 if y > @height - 1
@map[y][x - @min_x]
end
def set(x, y, value)
@map[y][x - @min_x] = value
end
data.each do |row|
(0...(row.size - 1)).each do |index|
from = row[index]
to = row[index + 1]
if from[0] == to[0]
Range.new(*([from[1], to[1]].sort)).each do |y|
set(from[0], y, 1)
end
elsif from[1] == to[1]
Range.new(*([from[0], to[0]].sort)).each do |x|
set(x, from[1], 1)
end
end
end
end
We start by parsing the ranges and also tracking the minimal x and y to figure out the size of the map. Our map will be represented by 2d array. Rocks are defined as ranges in the input file. This 503,43 -> 514,43 -> 514,42
means we need to fill positions:
Those ranges are given in different order, so we need to sort them.
When we have our map loaded and represented as a 2d array we can write method to simulate falling sand:
def drop_sand
x = 500
y = 1
while true
if get(x, y + 1) == 0
y += 1
elsif get(x - 1, y + 1) == 0
y += 1
x -= 1
elsif get(x + 1, y + 1) == 0
y += 1
x += 1
else
set(x, y, 2)
break
end
if y > @height - 1
return false
end
end
return true
end
times = 0
while drop_sand
times += 1
end
draw
puts times
We try to decrease sand grain y position. If it hits a rock or another sand grain we try to slide to the left and then to the right. If the sand can no longer move we can mark this position on the map as a settled sand grain. In case y position is higher than map height, it means that sand is falling into the abyss. In that case we return false.
Please notice there is also draw
method that I used to visualize how this map filled with sand looks like:
def draw
@map.each_with_index do |row, j|
line = row.map.with_index do |cell, i|
if i == (500 - @min_x) && j == 0
"+"
elsif cell == 0
"."
elsif cell == 1
"#"
elsif cell == 2
"o"
end
end
puts line.join
end
end
Here is how it looks:
...........................................+.................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
..........................................oo.................
.........................................oooo................
........................................oooooo...............
.......................................oooooooo..............
......................................oooooooooo.............
.....................................oooooooooooo............
....................................oooo######oooo...........
...................................oooooo....oooooo..........
..................................ooo######.######oo.........
.................................ooooo...........oooo........
................................oo######.######.######.......
...............................oooo..........................
..............................oooooo.........................
.............................oo#####o........................
............................oooo...ooo.......................
...........................o#####.#####......................
..........................ooo................................
.........................#####.#####.#####...................
.............................................................
......................#####.#####.#####.#####................
.............................................................
......................................................o......
.....................................................#o#.....
....................................................o#o#.....
...................................................oo#o#.....
..................................................ooo#o#.....
.................................................#####o######
.................................................#...ooo....#
................................................o#..ooooo...#
...............................................oo#.ooooooo..#
..............................................ooo#ooooooooo.#
.............................................oooo#oooooooooo#
............................................ooooo############
...........................................ooooooo...........
..........................................ooooooooo..........
.........................................ooooooooooo.....#...
........................................oooooo############...
.......................................oooooooo..............
......................................oooooooooo.............
.....................................oooooooooooo............
....................................ooooooooooooo#...........
...................................###############...........
..................................o..........................
.................................ooo.........................
................................o#o#o........................
...............................oo#o#oo.......................
..............................ooo#o#ooo......................
.............................#####o########..................
.............................#...ooo......#..................
.............................#..ooooo.....#..................
............................o#.ooooooo....#..................
...........................oo#ooooooooo...#..................
..........................ooo##############..................
.........................ooooo...............................
........................ooooooo..............................
.......................oo######o.............................
......................oooo....ooo............................
.....................o######.######..........................
....................ooo......................................
...................######.######.######......................
.............................................................
..................o..........................................
.................#oo.........................................
.................#ooo........................................
.................#oooo.......................................
................o#ooooo......................................
...............#o#oooooo.....................................
...............#o#ooooooo....................................
...............#o#oooooooo...................................
...............#o#ooooooooo..................................
..............o#o#o#oooooooo.................................
.............oo#o#o#ooooooooo................................
............ooo#####oooooooooo...............................
...........ooooo...oooooooooooo..............................
..........#oooooo.oooooooooooo#o.............................
..........#####################oo............................
..............................oooo...........................
.............................oooooo..........................
............................#ooooo#o.........................
............................#ooooo#oo........................
............................#ooooo#ooo.......................
.........................####ooooo#########..................
.........................#..ooooooo.......#..................
.........................#.ooooooooo......#..................
.........................#ooooooooooo.....#..................
.........................#oooooooooooo....#..................
........oo...............##################..................
.......oooo..................................................
......oooooo.................................................
.....oooooooo................................................
....#ooooooooo...............................................
..#.#oooooooooo..............................................
#.#.#ooo#ooooooo.............................................
#.#.#ooo#ooooooo#............................................
#.#.#ooo#ooo#ooo#............................................
#.#.#ooo#ooo#ooo#............................................
#.#.#ooo#o#o#o#o#............................................
#.#.#ooo#o#o#o#o#............................................
#.#.#o#o#o#o#o#o#............................................
#################............................................
.............................................................
................oo...........................................
..............#ooo#..........................................
..............#ooo#..........................................
..............#ooo#o.........................................
..........#####ooo###........................................
..........#...ooooo.#........................................
..........#..ooooooo#........................................
..........#.oooooooo#o.......................................
..........#ooooooooo#oo......................................
..........#ooooooooo#ooo.....................................
..........#ooooooooo#oooo....................................
..........#ooooooooo#ooooo...................................
..........###########oooooo..................................
....................oooooooo.................................
.............#.....ooooooooo#................................
.............################................................
............................oo...............................
...........................oooo..............................
..........................######.............................
................................o............................
...............................ooo...........................
.......................######.######.........................
.............................o...............................
............................ooo..............................
....................######.######.######.....................
..........................o..................................
.........................ooo.................................
.................######.######.######.######.................
.............................................................
.............................................................
....................#........................................
....................#........................................
....................#........................................
....................#........................................
....................#........................................
....................#........................................
....................#.#......................................
....................#.#o.....................................
....................#.#o#....................................
....................#.#o#....................................
....................#####....................................
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
.......................#.....................................
.......................#o#...................................
...................#...#o#o..................................
...................#...#o#oo.................................
...................#...#o#o#o................................
...................#...#o#o#o#...............................
...................#.#.#o#o#o#...............................
...................###########...............................
And here is the full code:
data = File.readlines("14.txt", chomp: true)
@min_x = Float::INFINITY
@max_x = -Float::INFINITY
@height = -Float::INFINITY
data.map! do |line|
line.
split(" -> ").
map do |position|
x, y = position.split(",").map(&:to_i)
@min_x = x if x < @min_x
@max_x = x if x > @max_x
@height = y if y > @height
[x, y]
end
end
width = @max_x - @min_x + 1
@height += 1
@map = []
@height.times { @map.push(Array.new(width, 0)) }
def get(x, y)
return 0 if y > @height - 1
@map[y][x - @min_x]
end
def set(x, y, value)
@map[y][x - @min_x] = value
end
def draw
@map.each_with_index do |row, j|
line = row.map.with_index do |cell, i|
if i == (500 - @min_x) && j == 0
"+"
elsif cell == 0
"."
elsif cell == 1
"#"
elsif cell == 2
"o"
end
end
puts line.join
end
end
data.each do |row|
(0...(row.size - 1)).each do |index|
from = row[index]
to = row[index + 1]
if from[0] == to[0]
Range.new(*([from[1], to[1]].sort)).each do |y|
set(from[0], y, 1)
end
elsif from[1] == to[1]
Range.new(*([from[0], to[0]].sort)).each do |x|
set(x, from[1], 1)
end
end
end
end
def drop_sand
x = 500
y = 1
while true
if get(x, y + 1) == 0
y += 1
elsif get(x - 1, y + 1) == 0
y += 1
x -= 1
elsif get(x + 1, y + 1) == 0
y += 1
x += 1
else
set(x, y, 2)
break
end
if y > @height - 1
return false
end
end
return true
end
times = 0
while drop_sand
times += 1
end
draw
puts times
In Part B we get some new information. There is an infinite floor just 2 units below the lowest rock position. We need to simulate falling sand again, but now it will pile up until it will reach the dropping point. We need to calculate how many grains of sand will settle until it will block the source.
One change we need to make is to implement a method to extend the map. Because sand pile will become much taller it will also become much wider and will go outside our initial map size.
def extend
@width += 2
@min_x -= 1
@max_x += 1
@map.each_with_index do |row, y|
if y <= @height
row.unshift(0)
row.push(0)
else
row.unshift(1)
row.push(1)
end
end
end
def get(x, y)
if x < @min_x || x > @max_x
extend
end
@map[y][x - @min_x]
end
def set(x, y, value)
if x < @min_x || x > @max_x
extend
end
@map[y][x - @min_x] = value
end
Extending the map is basically adding empty columns on both sides and changing map size. We call this method in case we try to read or set map position outside current map. The rest of the code is basically the same:
data = File.readlines("14.txt", chomp: true)
@min_x = Float::INFINITY
@max_x = -Float::INFINITY
@height = -Float::INFINITY
data.map! do |line|
line.
split(" -> ").
map do |position|
x, y = position.split(",").map(&:to_i)
@min_x = x if x < @min_x
@max_x = x if x > @max_x
@height = y if y > @height
[x, y]
end
end
@width = @max_x - @min_x + 1
@height += 1
@map = []
@height.times { @map.push(Array.new(@width, 0)) }
@map.push(Array.new(@width, 0))
@map.push(Array.new(@width, 1))
def extend
@width += 2
@min_x -= 1
@max_x += 1
@map.each_with_index do |row, y|
if y <= @height
row.unshift(0)
row.push(0)
else
row.unshift(1)
row.push(1)
end
end
end
def get(x, y)
if x < @min_x || x > @max_x
extend
end
@map[y][x - @min_x]
end
def set(x, y, value)
if x < @min_x || x > @max_x
extend
end
@map[y][x - @min_x] = value
end
def draw
@map.each_with_index do |row, j|
line = row.map.with_index do |cell, i|
if i == (500 - @min_x) && j == 0
"+"
elsif cell == 0
"."
elsif cell == 1
"#"
elsif cell == 2
"o"
end
end
puts line.join
end
end
data.each do |row|
(0...(row.size - 1)).each do |index|
from = row[index]
to = row[index + 1]
if from[0] == to[0]
Range.new(*([from[1], to[1]].sort)).each do |y|
set(from[0], y, 1)
end
elsif from[1] == to[1]
Range.new(*([from[0], to[0]].sort)).each do |x|
set(x, from[1], 1)
end
end
end
end
def drop_sand
x = 500
y = 0
while true
if y == @height
set(x, y, 2)
break
elsif get(x, y + 1) == 0
y += 1
elsif get(x - 1, y + 1) == 0
y += 1
x -= 1
elsif get(x + 1, y + 1) == 0
y += 1
x += 1
else
set(x, y, 2)
break
end
end
if get(500, 0) == 2
return false
else
return true
end
end
times = 0
while drop_sand
times += 1
end
puts times + 1
Here is how the map looks after source is blocked. But this page is actually too narrow to display it properly
............................................................................................................................................................................................+..................................................................................................................................................................
...........................................................................................................................................................................................ooo.................................................................................................................................................................
..........................................................................................................................................................................................ooooo................................................................................................................................................................
.........................................................................................................................................................................................ooooooo...............................................................................................................................................................
........................................................................................................................................................................................ooooooooo..............................................................................................................................................................
.......................................................................................................................................................................................ooooooooooo.............................................................................................................................................................
......................................................................................................................................................................................ooooooooooooo............................................................................................................................................................
.....................................................................................................................................................................................ooooooooooooooo...........................................................................................................................................................
....................................................................................................................................................................................ooooooooooooooooo..........................................................................................................................................................
...................................................................................................................................................................................ooooooooooooooooooo.........................................................................................................................................................
..................................................................................................................................................................................ooooooooooooooooooooo........................................................................................................................................................
.................................................................................................................................................................................ooooooooooooooooooooooo.......................................................................................................................................................
................................................................................................................................................................................ooooooooooooooooooooooooo......................................................................................................................................................
...............................................................................................................................................................................oooooooooo######ooooooooooo.....................................................................................................................................................
..............................................................................................................................................................................oooooooooooo....ooooooooooooo....................................................................................................................................................
.............................................................................................................................................................................ooooooooo######.######ooooooooo...................................................................................................................................................
............................................................................................................................................................................ooooooooooo...........ooooooooooo..................................................................................................................................................
...........................................................................................................................................................................oooooooo######.######.######ooooooo.................................................................................................................................................
..........................................................................................................................................................................oooooooooo..................ooooooooo................................................................................................................................................
.........................................................................................................................................................................oooooooooooo................ooooooooooo...............................................................................................................................................
........................................................................................................................................................................oooooooo#####o..............ooooooooooooo..............................................................................................................................................
.......................................................................................................................................................................oooooooooo...ooo............ooooooooooooooo.............................................................................................................................................
......................................................................................................................................................................ooooooo#####.#####..........ooooooooooooooooo............................................................................................................................................
.....................................................................................................................................................................ooooooooo...................ooooooooooooooooooo...........................................................................................................................................
....................................................................................................................................................................oooooo#####.#####.#####.....ooooooooooooooooooooo..........................................................................................................................................
...................................................................................................................................................................oooooooo....................ooooooooooooooooooooooo.........................................................................................................................................
..................................................................................................................................................................ooooo#####.#####.#####.#####ooooooooooooooooooooooooo........................................................................................................................................
.................................................................................................................................................................ooooooo.....................ooooooooooooooooooooooooooo.......................................................................................................................................
................................................................................................................................................................ooooooooo...................ooooooooooooooooooooooooooooo......................................................................................................................................
...............................................................................................................................................................ooooooooooo.................ooooooooooo#o#ooooooooooooooooo.....................................................................................................................................
..............................................................................................................................................................ooooooooooooo...............oooooooooooo#o#oooooooooooooooooo....................................................................................................................................
.............................................................................................................................................................ooooooooooooooo.............ooooooooooooo#o#ooooooooooooooooooo...................................................................................................................................
............................................................................................................................................................ooooooooooooooooo...........oooooooooooooo#o#oooooooooooooooooooo..................................................................................................................................
...........................................................................................................................................................ooooooooooooooooooo.........ooooooooooo#####o######oooooooooooooooo.................................................................................................................................
..........................................................................................................................................................ooooooooooooooooooooo.......oooooooooooo#...ooo....#ooooooooooooooooo................................................................................................................................
.........................................................................................................................................................ooooooooooooooooooooooo.....ooooooooooooo#..ooooo...#oooooooooooooooooo...............................................................................................................................
........................................................................................................................................................ooooooooooooooooooooooooo...oooooooooooooo#.ooooooo..#ooooooooooooooooooo..............................................................................................................................
.......................................................................................................................................................ooooooooooooooooooooooooooo.ooooooooooooooo#ooooooooo.#oooooooooooooooooooo.............................................................................................................................
......................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo#oooooooooo#ooooooooooooooooooooo............................................................................................................................
.....................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooo############oooooooooooooooooooooo...........................................................................................................................
....................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooo..........oooooooooooooooooooooooo..........................................................................................................................
...................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooo........oooooooooooooooooooooooooo.........................................................................................................................
..................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooo.....#oooooooooooooooooooooooooooo........................................................................................................................
.................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooo############ooooooooooooooooooooooooooooo.......................................................................................................................
................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo..........ooooooooooooooooooooooooooooooo......................................................................................................................
...............................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooo........ooooooooooooooooooooooooooooooooo.....................................................................................................................
..............................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo......ooooooooooooooooooooooooooooooooooo....................................................................................................................
.............................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooo#....ooooooooooooooooooooooooooooooooooooo...................................................................................................................
............................................................................................................................................oooooooooooooooooooooooooooooooooooooooo###############...ooooooooooooooooooooooooooooooooooooooo..................................................................................................................
...........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooo.................................................................................................................
..........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo..............ooooooooooooooooooooooooooooooooooooooooooo................................................................................................................
.........................................................................................................................................ooooooooooooooooooooooooooooooooooooooooo#o#oo............ooooooooooooooooooooooooooooooooooooooooooooo...............................................................................................................
........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooo#o#ooo..........ooooooooooooooooooooooooooooooooooooooooooooooo..............................................................................................................
.......................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooo#o#oooo........ooooooooooooooooooooooooooooooooooooooooooooooooo.............................................................................................................
......................................................................................................................................oooooooooooooooooooooooooooooooooooooooo#####o########....ooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................................................................
.....................................................................................................................................ooooooooooooooooooooooooooooooooooooooooo#...ooo......#...ooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................................................
....................................................................................................................................oooooooooooooooooooooooooooooooooooooooooo#..ooooo.....#..ooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................................................................
...................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooo#.ooooooo....#.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................................................................
..................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo#ooooooooo...#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................
.................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooo##############oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................................
................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooo............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................................................................................
...............................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooo..........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................................................................
..............................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo######o........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................................
.............................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooo....ooo......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................................
............................................................................................................................ooooooooooooooooooooooooooooooooooooooooooo######.######...oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................................................
...........................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooo..............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................................................................................
..........................................................................................................................oooooooooooooooooooooooooooooooooooooooooo######.######.######ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................
.........................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo..................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................................................................................
........................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................................................................
.......................................................................................................................ooooooooooooooooooooooooooooooooooooooooooo#oooo..............ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................................................................................
......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooo#ooooo............ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................................................
.....................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooo#oooooo..........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................................
....................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooo#ooooooo........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................................................
...................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooo#o#oooooooo......ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................................................
..................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooo#o#ooooooooo....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................
.................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooo#o#oooooooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................
................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................................................................
...............................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................................................
..............................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................
.............................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooo#####ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................
............................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooo...ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................................
...........................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo#oooooo.oooooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................................................................
..........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooo#####################ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................
.........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooo...................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................................................................
........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooo.................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................................................
.......................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............#ooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................................................................
......................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............#ooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................................
.....................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............#ooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................
....................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........####ooooo#########ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................................
...................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........#..ooooooo.......#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................................
..................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......#.ooooooooo......#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................
.................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......#ooooooooooo.....#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................
................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....#oooooooooooo....#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................................................
...............................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....##################oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................................
..............................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................
.............................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................
............................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................
...........................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#oooooooooooooooooooo..............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................................................
..........................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#ooooooooooooooooooooo............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................
.........................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#oooooooooooooooooo..........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................................................
........................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#ooooooo#ooooooooooo........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................................
.......................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#ooo#ooo#oooooooooooo......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................................................
......................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#ooo#ooo#ooooooooooooo....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................
.....................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#o#o#o#o#oooooooooooooo..oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................
....................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooo#o#o#o#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................
...................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#o#o#o#o#o#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................
..................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#################ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................
.................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................
................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................................
...............................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........#ooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................
..............................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........#ooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................
.............................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........#ooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................
............................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....#####ooo###ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................
...........................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...#...ooooo.#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................................
..........................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..#..ooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................
.........................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.#.oooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................................
........................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................
.......................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................................
......................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................
.....................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................
....................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo###########ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................
...................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................
..................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.#.....ooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................
.................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo################oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................
................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................
...............................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................
..............................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........######oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................
.............................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................
............................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................
...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....######o######ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................
..........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........ooo....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................
.........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......ooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................
........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo######o######o######oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................
.......................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....ooo....ooo....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................
......................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..ooooo..ooooo..oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................
.....................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo######o######o######o######ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................
....................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....ooo....ooo....ooo....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................
...................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..ooooo..ooooo..ooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................
..................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................
.................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................
................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................
...............................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................
..............................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................
.............................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................
............................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................
...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................
..........................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................
.........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............
........................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#####ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............
.......................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............
......................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............
.....................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........
....................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........
...................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........
..................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........
.................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......
................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooo#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......
...............................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooo#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....
..............................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooo#o#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....
.............................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#ooo#o#o#o#ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...
............................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo#o#o#o#o#o#oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..
...........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo###########ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.
..........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
###############################################################################################################################################################################################################################################################################################################################################################