Day 15 part 1

This commit is contained in:
Sven Weidauer 2024-12-15 12:19:27 +01:00
parent dbcf8c228f
commit 3f2ab90e6f
3 changed files with 134 additions and 0 deletions

View file

@ -16,6 +16,14 @@ operator fun <T> Grid<T>.set(coordinate: Grid.Coordinate, value: T) = set(coordi
operator fun <T> Grid<T>.get(coordinate: Grid.Coordinate) = get(coordinate.x, coordinate.y) operator fun <T> Grid<T>.get(coordinate: Grid.Coordinate) = get(coordinate.x, coordinate.y)
operator fun <T> Grid<T>.contains(coordinate: Grid.Coordinate) = inside(coordinate) operator fun <T> Grid<T>.contains(coordinate: Grid.Coordinate) = inside(coordinate)
fun <T> Grid<T>.coordinates() = sequence {
for (y in 0..<height) {
for (x in 0..<width) {
yield(Grid.Coordinate(x, y))
}
}
}
class ListGrid<T>(override val width: Int, override val height: Int, content: List<T>) : Grid<T> { class ListGrid<T>(override val width: Int, override val height: Int, content: List<T>) : Grid<T> {
init { init {
assert(width * height == content.count()) assert(width * height == content.count())

View file

@ -0,0 +1,55 @@
fun main() {
val iterator = readInput("day15.txt").iterator()
val input = Sequence { iterator }
val grid = CharGrid(input.takeWhile { it.isNotEmpty() }.toList())
var robot = grid.find('@')!!
val program = input.flatMap { line ->
line.map {
when (it) {
'^' -> Direction.North
'>' -> Direction.East
'v' -> Direction.South
'<' -> Direction.West
else -> error("Invalid direction $it")
}
}
}
grid[robot] = '.'
for (direction in program) {
val next = robot.step(direction)
if (grid.push(next, direction)) {
robot = next
}
}
val part1 = grid.coordinates()
.filter { grid[it] == 'O' }
.fold(0) { acc, coord ->
acc + coord.x + 100 * coord.y
}
println("Part 1: $part1")
}
fun CharGrid.push(position: Grid.Coordinate, direction: Direction): Boolean {
if (this[position] == '.') {
return true
}
var next = position
while (this[next] == 'O') {
next = next.step(direction)
}
if (this[next] == '#') {
return false
}
this[next] = 'O'
this[position] = '.'
return true
}

View file

@ -0,0 +1,71 @@
##################################################
#...#......O.........#O.....O#.....O.........O..##
#.O.O#...O#O...O#...OO.#...O......OO#O.O...OO....#
#...O..#O.....#.....O.....O..O.....OOO....O......#
#.O..O.#O.O......OO..O.O....O...O...#.#........O.#
#OO..#..O.O.....O...#.O....O.........#.OOO....OO.#
#.OO.O........#.O....OO........OO.O...#O...O#..OO#
##........O.O.O..#....#.......OOOO..O...O#..OO..O#
#......O##.#O.OO.#...O.#.O.O....O.....OOO...#OO..#
#.OOOO.OO..O.OOOO...OOO.......#.#...OO.OO....#.O##
#........OO.#O.O.#.O..O..O.....O.#..O..O...OOO..##
#...#.OO#.......#.O.OO..O....O.#.....O...O#.####.#
#.....OO..O.#.O..O.O.##.O..#OO.O...O.O..OO#...#..#
#O.OOOOO...OOO..#....O#.....O.....O.O.O...O...OO.#
#...O.....OO.O.......O..#O....O......O.O.O...OO..#
#.O...OO.O.O..O#........#..O##...#.O#..O.OO.#O.#.#
#O.O.....#...OO.O....O..O.OO......O..OO.OO..#.O.##
#..O......OO#.O..O.OO...O..O.O..O..........O..O..#
#O..#......OO.O...........O....O...O...O...O...O.#
##.##..O..O...O.#OO.O.O.O#OO..O.O.#OO......O.OO..#
#..OOO.O....OOO.O....O...O..O.O..O.O.O.#O...#O...#
#.....O..O.O...O.O..O....O.O...O...#OOOOO...O..O.#
#.OO..OO....O.OO....OO...O........O.O.O.OO...OOO.#
##.O.#.....O.O.O..O.O....O..O....O.O..#.O...O....#
#.#......O#O...#O..O....@O..O......O......O#.....#
#....O.#.O...#.........O..#.#....#O...OOO.OOOOO..#
#O.O..O#...OO............O##....O...O#..#O..O..#.#
#O.OOO.....OO#..O.O...OOO#.O.#.O.O..#.O.O.O......#
#....O......#O......#..#...O..O...O.##.OOO..O..O.#
#....O.O....O.O.OO........##...O.#..#...O....O...#
#......OO.O.....OO...OO.#.#.#O#.OO#OOO.OO.O....#.#
#O..OO....O.....O..#OO......O.#..O.......#.....#.#
#...OO..OO....O.#.O.O.#.O#.......O..#..O..O...OO##
#....O.O.O.......O.##.O...#.......O....O......O.O#
#....#.#.O.O..#...O..O.#......O.OO#......OOOO..#.#
#.OO###.OOO.O...O.O....O.....O.....OO....OOO...O.#
#..O...O.O##O.....#......O....OO....O......OO.O..#
#.O..O.O...O.O......O.OO.#.O....O.O...O...O.O..O.#
#..O.OO..OO#.........OO.....O#O..O.#.O.O........O#
#.O.O...O.O..#.O...O#.O........OO.#..O..O.O.O....#
#.......O...#.O.....O.O#.O....#.......#.....#....#
#.#..O....O..OO#...O.O..#..O.O....O..O#O...O.....#
#..#.#O#.....OO..OO.O.......OO.#...OO...O......O.#
#O#..O..O..O..#.#.O#...O.OOO...O#....O..#O#...O.##
#..OOO.O......O...O..O....O#OO.O..O....O....O....#
#O.O......#..O..#OO....###.O.....O#..O.........O.#
#O.O.O..#O....O..#.....O..O....OO....#O.....O....#
#....OO..O.OO.....O.....#.O.......#.O...........O#
#.....O..O...........O.O..#......O........OO.....#
##################################################
v<>v>^^vv<<v>v<v^>^vv<v>v>>^vv>>vv>^>^v^^v>>v>vv>^>><v^vv^<v>vv<>v^>>^>v>^<>vvvv<v^>>>v>^>v>^^<v>>v^><v>>vv^^^v<v><^>>v^^v^>^^<v^v<>^<<><<>>^><^v^<>^vv<v^><><>vv<>v^<^^<^<^<vv>vv^<<>><v>vv^^<^^^><>^^>^v>v^>^^v^^vv>^<<^v>v<vv<<^>^>>v>vv^v><>v^^><>^vv^<<<v^<><>^v<^v><^^vv^<>><<v<^^^^vv<v<>>>v<^^v<>^^>^>><v<v>v^<v>>>>><v>^<^><>v>^<v><v<^<^vv^<vv^vv>>vv><>^v<vvv^v^>v<v^^<<<^v><>vv^vv>v><vv>v>^<>vv<^v^v<>>>>><>v^>v<<>v<<^vv<vvvvv>>v>^<>>>>vv<<>^<^>><>v<^vv^>^>v^><>vvv<>>^<^<><>>vv>^^v^v>>>^><vv<><v^v<^^^<<^v>v>v<<<^v<>^<>^<v>v^v>><v>vv<>v>><v^v^><<^<>><<v^^>>^>^v^<>><^<<v<^vvv<><v^vvv<<><v<<vv^<^<^<>^<vvv^><^><<v>^v<><v<vv<>^^<^<>^^<><>^<^<<>>v<<><^vv^<<vv<^>^v<>v<v<^v>>>v^vv<^v>v<><^>><v>^>^<^>^><<><<vv><v^v^>^>^^>^>>>v^^>^^^<^>>>v<<>v>^<<^^>vv<><>><^>><v><^v<vv<v>^^^<^^^>^vvv<<><>>>>><<v>vvv>>>^^>^>><<<v>>>><<vv<>><^>>>v<^^v>^^v^v<<^<<><v<<<^^^^<v<<>><v^<^^v^v^<^^<vv<<<>v>^^<^<<>^><<v^><v^<>>^^v<<<<v>vv<><v^<>vv<>^>>>>vv><vv>^<<^vv^<^v<^v<^v^<vv<^>v^>><<<<<^>>>>^<v^>v>^^>vv>^v>v<<><vv>v<>
<^^<>vvvv<^v^v>>>v>^^^v^>>^v^v<>>^^><^v^v^<<^v><>^>>^^vv>^v>v<v<vv<v>v^>>v^>^>^>>vv><>>v^<<>>^^<>v<<v<v^v<^^<v^<<>^v<^vvvvvv<vv>vv^^v<v<>vv^v><^<>^v^v<v>><<v^^<^<v<v<v>^v^<>^<v^<>^<v>>v>v<>>vv>v><^<^^<^v^v>v>^v<v^<^^<^vv^^<>>vv^<>>^<^vvv<vv<vv><>>v^vvv<>v><>><>vv><<>v>><^<>><<>^<>v^<>^>>v>v>v<v^<<^vv^>v^^^^<vv<>vvv<v^>v^^v>>>^>^^^^^^<<<^^<vv^v<^<^>^v>><vv>^^>^^^><>v^<>v>v^>>>>v<^<v^v<<<^^>>^<<>v<<v<v<>v^><<^v><<v^><<v^>vvv^>vv<><v^><>^v^>v^>^^<v<>^vv>vv^^>>v<><<v>><vv>v<><<v>v><>^^>v^<<><v>vv>><^>vv^v><>v<^>v>v<^<^<<^<v^><v>>v<^<v>^v>v^v>>>>v><><>^>><>^<^<>v>><vv>v><>vvv<>>^v>v^><<<vv^^vv>v^><><<v><vvv><>>v^v<<><>v^v<v^^v>^v^^^vv>>^<<^>><v<>v><<^^^><^vv^>>v>^^vv^<^v^^^<<>v>^v<vv>^>v^<>v<^^<<vvv^>^v<>^v^^<vvv>v>><v^^^v>^>>^<^<<^><>^^v>v<><^>><^v<v>^^<><v<v<^^^>^><<^>^<><><^<>vvv<>^^v^>^^v<<v^><>v<<^<<<<<vv^vv><v<^^>^vv<<<^v^v<^<<^><^v<<<^<<v<<<^<<^vv>^vv>v^<>>v<^^<vv^>^>^^><^><v<<><>>>><<^v<<^<v>^<>^vv^^vv<<vv>v^v<vv><v^<vv>><^<v<^^vvv^v^vvvv^>>vv<^<v^^^v<>vv>v^^<<<^v^v>>v>>v<^>>>v^>><v
vv^<^v>v<v^<<>^<>v^<^>>^^v^<>v<<v<>^><vv<v^><^^<<>v^<v>^<^<<>^>^vv<>v<^^<>^^^<<<>><^><<v>>^^>v<^>^^v><>v<^^^>^^^v<>^^<<^>^^vv<vv>>><<<>^<><><^<>vv><>v<v>v^<>>>^>>^v><>v<^<v^^v>>><>^<>>v<^^^><v<<^v>>>vv<<>><>^>^v><<^<<>^^^<^<><^vv>^^v<^^<>v>><^^vv<<><^>>^v^<^v>v>v^>v<<^v^^v<^<<vvv><vv<v^^v<^><vvv>>>>^>v><^><vvv^vv<^v>>>v^v>^<><<><^^<<<v^<<<^vv^^^<>v<^vv><><v>>><^>>><<v^>>^><>^><>^^^>v<^>^>>v>>v>^<^^<v^<<<^v><v^<><>>v^^^^<<^>^v^<>^<<<^^><v^v^v^^<vv>^^v><v<<<<<v^<<^<v<<<>>^<<<^v^v>^vv><^>vv^^v<<^>><><^^^<^v<^v<>^^<v>>>>^^<^><^><>vv>><<v^^<>>vv^vvvv<^^<>^v^^v^>>v>v><<vv>>>^<<^<^^<^^v<<v^v><^v<vvvvv^>^><<>^<<>>>vv>^><>><^>^^^<<v<vv>v>vv>>^^^^v>^<><v^^^<<v<>>>v^vvv^^v>v<^vvv^>^>vv^>^<^<vv<v<^>>v^v>vv^<<^v>^vv>v^^^^<>vv<><<><<>>v^>>^v<<<^v^>^><><v<<^vv>><^<><<>>><<><>^v^<<^<<v^^>^vv^^>><<>v^>^v>>^v^<>^v>>^>v>>^>>>^^>>^^>v<<^v<v>><^<><><vv>v<<<<^v^><v<^v^^^v^><>>v^^vv^^<vv>vvv<v<v>^>v><<>^vv>v<v<<^<v^<v<^>>><<^<v<>><^>v<<^^v>^vv><>>v<<<<>^>v>>>^>^<^v>v^^<<>>^vv<v>><^>>^^^>><v>^><>v><v<>><v<>v<
<<^<v<v<^v>^<<>^^^<<>^<<^<v^><^>>^v^<v^v><<<^<^v^^<<v<^^>v^<>^<^v<><v^><^^><<<><>><v^>^>v>^^<vv>>><>v<^<><>>^^v><>^>v<>v^^vvvvvv<^v^v><<>v><<v<v^<^vvv^vv><>v^><>v^v<>v<^<>^><^vv^><v<^^v<<<>v>^v^>v<^^^>>vv<^v><vvvv^^^^^vv>><^^^^><><>^v<<><<<^>^v>><<<>>>^^>>^v>>^>>^><^>^^v>>v<vv<<^v>>><<^^>><>vvv^<v<^^v<^^>vv^^<v<v^^^><<^^v<^<v<v<^>^><>^v^<<>v<<v<vvvv^><>v^<v><>v^><^<^><>>>^^<><^v>^v>><<>vv<v^v>>^>><>^v<<><<>v<<<v^>v>><v>^^<<v<>v>>>>v><<^>vvv>>v^v>^v<>>>^<>><^>><>>>>^^>><<v^<<<^>^^^^^<v^<^v<^^v<>v<^>>^v^><<^vv>><>><><^>>^><>>^^>^>><v<^<>v>>^^^vv<>^<<<^^^><>vvv<^^v>v<>v^^><^<v<vvv^<v^^^v<>>vv<v<v^<vv>>^><^v^>v>>>><>^v^<>^v<>v<>v^<^^>^vvv<vv>^v^><><>^v^><>^>^><<v>^<<^^<>^v^v<v>v^><^^<<>v^>><>^v^v^v<><>^^<v<^^v^^^>^vv<vv>^<<><>^v>v^>^^vv<>v<v^v^>v>^<>v<^^><>v^v><<^<^vv<>^^>v>>><>v>^^>v<>^^^<<v^>>>^<^<vv^^>vv^<vv<v>^<><v<<<v<v^v<^^vv^<<>^<^v>v<^>v>>v>>v>^<<>^^^^^v<^^>^<^v^>^^><v<^^<<v^^><^^><<v^^^vv<vv^^<>v<^<v^^v<<<^<>vv<^>v^v^v><v^>^>v<>^<><v>>v^><>>vv^v<^v^<<<<v^v><^^^><>>><<>>^><>v>>>>>v
<<^^><>><^<^^^^<^<>v>v<^><><^>^>v<^^>vv<vv<>^<^^<<>^<^^^<<>><v>>^^>^>vvv<^v<v<^^^<>><^v^^v^<<<^<><<v^><>>^>>><><v^><^^>^v^>v^>v<v>vv<v>^^^^v^>^^>v>^<v<^v^><^><v<vvv><vv^<<^>vv>^^^>v<^><><vvv^^<^>vv<>>>^^<<>>^<><^^>vvv>^>>v^^<v^^vv^<^>>v<v^<<>v<v<^^<><v^^^v<^^>^<><vv^^v^^^v<v<v>v^<^v>^vvv^^<vv^<<v^^<<<^<^^<<><^<^v<>>^v<<>>v><vv>>^v><vvv>v<v>v>v<<vv^>v<<^<<<<^^>v>vv>v>v<<<<<v^^^^<><<v^v<v<<<>^>^>^^^^<<<v>vv><>><v>^>^<>><v^v<<<<^<^vvv^^<v<v^^^^<>v>><^^vv>^>><^<^<^<^<^^<^>>vvv<>^<v<v<>>^v<<^<>><v>v<vvv>^>^^v<^^^<^<^<v>^>vv^><<^vvv>><v>^>^vv^v<><>>^>vvv>^>>v^>vv^vv>v^<^>>^>^>vv<<>>v>v^<>v>v>^>^^v^^^^^^^<>><vv^^>>^<<>>>>vv>^<^^<><vv>v^^<>>vv<<^>v^v^v^^>v>^><vv<><<^<vv>vv^<v>>v>v^v><>v^<vvvv^>v>v>v^>^>>^<^<<<^>>vv>><>>v^><v<^vv^^v^v^^^<v<<><<>>^^<>v<<>>><^<^v<vvv>^<<^<>><<v^vv^v^v^<vv<<<^^><>^>>^^><<<v^<v^><v<vv>vvv><>^vv^>^<vv<><vv<^^vv<<^<v^>^^>v^>vv<>>^^^vv^<>>vv<v<^^v<>v>^^<^v<>^><v^^><^<^<<<v><v><^v^v^>v<^><>^>^vvv^v<<vv>^>>vv<v<<>^v<>^v<^>^>^>><>^><<^<>>>>>vv<v>^>v^^>^v^>^<v^v>vv^^^v>>>
^^>^<<<^>^>v<v>^vvv<^v<<v<>><>^<<^v><<v^<v<v>>vv^^v^v<^v<vv^v^>^<>v><^<<^<^^>>v>^v<vv>^vv>^^vv><<^v^v>vvvv^^<<>><v^<^^^<<<<>v^<<>^^^>v<vvv^^<v<>>^<<>>^v<^<>^v<<^^<v>^^^^<^<<<^^vv^<v<<vv^^^>^>^vv^>^>^>^^>^^v>^><v>>><^<>^vv^<v>>>v<v^v^v^<v>><v>^><>>^v>v^><>>v<<^^^v>vv^<>>>^^v>^^>>^><>v^>^^<<>^>vv>>v>vvv^<^<<<<^^><^^^>>^v^>^>>><><>^^>^v><^>><<^^v<<><>v^^v<<^^v>^<v><<^><<^<^^><^^^v^<<><v><<^><vv<><>v<^<<^v>>>><<><<v^v<>>^>vv^vv<^^^<^v^<>^v^<><^^v^v^^v<v<>^><>v^<v^<v<v<<>>^v<^<>v^^<^<>v>v^<^>>^>><><^^^<vv>v<^><<^^><<v><>>v><^<><>>^^v^^vv<v<^>^v<>vv^<^^>^v<^^v><^vvv<^v^<><v^vv>v^^^>v<>vvv>>v><^>v>><<<^<>v^^^^^vv><>^vv^vv<v<<v^<>><>v<<<>^<<<^<vv<^v>>^<vvv>^<>vv^><vv^vvvv^vvv^<>^<v>^>^v>v^<>>>>^<<^>>^v<v>>v>^^>v<><^v<>><^<^v>>^>>^vv^v>vvv<^v<><v^v^<^>^<vv<v^>><>>^v>><^<<v^v>v^^>v>><>v^v>^^vv<v<>^<vvv><v><vvv^v<>v^v^vv^<<>>>^><vv^^v<>^<v<^vvvv<^^^>><vvv^v<<^<<>>^>>^vv^>^v^>^v>^^vv>^>v^>^^v<^v<v^^v<v<><^>^^><>><<^^<<^v^^>>v>vv<^<><vvv><v^>v<^v^v^^v<v>^>^v><^<>><<^>><<^>>^<^v>>>v^v>^>^v<>>v<>^>v>
v<^<^<>vv<>>^v<^v><<^v>vv<^v<>><>>vv^vvv<v<v^>^<>v>v<^vv^><>><vv>v<^v<^v>^><^^v>^^><>v><<v><^<v><v^v<v<^v<^v><^^>^<<v^>^^<><<>^v<<<>vv<^>v>v^>^^^v^<<>^<<<v<>^<^><vv>^><v<v<^<>^<<^^>vvvv<>^^>^v>v^v>>^v^>vv>>^<>^^^>^<^^<<^<><<>v><v>v^<>^v>vvv^<>^<^v>^^<<v^v<<><vv<<v^^v><<>>>v^><><^^^>>v^v^^^^vvv<>vv>^><v^^v>^><><^<<><>vv><<><><v^>vv<>v<^^^<<^><><^v<^<^v>^^<vvv^<^v^v^^vv<v<^<^>^^v>>v<>><<vv^^<>>^>>v>^<^>vv^^>v><v^^<>vv><^^<^<^^<^<^^<>^^^^<^<<>^v<vv>^>v<>>v^^^^>><<^v<>><^<>>>vv<><^<v<^><^>v^v>^>>^v^><<v>>vv>><^^<<<^<>><v>><<v>vv>v<>v>>^><<v^<<>^<<^vv>^>^^>><^>^v^<v><^v<^^^v<v>v<<>>^<^<>>^>vv<>v>^vvv^<><vv^>vv^v><v^^^^<>^<<>v<<v<v><^^v^<<>>v>^<<vvv<v>^>vv^>vv^vv<<v<^v<>^^<^>>vv<^^<<^^vvvv^<v>>^^>^^^^<v>>^vv>>v<v<<v<v<^<^>vvv<v>v>^v^^<^><^^v^<vvv^^<<>v^vv<^<v^>>^v^<vvvv>^v><>^vvv<^vv>^^v<^vv^><^><>vv^^^<>><<vv><^^<>vvv<v><v>^<^vv><<vvv<^v<^^<^^^^v>^<^v>^^v<^<^^<^vv^^v><v^v>>^^>v<vv<>>^>v>v<v>vv^<v>>v<^^v^>v<vv^>vvv^^<<vvv<<vv<^^<^^vv>v><^^><><^v>v<<<<^vv^v^<v>vv>^v^>vv^<v>v><<v>>>><^<><^<^^v
^<<^^^>vv<^><vv^^^>>>^<^>vv^>^vv<<v^v>^>vv^v^v^>>>^>>^v^>^<<^^v<>vvv^^v^<^>>>^vvv<^^<<v>^><<v^<v>^><v<v<<^^v^<^>v>^>^v>v>><><v<>^v<^<^v<<<<^<^<v<^v>vv>v^><^>v<^^^v<vv^>><^^^<v^v<<^>vv^>>v<^v<^^^^<v>^v^v<>>v><>>>v<^^^<>>v><^<v>>^<v^<^<<vvv>>>v^>v>^>v>>v<<v<>v<^^<v><<>^vv^<v<v<v^^^<v^>v>^<^^<^>><^>vv^vv^^^v^vv>^>>>v^><>v>^v^<>^>^v^<<><v<>v^<vv><v^^<<^v>^>>><<^<<>><>>^<<^v<<<v^^v^vv<>>>vv<v^^v>>vvv<^>^>>^>^<><v^<>v<<<^^>>>vv<<v<><^<<v>^^v^><v>>v<>^>v^v<<<>>^^<^<^><<<><>vv^<<^v^<><v^<><^>^^v<<^<<><<>v>>><^<<^>><vv<<^<<^<vv<<v>>>vv^^<^v<^>^^^<^^<v<<v<<>^v>vv<^>^^^>><v>^^vv<>^><^^vv<>^v<^>>^<^<>^<>^>^^^>v^^^>^>^>^><>>>^v^v>>v>^<<v>^^>^^^vvv^v<v^><v>v>^><v^<v^v>v>v^^v^vv^>v^<v^<>>v<^<<>vv^>>^vvv>v>>>^v>><vvv<^vv>>^^<<vv^<>^<v<>>>v><>^>vvvv<<^^v<><^^^v<><<vv<>><<>^^^^v><^v>><<^><<<^^^<>vvv<^v^v<^^>><^v^<^><v^^<>^^<<>v^<>v^v>^<v>v>v^<<><^<v<><vv<^v^<<vv<<vv^><vv><>v^v^v<<v<>><><>>^<<>><>vvvv>vv<^v>^v<^^v^>>^><v>^<^vv^v><^v>^<<>v>vv^>>^v^^^>^v^<v<>^^vv^<><^<^^v<v<>^<<>><>^^^<^^v<^>>><^><>>^>vvv^
^^^^v^^>v>^^<><v^v<<>^v^>vv<vv>>^<^<><v>>>v>v^^v<^<^<v<^^>v<>^^<>^v^><^vv<>>vvv^vv><v<<><v^<vv^<<<><<>^<<>>vvv<<><^<<<v>^<>vv<>v>>vv^^><<v>v>>>v>^<>^v>v<>v<>vv^<<v>^v^>>><^vv>^^^>^^v^^>>^^>v><>vv>>^<<>><v^><^>^^^<^<vv<v>^<<><<v>>>^>>v^>>>>v>><><^v<<<>v^<^<v><v<>vv^<^^<^v>v>^v<><<<vv^><^<<vvvv>>>^v><>>vv<<>v<vv^>^vv<^<v^v<^^<>>>vvv^<^<><>v>><vv>^>v<vvvv<<>>v^<vv>><>v^<>v<>><<^>vv<v><^^^>^vv<<<><^>v>>><vv<v>>>^>v<v^^v^^^vv>v^<vv^v<^<<<<>>><><>^v^<v>^<^^^<^^<<><^<v^<<^^>^<v<>v^>v^^>v>>vv><><><>>>v^vv^vv^^<<<>>v>^>^vv<v>^>v^^^vv>vv><v<<^^^><v^<<>^^^^^v>>v<^^<<^v>v^>^><^<^><^<v^^<^>><<<<v><>^>>vv<<<<^<vv^v<>^^v^<>>><v^<>v>v<v^^<^^>^^^>v<>>v>>vvvv^<>v><<v><>>vv^><^^v>>v^><>v>v>v<><<vv>>>^>v^<^>^v>v^>v<^>^v^>vv<<><>>^^>v>vv^vv^>^<<v<vv>^<vv<^v<^<^^>^<><>v^^vvv^<<^<>>>^vv^<^^^^><^>>^^^^>^v^^<v^v^><vv<vv>v>^vv<^^<^<<^<v><<<>v<<v><v><>>v>^>v>^v>>^v>>v>vv^><>><vv^<vv>vv<^>v^<v>v<^v^<><vv<^^v^v^v^<^^<<><v^<><<>v^^>v<^>><<v<^^<^^^><>^><^v<><^<^<<v>^><^<>^^><<^^^v<^^vv>^>>v>><v><>^>^v^v>>^>^v^>v^><^
^^^^^v^>^><>>vvv>^<>>v<^^^v^v<^v<^v^^>v^><v>^v>>v>vv>^vv>^<v^<^<^vv<^^v><>><^<v<^<<<v<v>>>vv><v<v<<>v>^<^><><>v>^>>vv^v^<^<v^>>>^>>^>>^v<><v^><v^<^^><^^<><v<<^<v<><v>v^v>>vv<v^>><v<v<>>><>>v<>^<vv^<^vv<<v<>v>><^v^<>^<<<>v<>>v^>vvv><v^>>^>>^v<^<v<<>^v^><^<^^v<>v<^<<>^<<^^<>^v><<>v>>v^^>>^^v^^<^^>><>v<<vvv>^v>>>><v>>v<>v<>^vv^>><v<^>^>^<><<>>v^^<<>>>^<<>v^v<^<<v<^^^<<v^>>>>>^>v<^<<<v<^>^^vv<^><<><^v^>><<<^^vv^>>^^^<^^^^>^>v<>>v>>^>^<^v<^<v<v>><^^>v^>v>><>>v^^v^<<<v<<<<<>>^v>>vv^><>vvv>vv^^>vv<>v>>v^v>vv^>v^>^^<v<v^>>vv<^v^<v>^>v>>>v>^v<><>v^v<^<v^<<<<^^v><<<>^>^v<<><^vv^^v<^>><^<<vv<<^<<<<<v^^^<<^><vvv<^^<^vvvv^^v<v^^^<>>^^><>^v^<^<<<vv<>>>>v>v<<^^v^^<>^^><>v^^vv><<^<^v<<v<<v^<<>vv^>v<>>>v><<v<v>vv^<v^<v<v<<v^>>^><v^v<^>v^^^<>>><^v><^<^vv><>>>vv><<v<>>^^^<^v><>><v^v<><v^<v^^^v^v><^^v<<>^^<>v^^^<^^^><>>^><<>v<>^<^v<^v^>v<<><^>^v>><<v><v^<v^<<<vv>^>>^v<>vv^<<<v<^^v^><<<^v^>>^vv^v<><>v^v^>^^<<>v<<>^v<><v><>^vv<^>><^<v^<^^^^^<^>>vvv<v>><vv^<<v^<<><>>><<><v>v<<v>^<v<<^<^><><>^>^>>><v^v^v^<><>
vv>^v^<^^vvv<v<<<>>^^>^<>><v^>>v>>v><<v>^^<^<v>>^^<<<><v>>v^<^>^<^<^v^v<><<>>vv<^><>^<v^^>^>^<<><v^^>^<v<v<<<^>v>vv<>^>^><^<><^^<vv>^^>>>v^>^^><^<^v^<vv><<^<^>><<<^<^<<>vv<<^^vv>^>v^^>>><^^^^v^<^<v>><>v<^>v<>^^<<>v<^vv>>><v<v>>^>v>>v^>>>^<v^v><><vv<<>^<>>><^v<v^>v^>>v<^>^>><^<^^^^^v^^><>^>>^<^><>vv>v^vv>v>>>v^<><>v<><>v<^<v<<<>>><>v>><>^<<^<^^v<^>>>^>><^<^<^v<><>^>^><><>>^v<v<^<^<<^^><<<>>^<>>v^v<<>^v<v<^^><^^><v<>^^>^<<v>>v^v>^vvv^<><^^<vv^><v<v<^^v^>v>>^<<v^><^<><^v^<v^<>v<<^v<v<v>>v^v<^>v^>v>>vvv<v<<>^^>>v>>>^<<>^^v^v^>>^vvv^>v<vvvv<vv^>><<v<^>v^<v<<vvv<<vvv>>>>v>v<^>><v>^^>^^<v^<^<^^v>v><^<><^vv^v^v^<vvv>>>v>v>^>>^^^>^<v<v<<^><>^<<v<^>v^<^>>>v<^<vv^<>v>^v<>^<><><>><<<<<><>^v^<v<vvv<v^v^^^^>>^<^>^>>>^>vv^<>^v^v<<^v^vv><<>^>><<>v<v<^vvv>^>^v^<v>>^v^<^><^<<>vv>>v>v<^>^^^v<<^v^>v^v^v>v^>>^><^^><^^>v<>v<v<>^vv>^v<^>v<<<^>><v>v^<^<v<<<><vv^^v<>vv<<>vv>>^v<<^>^^^<v^^^^>v<>><^^v<^^><<^>vv^<>^><<^<^v<^<v<>^><<vv^^^^>^><vv<<^<vv><^>v<>v>^v>vv^>v<><v^v>^<>>v>^v<>>^^>>v^v<^^^>>v><^v^^v^^^><vv<
v>vv^^v<>v><^^<>><^<<v<<>vv^^<v^^v>>^^v^>>>>>vv>>><<v<v<<>^<^v^>^<^^>^v^><^^^>^v^<^^<v>^v^>^>>>>>vv<^>^>^^v><<><>v<<v^<v>vvv^vvvvv>><v>>vvv^>><<v^<>v>^>v^>>^>^>v<<>v^vv><>^^^>vv<^v>>^^^^vv><>v>^^^>><<v^^^^v><v^v^<^v<v<<v<v^<<^v<^<v^^^v<><v<v^>^<v^><^<>v>^<vvv^>><>>^<<<^^<<v^v^v>>>v<v^<<>^><v^^<v>>^^<>v^><^<>><>>^<>v<^vv>^^>v>>v><^>^vv>^^v<>><<>vv<v^>v>^<v>^^v^v>v>^<^^v^<<>^^<^<v^><<<>vvv^>^v<vv<^<<vv>^><<v<<v^>^>^<v<>>v^^^^<>^v^><>><<<<v>><<>^><^<<>>>>v<><^^<v<^vv<^v<<^^vv<>^v<^<^vv><^v><>^^^^^>^^^v^^^<^<>vvvv<>v<^>>>v<^v>>>vv>^^^<^v<<<^>v<>v^v>v^^v<^^>^^^v>>^<<<^<^><<>v><>v<v^^^<<<><v^<>v<vv^><^^v^>>v^^^><><<v^>^^><v>^vv>v<<v>>^<v>>><^^vv<v<>^^v<^<<^<v<<^^>>^>^vv^<v<^<>>>^v<vvvvvv><^<>><v<^^^>>><<<v><^><^<^>>^^>^^<^vv^^^<^^>>^v<<^^>><<^^^^><<<^>^v<v^v<<<<vvv<^>v^><<<>^<>>>><<^v<>^>v><<^><^>^>>>v^><>v>>^<<>v<<<v>v>v^><<v>>^<<<^v^v^<<^v>vv^<^<>>>>>v>>v^>v>>><<v^<^^<^<>^^>^>^v>^><vv<^v^<><>vv><<vv>v>^>^<>^vv^v^^>^>^^vvv<<><v<v>^<^v<>><>>vv<^<<><v<v^v>v<>^<<<>^><vv^<^<v^^^<^^<>^>v^>^><^v<
>^vv><><>v<vvv^<v<^^^v>^vv>^v^>^>v^v^v>^v<><v>^>>>v^><<^v>><v^<v^v^<v<<v>^>><v>><^v>>^^<v><v>>^v<^><<>v>^vv^^v^>>^>>v><<v><^>><^>v^<<^v><<<v>v<>>^<>v<>v^><^vvv^><>>>>vv<v<vv<v<v<v>vv<>^>v<v^vv^>>>v<v^^<^>^<<<><v<^>^>v>v^^vv>v<<<v<v^^><^vv^vv>><<^<vv<>>v^v<v<<<v>><<>^v^<>^v><^^><v<^>><><^>vvv>^v<>^<v><<<>>^><vv^><<>v<<>^^v>v^^vv^>v<>^<<^>v><><vv<><>>v<<<vv>v^<^^v^^^<v^<^v><<<^v^>v^v^^>^<<vvv>vvv^><vv>>^<v>><vvvv><vv><>v<v<<v^>>^>^v^<>v^><^<<<vv>><><^^<<>>^><v^v<vv^v^^><<>v^>^^<^^^><^<^>^^v>^^><^>^vvv^v^v^^><>^^><>v<v>>>^>^<^>>^^^v<v^<vv<v<^<<^^vv^^>>^><^<^^<v^>^^^^v<v<^>^v>>^<>vv>>v<><v<^vv^>>vv><^v<>v>^<<^<<vv<>^^>^>^v^<<v<v>>^^^^<>><>^<<^^v^^>>v><^<><v>>v<^^<v^>v^^v>^^^v^^>^>v><v><<<^^^v^<>^<>><^^<>v>>v>>v><v^>^^<^>^^<v<v<<<>^^<v<<^^><v><>><v<>>^vv><<>>v^v<v<v^v<v<^<^>^>^<v>>vv>vv><^>>^>^><<v><<vv^^>^>^<>v>><^>>><^^^<<>^^^>v<>v><<^>vvv<^v^^vv<<<>><<vv<v>>^>>^>v>^<<^>><>>^<<vvvv<>>^^>v^>^<^^>vv^v^<<vv><v^>>vv><vvvvv^>^v<<v^^<v><<vv><^^^<^<^^v<^<<v>^^^v<<<><vv^v<vvv>v<<<<><^^vv<v>v><vvv
>vvv>>^vv^>>><>>vvv<>v<>vvv>^>><<^><<<>>vv<>v>^>v><<vvvvv<<>><^>>>v^<>^<><v^>v<^>^^><>><^<^><<<>>v>^<^<>><^^<>>^^>vvv<<^^>v^^>^^^>v<v<<^v^^>vvvv>vvv>><><v><<^^<<^>v<>^>v<<<<vv>^>^^<vv^^<^<v<<v^<v<<<v<^^>v<>^^^^<^^>vv^^<<^<<^^>v<<^>v^vv^^^^^>v^>v>><><><v^<>><><>^^v>^>^<^<v><^^v<>^^>>^<^v^><>>>v><<<>vv<<^^>>><v<><>v^>^v><<v>^vv^<v^^^^^>^>vv^^<<v>^>>>^v>^^>>vv<^^<<>^^v<^^<v^>>vv>>^^<v<<v<^v^^v>v>^v>^<<<^v>><<<^>^<^><<^<v>^<v^v>>v^>^><<<^<<vvv<v^<vvvvv^v^<><<^^<^vv>^vvv^v^^>^v<<<^>vv<<<v>>^<v<v<>vv>^>v<v<<<vv^><<>vv<>^vv^<>^^>v^v<v<><v>v>v^^>><v^>><v>^^^<^^vv>>^<>vv^>>v^<^v<v<^<><><>^v<<<>vv<>>><>v^^v<^>v>>^v<^v>><^<>^>v^^<>^>v^^vv^>>vv>v<>><>v>>^v>^<<<>vvv>^<vv>vv^>vv<v>^<^<<<^^^^v<<^vv^<><v>^v^v<<v<><<^>>v>^<<v><<<^v><><v<v<^>^<v>v^>>^><vvv^<v<^^v>>>>>v<^^v>^<<^v><v^v^vv><<^vv^^<<^v^<<<^v^vvv^^<<<<><>^vv^>^^<vv^v<<<<v>^<v^>v^>^>v<<>^^>^^v<v<^^v^<<><><>^<v<^<>^<><><^vvv><v>v><^vv^^<vvv<v<v>>><>v><<^><^<<^>>v><>vv<<<><vv<v>^>^^>vv>^^vvv>>>v^v^vv<vv<v^^><<^^>v>^v>v<^^<>><^^><^v^>^>^<<^^vv^^
^<v<^>v^><^><>>vv>^^<^<^^vv^>>^>^vvv<^^>^<^<^^<>^>>v^>vv<>^^<^<>^^<<^^v<<>v<>>^^<v^^<>>>^^^<>>>^>v>^^>>^^^<<<^vv^vv<>v>>>v>^v>v<>>>v^<vv<>v>vv>><^vvv^>>v<v<><>><^>>v^<v^<<v<v<^v<<<^>v<vv<>>>^^<^<>>^^<v^>^v<><^v><v^><v^<><>^<<<^<^v<v>>vv^^v^<<><<<<v^>^v><>><^<^<>^>><>><<>><>^>^^>>><>^<>>>^v^vv><v>>vv>^><v<><vv>v<^^<v<^<<<<>vv<><^<<<<^^>^>>v>>><v^^><^^^^v<<vv>v^v>v^vv>vv<<vv>^>^>><v>>><<<^v^^^^<>^>^<vvv<^v^<vv<v<>^^v>^^^>vv^^^v>>>>v<^v<>v><<<vv^v^>v^^<<>^>>^>><^^<<vvv<^v^>v<<^^<vv>>^<v>^v^^v^>^^>>><^vvv<<^><>>v>>>vvvv<<>><v<>v^>v><v<<<v>vvvvv<<^<<v<<<<^>>v<^<v^>vvv^<v>v<>>v>>>^<<<><<>v^^vv>>>^vv<>^v<<<^v<><^<<<v<<>>^^<>>^^^>^^>vv>>>>>><vv^v<v><<>>v^><<<<<v>v>vvv^vvv><^><v><v>><^>^vv^<vvv><>>^<v<vv><><v^>^vv><v<><^>vv>><^<<<^v><<v<^^v^>><v^^^<>>^<^>>><v<>vvv>^<v^>>>>>^vvv>><>^^^vvv^v<v^vv^v><>v>>^^<><^v>v<v<^^<<v<<<><>^<<>^^v^<v<<^<>v><^<><<vv><^v^>v^<vv^><^<v^>^v^<v^><^v^^^<vvvv^<^v^><v^>><^>>vv<^<^>><<v<>v<<><<>^<>v<^^<^^<vv<<<><>>^<<<>>>vv<>>>v^^^<^^^^<<>>v^<>v>>>vvv^v<^^^>v>v<v^v>v<<>
><v>>^<^vv<^^>^>^^^v<vv><<^^>>^<>^v^>^<v^^vvv^<>vvv<vv^^>><v<>^><>^v>v>v>v^^<vv<v<<>><<<><>>v<^^^>v^<>^v<>>^>^^v^<v^^^v<><^v^v<v<<>v>vv<>v^v^><^v><<v>v^<>^v<<^<<<vv^<<<<^><v>><<vv^<v<^<>^>v^<^v>>>^>^>^v<v<v>>^^>^v<v^^v><<v>>v^^<>>v^<<<>^<<^<v>vv<v>v>><^v>>v^>>>^v^v>v>v<vv><^>vv^^<v>^<vv>v>><v>v<^>^<>>^^<v^vv>>>>^^^>v^<>v<v<vv<>^>^><<>^v^v<v<<vv^>v>v^vv><<<>v<<^>><vv^<<^^v>^^<>v<<^^v>vv>v^>>v<>^<v>v>><<<<^><^^v><>^^v^<<<><<^v<<>>^<v<^<vv>>>>^^<vv>vv<^>>>>v><^<^v^vv^v^vv^v^v<<<v^v^v^<<^^<vv><<^v^<^vv>vv^v>v^^vvv>vvvv^^<>^^^<>>^v><<<<<v>vv>^^<<<vv<<<^^^vv^<^><<<>^^v^^>vvv<<v^>><v>><^^<^>vv^<>vv>vv^<vv>>>^^><^^vv^<v<^<vv>vv^v^>^<v^<v<^^<<^vv<>><>vv^v^>^vvv^vv<<vv^>^v>>v^v<v<^<^vv^v><<<v<v<^<<v^<>^<^v^<>^<vv^^v<vv<^^<>>>><v<^><v^<>>v^v<<v><<v><>^^vv<^^^vv<v^^<^<^>v>v^>>v><>^<^>^^<^v^>^^vvv>><<<<vvv<^v<<v>><v>^vv^^<^vv^>>^^v<v<>>v<vvvv><>v^v>v^v>v^vvv>vv^<>v<^^v<<v<v<^><vv<v<^v^v<vv^><<^^^<^><<v<>^>>>v<^^><<<>v^<<<^v<<v^^vv<v>v<^^^<^><<>>^<v><v^^<<<v>^^<^>>^v<>><<<vv>^^v<v^^>v<<^^v>>^<>^v><>
v^><^>^>v^vvv^^vvv<^>v<<v^>>vv^^^v<v><v<<<v>><>v>vv^<>^v^<>>>^vv^vv>>vvv<<><vv<vv^^>v>>vvv^<v<v^^v<v>^v<>vv><^><>v>^^v<vv><^><>>vv^vvv^^>><><^<vvv<><v<>^<vv^^v<<<^^v<^v><><>v<<^>>v^>^>^^^^^v<><^>^<v>v><<<>^>v><>>^>^><v><^><<>>v^<><>><vvv^<>v>>^^vv^^<v>^vv<>>><^^v>v^<v>^>v<^>vvv^^<^>^^>v^^^<vv<^v<vv^^>>vv^<v^>v<><v^v>v<v<v>vv>^v><^^>v<vv<v>^^>^^<^<<vv^>>^^>v^v<><>^>><^>^^v^v>>v<^v<>^v^<v<<^>>v^>v>vvv><^>v>^<v^v^v<>>>vv^<>^vv>^^^<<^>><v<>^<<<>^v<<><>>^v^v^^v<^^v<>>>><^^^<v<^<^v>><^>>vv><><v<>^>^v^><<<><>><<<<^v<<^v<<^<vvv^vv^^<^>v<<^v^<^vv><>vv<^^<>^>v^<>^><vv<^^v<>>vv>^>^^^v^<^^vv<v>vv^<>v^<><v^>vvv^>^>^^><<<vv<>v^>>vv^>><vv>^v<^^v>v>^v><vv<<<v<<^^v<>>v^><^><^v<^<<^^v^^<><<^<v<^<<^^v^v^<v^v^^>^^<v^v<<v<^<^>^>v<^v^>v>v>><^v<<v^>><>><^>^v<v><><v<<^^>>>v<^^>v<^^>^v<<<><>^^vv^>^>v<v<<>>v>v<<vv^v><^<<>^>><>vvvv<^<v><>^^<vvv><><^<v^^vv><v>^vv>^<^^>vv^<v^^>v^>><>>^>^>v<<^<^>>vv^><^<v>>>v^^>>^vv^v<<>^^^^>v^vv><<v><vv^<><<<^v>^<^v>vv>^v>^>^>^>v^>vv>>vvv><^v^^^<v<v^^^v^<><v<<<<^^^>^<<>><><<<<vv<^
<>vv^v>v>^>v<v<v<v^^<v<<>>^<<><<v^v^>^<<>><^<>v^>>^vv>^>>><>>^^^><v<<^vv<^^<vv>>v<^>^vv^<<^v<<^^vvv<<^^^>^^><>><>^^v<v^^v<v<v^^^<v><<vv<^>v<^v>^^<vv^v<^>><^>v>v<v^^^<<^<<v^>vv>v<^vv^^v<^^<<<><v>v^<v>^^>^>>>vv>^v^^<<vv<v^vv><<^vv>^^v<^v<^^<^<>v>>>^v<<^>>vv>^<>vv<>v><v<>vv><<<><><<v>v<^v<>v>v<v^v<>v<^^>>><v^>v<>^^v>><v>^v<v>v>>^^v>v>v<^<^vv^v<<vv^^<v><<>vv^>^^v<<><><^><v^^>v^^^vv^v^><^^v>vv^><v^<v^v^^^<^<>v<<^v><<>^>^>^<<<<<vv^^^^^v<><><>><^>v>v<v^<>><^v><^^>vvv<vv>^><v<>v<>><>vvv<^>^<v>>><<^<>><^v<^<^<^<^<v>^>>v^>v^^>v>^v>>^>>^><vv<><^^>v>v^><>>><><^v>v^>v><^^<^vv>^^<^^<v^<<^<vv<><<<^<>vvv><<>><^v^^<>^v>v<^<>>vv>^^vvv><^^^<^<>^^><<<^>vv>v^v<^^^v><v><v<<<<vv^^^^<>^<>>><^v^<v>v^>>v>>v<vv^<^v><>v^>v<v^^>v^vv^<v^vvvv<v<vv<>><<v^^>>^<<v^<<<>^>v^>v<<>^>^^^vvvvv<<>^<>>^>^>><<<v^>^^<>^vv^^^^<v<v^><>^^<>v<v^><vv^^<^vv<>v<^<^<vv>>>vv^v>v<<^>^v>v^<v><v^^v^vv<^<><>^>v>vv>>^^v^><<><>>v^v>^><>v<>><<^<>^>vv>^^><>>>>^v^v^<<><vv<^>>>vvv>vv<<<<<<<<<vvv<v<<>^v<<^<<v>^v^v^><>v>>>>vv^v<v>^>^^^<^^v>v<<v<<<v<
vv>>^v^^<<><>^>v^v<^>>>>>vv>>^<^v^^^><v>>v<v<^>v>v>^<<<^^><>^<vv<<<<>^>><v<^>v^<>vvv>>^v<^v<<v<^>>^^<<v<^vv>^>^><v>v<^^<v>>^^<<<><<>vv^>>^v<<<vv<<^^<^^^<<>><^><>vvv^>>^^>vv^>v><^vv^v<<>v<vv<vv^v^v>vv<<>vv<^v<<vv>^><>^><<v>>v^vv^^><<>v<<^>><>>^v<>^^>>v>v<<<<^v>><^v>^>vv<^<^^v^>>>vv^v^^<>>v^vv<^<<<^^>^v<v^^vv><v<>^^>v^^>v<v^^<^v<^>vv<>^^>vv<v<<v<>><^>vvv><^>><^^>v>><<v^>^v^<v<>v^<v<><>v<^<vvv^>v>>vvvv>^v>^v^v>v^v<<>v^vv>v^^v^<>v>^<>v>^<^<<v><^^<>>><^v>><^^>vv^>>>v^>^<^<^v><^<vvvvv>v^>v^>>><vv^<^<^^<>v<><>^<vv>^v>v<^^vv<^v^^><<vv>^<v<<<v^v<^v><>^v>v^v<<>^<^^>vv>v><^<v<>^>v^>><<<^<>^^^><v^<v^^^v<v>vv>v<^^^>^<>^^^v<^^>^<^^v>>>v>><>vvvv<<^<<>^^^v^>^^^><vv<><^^>><v>><^>^v>v<>^>>>>>vvvv<v^^^v^<<v>^^v^><vv^>vv^^>>>v>vv>vv>v>>>>>^^<<><>>v^<<<>^<^><^vv^>>vv^<v><vv>^v^vv<^^v>^><>v<v<<v<<v^^>^^><>v^^<<<v^v^><v<^vv>^vvv<>v<>>^<>><><><^>><v><>^>>^^v<>^<^^v<<<>>>>v<<^>>vv<<>^>^<^><<v>>^^<<>^<<>><v^<>vv^<<vv>>>>^<>><v><<>><<v^^v>>v<vv^vvv><>^^<<^>v^<v<v<<>>vv^v^><v^><<^v^>><>>v<>v><^^^^<<>^>>>>^<^v^v^>
^<>vv<v>>><^<>><vvvv^v^>^<^<vv^^^<^><<<v<v><><<^>><^>>^v^<vv<v^v<<^vvv^<<><^^^<v<^v^>^^>><^v>^<>^><vv<>>vvv<^>v^<>v^v^^<>vvv>>^v<<<^>v>v<^<>>>><^^><vv>v><<^><v^<vvvvv<^^^^>v<v<v^v<<v^v^^<v>^>><<v<^^^vv<v>>^^<^>>vv^v>^v<<>vv>^>v>v^^<^><>v^^vv^>>vv^<>v<^<vv><<^^<>v^<<v>><v^><v>>>>^<v^v^>^><^^^^>>>v<vv>>>>^^v>v<<><v<<<^<^^^v^vv^^^^><<v<v^v<>vvv>>^^v>^v<>^vv<vv>^<<^>^<<<>^><v>^^><<<^^v<v^><v<^<>v>><v^><>>>>>^>><<vvv^>>v<>>>^<<><<<<>>v>>^^<v>^>>v>v^^^><>>^vv<>>^<v>^<^<vv<v>>>^><>^v^<vv<^v>^<<vv>^><^^><^><v^^>^^v>vv<>vv<>^^<<^>^><vvv><<vv<>>^vv^^v^<<^>v^^>><^>><<>>^v^>v>v^>^^<v<v<>v<>v^<v>v^v>^^>^>^v<v<v>^^^<<vv<^<<vv^>^<^<vv<<<^v<v^^v<<^v^v><^v^<<<<^>>v<<<v<^^^>^^v^>v^>v>>>v><v<<^>v><><<<^^<^><>>v<^<vv^>^^>^>^^vv>><<<<<vvvv^^v^vv>>v<<>>v<v^>^<v^^v>v<v<>^v^^<^^v^vv^<><vv^><<>>>><v^^<vv^v>v>v<^^v^><^v^<>v>^v<<<>>v^>vv><^>v^v<<^<^v>>^>vv><vvv^v>>v<vvvv>>v^^><>v^>^v><<><<><>>>^>>^v>v><v<^><>^v<>^vv>>>^v<>>>v<<>^<^>><^^<>^v><^vv<^v<^>^v^v>>^^v^v^v><<<vvvvvv>>^^^<v^^vv>>^>^v>>>v><^^^^v^>v<^<^>>>>