-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadv20.go
168 lines (147 loc) · 17.3 KB
/
adv20.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package main
import (
"fmt"
)
type Cursor struct {
Y, X int
}
type Maze struct {
Center Cursor
Position Cursor
Columns [][]rune
}
func newRow(maze *Maze) [][]rune {
columns := len(maze.Columns[0])
row := make([][]rune, 2)
row[0] = make([]rune, columns)
row[1] = make([]rune, columns)
row[0][maze.Position.X] = '.'
for i := range row[0] {
row[0][i] = '#'
row[1][i] = '#'
}
return row
}
func newMaze() *Maze {
maze := new(Maze)
maze.Position.X = 1
maze.Position.Y = 1
maze.Center.X = 1
maze.Center.Y = 1
maze.Columns = [][]rune{[]rune{'#', '#', '#'},
[]rune{'#', 'X', '#'},
[]rune{'#', '#', '#'}}
return maze
}
func ReadMaze(reg string) *Maze {
maze := newMaze()
var stack []Cursor
for position := 0; position < len(reg); position++ {
symbol := reg[position]
fmt.Println(maze.Position, string(symbol))
switch symbol {
case 'N':
maze.Columns[maze.Position.Y-1][maze.Position.X] = '-'
if maze.Position.Y == 1 {
maze.Columns = append(newRow(maze), maze.Columns...)
maze.Center.Y += 2
} else {
maze.Position.Y -= 2
}
maze.Columns[maze.Position.Y][maze.Position.X] = '.'
case 'E':
row := maze.Columns[maze.Position.Y]
if maze.Position.X+2 == len(row) {
for i := 0; i < len(maze.Columns); i++ {
symbol := '#'
maze.Columns[i] = append(maze.Columns[i], symbol, symbol)
}
}
maze.Position.X++
maze.Columns[maze.Position.Y][maze.Position.X] = '|'
maze.Position.X++
maze.Columns[maze.Position.Y][maze.Position.X] = '.'
case 'S':
maze.Columns[maze.Position.Y+1][maze.Position.X] = '-'
if maze.Position.Y+2 == len(maze.Columns) {
maze.Columns = append(maze.Columns, newRow(maze)...)
}
maze.Position.Y += 2
maze.Columns[maze.Position.Y][maze.Position.X] = '.'
case 'W':
maze.Columns[maze.Position.Y][maze.Position.X-1] = '|'
if maze.Position.X == 1 {
for i := 0; i < len(maze.Columns); i++ {
symbol := []rune{'#', '#'}
maze.Columns[i] = append(symbol, maze.Columns[i]...)
}
maze.Center.X += 2
} else {
maze.Position.X -= 2
}
maze.Columns[maze.Position.Y][maze.Position.X] = '.'
case '(':
var p Cursor
p.X = maze.Position.X - maze.Center.X
p.Y = maze.Position.Y - maze.Center.Y
stack = append(stack, p)
fmt.Println(stack)
case '|':
maze.Position = stack[len(stack)-1]
maze.Position.X += maze.Center.X
maze.Position.Y += maze.Center.Y
fmt.Println(maze.Position)
case ')':
stack = stack[:len(stack)-1]
}
}
return maze
}
func (maze *Maze) Print() {
for i := 0; i < len(maze.Columns); i++ {
for j := 0; j < len(maze.Columns[i]); j++ {
symbol := maze.Columns[i][j]
if symbol == 0 {
symbol = ' '
}
fmt.Printf("%s ", string(symbol))
}
fmt.Println()
}
}
var Directions = []Cursor{
{Y: -1, X: 0},
{Y: 0, X: 1},
{Y: 1, X: 0},
{Y: 0, X: -1},
}
func (maze *Maze) PrintShortestPath() {
doorsPassed := -1
for positions := []Cursor{maze.Center}; len(positions) > 0; {
var newPositions []Cursor
for i := range positions {
for j := range Directions {
pos := positions[i]
move := Directions[j]
pos.X += move.X
pos.Y += move.Y
if maze.Columns[pos.Y][pos.X] != '#' {
maze.Columns[pos.Y][pos.X] = '#'
pos.X += move.X
pos.Y += move.Y
newPositions = append(newPositions, pos)
}
}
}
positions = newPositions
doorsPassed++
}
fmt.Println("\nTotal doors passed:", doorsPassed)
}
func main() {
maze := ReadMaze(Reg)
fmt.Println(Reg)
maze.Print()
maze.PrintShortestPath()
}
const Reg = "^NNEEESSSESWWWWSSWSWWSWSWWWWNNNWWWNWWSWWSEEE(N|SESSENNN(W|ESSSEESESEESSWSWWNN(E(S|E)|WWWWWSESSWSSSWSSSWWNNNWSSSSSSENNESSSWSWSWNWWNWSSSSSSSENESEEEESEESWWSWSSESWWNNWWSSSWWSWNNWNNENNESE(NN(WWNWWSESWS(E|WSSE(SSSWSWNNENWWNWWNNENNWWNEENESSSE(SWS(ESNW|)W|NE(S|NWNNNNWNNWWSSWWWSESES(WSWNWWWNWSSSSESWSWSESSWWSSESWWWSESWWNWSSSEEN(ESSWSSESENESEENESENNESSENNESSENNNWNNNWWSWNNWSSSES(WWS(E|W(WW(NEENENNWWS(E|SWNNNEENE(S|ENNENENNNESE(SWSEESEE(NWNWESES|)SWWWSS(ENESESWSEESEESWWSESWS(EENESENNESSEENNW(NEESEEESS(WNWWSE|ENESEEENWNNWS(WWNENWNWWWNENNWNWN(N(EEEESWS(WNWESE|)SSEES(EESEEENESSSESSES(ENNWNENWWNENWNENWWNNENNWNWWNENESENNEEENWNWNNWWNEENWNEENESSWSEENESSSEEENESESWSSENEENENEESSW(SSWN(N|WWSSWNWWNNNWSSWNWW(SSWSWW(NEWS|)S(SSESWS(W|EENNNWNEEEN(N(N|EESESE(SENESESWSWSWNWWNN(ESEEWWNW|)NW(SWSESWW(NN|SSWWSSENEEEESWWSSSWW(NEN(N|WW)|SSSEENN(WSNE|)ENNNESSEENEESESEEENENWNWSSWNWNNNWSSWWW(S|NNESENN(ENEEN(EESESWW(N|SW(NWES|)S(S|EENEEENENENEEENWNEENNWNWWWNEEEEEESSSENNNENEESESWW(N|SW(SEENESSSENENNEEEESEESWSWWN(NWWSSWSESWSESEESESWSESWSEESS(WNWWS(WWWWWWNEEEEENWWNENENN(ESSS(W|S)|WSWNN(NNNWSWWNNE(S|NWWSWNWW(NNNWESSS|)SSSEESSWWWWSSWSSSESS(WNWSWWWWNEEENENWNWSSWW(NENWNWNEESENNESSE(NENWN(EEN(E(SEEWWN|)NN|WW)|W)|S)|WSSWWWN(EE|WSWWWNN(E(SENSWN|)N|WWSWSEEN(SWWNENSWSEEN|))))|ENNEENNWW(WSEEWWNE|)NEEN(EESWSSENENNEE(NWWWN(NNWWNSEESS|)EEE|SS(W(SWS(EENSWW|)WSW(WWSEEE|N)|N)|E))|WW)))|E))|E)|ENESEEENWWNWWNWNEEENNNENEEESESSSENENNNW(NNNESENENWWNWNNEEESS(WNWESE|)EEENWWNNNENNNWNNWNENWWWSWNWNEEENWWWNNESENNESSEEENNESENNNWSWNNEENWWNEENE(NWNENWWSWNWWSSWWNENWNNENNWNWNWNEESESESENNNEEENNE(NNNNWWWNNNENWWNNNESSENNNESSE(SSSSW(NNN|S(WNSE|)E)|NNNNNNWSWWNWNNESE(NNNENE(NWWWNEENE(S|NNWNENWWWNENNEE(SSWNSENN|)NNWSWNWNNWSSSESSWNWSSSE(SSSWNNWSSWSESSWNWSSEESSSSWNWSSSWWSWNWSWNWNENWNWSWNNNEEENENENEE(SSW(SW(N|SW(W(WW|SEEEE(SSWNWWSE(WNEESEWNWWSE|)|N(W|EN(ESNW|)W)))|N))|N)|NENWWWNEEENE(NWWWS(WWSWSWWWNNWNNNESEENEENWWNNEES(W|EENNW(S|NEESSENEEE(SSWSSWS(ESNW|)WNWSWW(NNE(S|ENESENNE(WSSWNWESENNE|))|WS(E|W(N|WW(W|SE(SWEN|)E))))|NWWWNNWNEEESWSEEEENNWNNENNWSWSS(SSEWNN|)WNNNNNES(S|ENNEENEE(SWSWS(WNSE|)EE(N|SWWSEESSWNWS(SESSSS(ENNNN|WNNN)|W))|NNNNWWWNWWWN(EEEESENES(NWSWNWESENES|)|WWSSE(EEESESES(ENNWESSW|)WSWWSWNWWWWSWWSSWWWNEENNWNENESE(SWEN|)NNWWWWWSWSSSWWSESESE(NN(W|NE(E|NWNENE))|EESENEESESS(SWWSS(EE(NWES|)E|SSWNNWSSWSWSWS(WWSESSWNWSWNWSWSEEESESEE(NWNWESES|)SWWSWWNN(ESNW|)WN(E|WWWNWWWSSSSWSESEESSWSESENENWNEESEEEESEE(NWNNWWN(WSW(SEEEWWWN|)NWSWNNWWS(ESNW|)WNNEN(WNEWSE|)ESEE(NW|SEN)|EENESENNEESE(EN(N|W|EE)|SWW(N|S(WWSNEE|)E)))|SSSENESSSE(EESSENNESESENESSSEE(NNNEENN(ESENSWNW|)WSWW(SSS|NNN(WSSWS(WNSE|)E|E(S(E|S)|NNNENE(N(WW(NENWNEEEN(NNWSSNNESS|)E|S)|E)|S))))|SSWSESWSWWWNWWNWNWSSWNWNWNEE(NWNNEN(ESS(W|SSENNESESWSEENE(NWN(WNSE|)E|E(SWS(ESWENW|)WW|E)))|WWNWN(E|WNNWN(WNWWSSE(N|SSEN(N|ESSESESSS(ENNSSW|)SSWWSSENESE(N|ESWSWNWWWSWSWSWSEESEEESENEESEESSEEE(ESES(E|WSWWWNN(EESWENWW|)WSWSSE(N|EEESSSWSWWNWSSWSSSEEENEESENEESWS(EENNNWNWSWWN(EN(W|E(NNNW(NENSWS|)SS|EESESE(NN(N(EESWENWW|)N|W)|SWSSSE(SWEN|)NN)))|WSWW(NE|SWN))|WS(E|WNW(WSSSEE(NWNSES|)SWSWNWSWSWSWSWWNWSWWSEEESENESESSESEENWNENENNWWN(WSS(WNSE|)S(ENEWSW|)S|EEE(ESSESENN(E(SSE(SWSWWWN(EE|W(N(NN|E)|SW(N|SESSSE(NNNEEES(ENNENSWSSW|)WW|SS(WNWWWWSESSEEES(E(S|NNWWWNE(WSEEESNWWWNE|))|WWWWSWWNENN(ESNW|)(WSWSWS(SE(N|EESWS(WNSE|)E)|WWNN(E(E|S)|NN))|NNNWNNN(ESSENEESS(ENNSSW|)W(N|W)|NNWWWSWSWSWW(NNNEE(SWSNEN|)EN(WWNNNNWWNENENWWSWWNWWWWSSWWSEESESSWSSSWWNENWWWNNEES(W|EN(E|NWWWNWSSSSWWNWSSW(SESWSWSESSSEENWNNNENNES(EEE(NWN(E|W(WW|S))|EEEENE(S|EEENWWNNNW(SSSWNSENNN|)NEEE(NNWSWWNW(NEESNWWS|)S|ESSE(NN|SW(SSS|WWNNES)))))|SSS(WNSE|)EES(E(N|E)|SWS(E|W(NNEWSS|)WS(W(S(E|S)|WN(WWWNENWN(EESSNNWW|)W(S|N)|E))|E))))|NWNENNWSWWWWWNWNNWWWWNWNWSS(ESSENESSSSENNNNESSES(W|ESES(S|ENN(EESWENWW|)W))|WWWS(WSWS(E|WNNENENEEENNNESENEENESSWWSESENEEEENNNWWW(NNWWNNEENNNNWWWSWSSE(NEE(NW|SW)|SWWNWW(NEENWNEENNNNESESS(WNSE|)ENENNNENWNWSW(NNEEESEENNW(S|NNWNENNNNWNNNEENESESSESWWSSESWSW(SES(SSSSENNEENENEEESWWSESSSSESSEESESESEESENNEESSW(N|SWSSENEESSEEESSEEESWS(WNWWWNWSWS(EE(EE|S)|WNWWWS(EE|SSWNWNENWNNWSSSSSES(WWNNNWWWSWWNWWNW(SSEESWSEENEESWS(ESSEE(NWNENNW(NEWS|)S|S)|WWWWS(EE|WNNN(ESNW|)W(WW|SS)))|NENWWWWNN(NENNEENNWSWNNW(NNESEES(W|EEEESEEN(NNWWNNNN(ESSSNNNW|)(N|WSW(SESWWNWSS(ESENESEES(NWWNWSNESEES|)|WNW(NNESNWSS|)W)|N))|EESWSSWNWWWWSSW(NNNEEWWSSS|)SESWS(WWN(WS|NNESS)|ESSENNNESSEESES(ENNWNWNW(NEEEESW(W|SEENEENE(NWWW(SEWN|)N(NW(N|SSW(WWWWSWNNEE(WWSSENSWNNEE|)|NN))|EE)|SSWSS(WNNSSE|)ENESENN(E(N|S(EEESNWWW|)S)|W)))|S)|WWW(NEWS|)(WW|S)))))|SSSS|W)|WW))|S)))|EESESWWSW(NNEWSS|)(SE(SWEN|)EEN(ES(S|ENNE(NNNWWNWW(NEEE(SEEESSW(N|S(S|E))|NNWSWNWWNNWNNENNEESENESSWWSESS(WNW(S|N(NN|W))|ENEN(NEN(EES(ENSW|)(S|W)|WNNNNWWSESWWWWNNWNWSSESSWWN(E|NWSSWNWS(WWWNWNWSW(SESENSWNWN|)WNWNNNESSE(NEEENWWNW(S|WNENEES(SEEESSW(N|SES(EENNENNWW(NNNESSE(EESS(W(SSWENN|)N|ENESSEN(ES(SSWNSENN|)ENE(N|SENESS)|N))|NNNNWSWNNNNESSEENNNEEE(SWS(SW(SWSNEN|)NN|E)|NWNENNE(SE(SWSEWNEN|)N|NWNWSSSWWNENWNWSSWSSE(N|S(ENESNWSW|)S(SS|WNWWS(E|WWNWWNWSWWNENEEESENNWNEENEES(WSSS(ENNSSW|)W(S|NN)|ENNNN(ENE(N|SSES(WWNSEE|)S)|WSSWNNWSWWNENNE(SEWN|)NWWSSWWNWSWWWWNNWSSSESSSSEEEENESS(WWSWWSWNWSSEEE(N|SSEEEEE(NWWWWEEEES|)EEESWSESWWSS(WWNENWNN(EESWENWW|)WSWNWWWSWSES(EESWSE(ENNN(ESS|WNWS)|SSWSS(WNNNEWSSSE|)SS)|WWWWSWSWNNEN(W|NESEENWNENN(WSW(SWNWESEN|)NNENWNW(S|NWNWWWSWWWNEENENEEES(WW|ESEENNE(NWWNNWWWNWNENEEENNEEEESWWWS(EEESENNENWNENEEENES(SSWNWWSESWSEE(S(WWW(SWWEEN|)N|S)|NESE(EE|N))|ENNNWSWWWWNNEENWWWWWWSWNNNWNNEENENWNNWSSSWWNNE(S|NNWWWNNNESEEEENWWWNNWNWWSWSWWNNWNENESS(S|ENEENESENNNNEESENNNN(WSWS(E|WNN(WWWSWWSEESWSWS(WNWNE(E|NWWSWWSESWWSWNNWSWWSSSWWNENWWNNWNEENNN(WWWWWWSESEE(SWSWWSSSEESWWWWNNWSSSEEEESSESWWWWNWWWSWNNNENWWSWWWWSEESSSWWNENWWSSWNWWWNNESEENENNWNWSS(WNWSWWNWWNEENWWNWSSWWNNNE(SS|ENWNNWN(WSSWSE(ENSW|)SWSWNWWWSSENESSSEESSSSSWSSSWWWNNENWNEE(SSSWENNN|)ENNWWN(NWN(E|WNWSSSWWWSESENEEN(ESS(WSSWWN(ENSW|)WWNW(NNNNESENE(NWWWNNEENWWNENWNEEEESESENESS(ENE(S|NN(ESNW|)W(S|WWW))|WWWW(N(NWSNES|)E|SS(ENESNWSW|)WW))|S)|SSSENESESWWSW(SEENESSESSWNWNWSSESESESESWSWSEENENEEEESENENWWNWWWW(SEEEWWWN|)WN(W|ENNNN(ESENEENNEEESWWSESEESENNW(NNEEESSSW(NNWESS|)SEEENNEENWWW(SS|NENWN(EESSEN(EESSEESWWSW(WSW(N|SESWWNWWSWNWSSEEE(N|SESSSWSWWSWNWWNENW(WSWWWWN(WSWSEESSENESENE(NWWWEEES|)SESSENESSESENEENENNESSEEENEENNWWNENWNWWNNENNESEESEENESENNNEEESWWSSSWSWNWWSW(SSENE(N|SEEEN(EEENWNW(SWEN|)NEEENNNNESENEESSSWN(WSSW(SW(W|SEESWSEESSEEENNNWNEEESWSESSW(N|SSWWSSESSENNEN(WW|EESSW(WSSSWWN(WSSESWWSSWSESWWNNNNWNNENNENE(ESWSWSS(ENSW|)(SS|W)|NNNN(EE|WSWNNNWWN(WWWSSESSSWWNN(ESNW|)WNENWWWWSESE(SSWNW(WSESESSESEEENWWNEN(W(WSNE|)NN|EEENEE(NWNW(N(NW|EES)|S)|EESWSWNWSWSEESWWSW(NNNWESSS|)SESSWNWNWN(E|WSWSSSENNESSE(N|EESENE(NWNNNSSSES|)SSSEEEESSESWSEENESEENWNWWNENWW(S|NWNEEENWN(WWSEWNEE|)ENN(WSNE|)ENNNEEEESWWSSSW(NNN|WSSENESEENNENES(ENNNENESS(SW(N|S)|EEEEE(SESNWN|)NWWWWN(NNWWS(WSWSW(NNNNWNNNNNENWWSWSESWSESSW(SSEENW|NWWWNEENNNW(SS|NNNENNESEENENWW(WNWWNNEEEESENNNNNWSWSS(ENSW|)WWNWWNEEE(S|NNE(S|ENENNWWS(E|WS(E|WWWWWNENN(WWWSW(N(WSNE|)NEENWNNW(N|WWSEES)|SSENE(NEWS|)SSWSESESSWS(ESSSESSE(NE(N(WNNW(NN(E(S|E)|NNNWNEEES(ENSW|)W)|S)|E)|S)|SWWNNW(SSWW(NEWS|)(W|SSE(SSENSWNN|)N)|NNN))|WWNWWS(E|WNNWSSS(SSSWWEENNN|)WNWNENNNESEENN(W(S|WWWNWSWSSSE(ENNWSNESSW|)SSWS(WWSWWW(NW(SWNWSSSWW(SESWSSSES(EE(S(WSEWNE|)EE|NNW(WNSE|)S)|WW(SWW(NEWS|)W(WWNWESEE|)SSEEN(W|E)|N))|W)|NEENNNESSS(SWEN|)EEN(E|WNENNW(W(WWSWNSENEE|)NNE(SE|NNWS)|S)))|SEE(EENSWW|)S)|EE))|EESWSEES(S|E|WWW)))))|EEES(WS(WNSE|)E|ENENEES(W|E(ESWSEESEEE(N(WW|NE(E|N))|SWWWSSSESSESSEEESSSWSWWNENENWWSWSWSESWWNNW(NEENENNWWS(E|W(SEWN|)(NNEENWWNENNW(S|N(ENWESW|)W)|WWWNWW))|SS(SSENEEESWWSWSESSS(WSW(NNENWNNWSSS(NNNESSNNWSSS|)|S)|EENE(S|NNEENWW(NEENN(NESE(SSENEN(W|ESSES(WW(N|S(EE|WWW(SSWWNE|N(EE|NN))))|EN(NWNN(ESNW|)W|EEE)))|NNWN(NNNWWNW(S|NEE(S|NN(E|WSWW(NWNEES|S))))|E))|WW(SEWN|)W)|WWSESWS(NENWNEWSESWS|))))|WWWN(WSSWN|EEN))))|NNWW(NEEENWN(SESWWWEEENWN|)|WWSWNNWSS(NNESSEWNNWSS|))))))))))|S)))|S(WWS(E|SS)|E))|E)|E))|SWSESESE(N|SSWWSS(WWNWW(SESSE(SWWSSES(ENN(W|EEENNWS(NESSWWEENNWS|))|WWWNENWWNWWN(EEEE(SW|EN)|WSWNWSWSS(EESEENE(NWW(S|WW)|ESWSSSEENN(WSNE|)E(EE|S))|WWWS(E|WSWNNNWSWSESWWNWNNE(NE(S|EEENESS(WSNE|)ENE(S|NENNENN(ESSSWENNNW|)WWS(E|WNWWWSWNWNWWSESESSS(ENNES(S|EEE(N(ES|WWNE)|S))|WWNWSWNNNWWNEEE(SES(ESNW|)W|NNNE(SENESEES(EEN(WNWW|ES)|W)|NWNWSSWSS(ENSW|)WWWWNWNNENWNENNESENESSWWSSS(W|EE(SWWEEN|)NEN(WWSNEE|)NEENNN(WNWWNWSWWS(WWWNN(WSSWSWSSWSESENESSENE(SSWSEESSSEENE(NWWSNEES|)SSWSSSEEEN(WN(WSNE|)NE(NWES|)S|EE(SSSSWWNEN(WWWWSEESSWWWWWNWWSWNNENNENWWNENWWNEENEN(WNNWNWWSSSWNWWSWSSSEESSENNE(SSSE(S(ENSW|)SSSSEEE(N|SSWWWSWSEENEEEEESWWWWSEESWWSEESEEEEEEENNWWNENEENEEENNEEEEN(ESE(SWWWSWW(NEWS|)SEEEEE(SWWWSSSSWS(SSWWWSWWSEEESESWWWN(WWWNENNEENEENE(NNWSWNWNENWN(W(SSSSWWWWSWWN(E|WSSWWNENWNWWSESWWNWSWNNNWWWWSESENESSSSESENN(ESSEESEEESESSWS(EEENESEESWWSESSSEES(WW|ENNNNW(SSWNNSSENN|)NENWN(NWSWNWWNW(SS|NWNWN(WSWNWNWS(NESESEWNWNWS|)|ENESENESE(NEN(E(E(N|E)|S)|WW)|SWS(WNWESE|)S)))|EEEEE(NNNWN(E|W)|S(W|E))))|WWNNWSWWSSSENE(NWES|)ES(ENESNWSW|)WSWS(WNWWS(E|WSWNNENWWWNEEENWWNENEEE(ENE(EEES(S|E)|NWWWWNWWNNE(NWWSSSSWNNWSWNNWNWNEESENNWWWNNENWWWWW(SSSENNESSE(SSSSE(N|ESWWSEEESWSWNWWNNNWW(NENE(NWWSNEES|)S|SSSSE(NNN|EESWSWSSSESWSW(SESSW(N|SESSSEEESESWWWN(WW(SESEEEEENESEENENE(E(E|NNNENWNWWWSESE(SWWS(WS(E|S|WWNENEN(NNNNWNENN(NWSWNWWNN(WSS(WNSE|)SSSSEEE(NWN(EE|W(NEWS|)S)|SESSSWNNWNWWW(SSSES(EE(NWN(WNEWSE|)E|S|E)|W)|NN))|EN(EEENE(SSWWWS(W|EE)|EN(WWW(SWEN|)N|NESEEE))|W))|EESSW(N|SEES(EE(S|N(W|N))|WW)))|E))|EE)|N))|SSWS(E|WWWS(EE|SSSWNNWNN(ESNW|)WWSWNWSW(NN|SSEESEEN(WN(ENSW|)WW|ESSESSSS(ENEE(S(W|E)|NNWW(SEWN|)N)|WNWNENWNWWWW(NEWS|)SEEESWWWSEES(WW|E(E|N))))))))|NNN)|E))|NNNNNNE(WSSSSSNNNNNE|)))))|NN)|NNNEENEESWSWS(WNSE|)EENEES(W|ESWSEE(EENNWSWNNWNENESEES(SENE(SSS(WWNEWSEE|)EES(WSE|ENNWW)|NWNENWWNNWSWS(ESEWNW|)WWSWW(SEWN|)NWWWWW(SEWN|)NNNESSEEEEE(EENNE(ENESESSENNE(NWWN(WWNN(ESNW|)WSWNNENWNNE(NENENESENN(WNNWSWS(SWWWWNWWNNENWWWWNENWW(NEEEENNWWWNNNESSEENENNEE(NWWWN(WSWWS(EEESWS|W(NNNNEE(SSWNSENN|)NN(ESNW|)WSWNNE(NWNNNSSSES|)E|SSSSSEEE(WWWNNNSSSEEE|)))|E)|SEESSWNWSSWSSESSESSE(ENEEE(SS|ENNWNNWSWNNW(SWNWS(W|SES(S(S|EEE(NWWNSEES|)E)|W))|NNEN(W|ESS(W|ES(W|E(SSE(S|N(ESNW|)N)|N))))))|SWW(SEEWWN|)W(NN(ESNW|)NWN(WWSEWNEE|)(NNNNENN(SSWSSSNNNENN|)|E)|W)))|SSSSSESSESEESWWSSWNNNW(SSSSSESENESSESWSES(WWNNNWW(SEWN|)N|EENE(NEENWWNWNWNW(NW(SWWEEN|)NEESEE(S(W|S)|NWNWNEE(N(E(S|E)|WWWWN(EE|NNW(N(WSNE|)E|SS)))|S))|SSESESWS(NENWNWESESWS|))|S))|NN))|E)|E)|S)|E)|SSSS(S|EEE))|S)|S))|WW)|S(WWW|SS(SSWENN|)E))))|S)|S)|SSW(SSEN|NW)))|ES(W|E)))|W))|W)|EN(ESEESWWSEES(NWWNEEWWSEES|)|W))|S)|E)|EEE(SSS|ENNN(NWSW(SSENSWNN|)N|E)))|EN(WWW|NN|EEEES(E|WWW)))|N)|WWWN(WSWNW(SSS(ENSW|)WNWWWWSES(EENWESWW|)SWW(SWSS(WNNSSE|)EE(EE|N(W|N))|N(NWNN(WSSWNN|E(S|EEEEENWW(EESWWWEEENWW|)))|E))|N)|EE)))|NN)|NN(EENWN(E|N)|WSWWNEN(SWSEENSWWNEN|)))|ESSSW(N|SEEE(NWES|)SSWW(NEWS|)SS(WNSE|)EE(NWES|)S(EE|W)))|N)|E))|NNW(NN(ESEN|WSWSE)|S))|ESENN(EN(W|ES(SWEN|)ENESE(SE(ESNW|)N|NN))|WW))|EEEESESW(ENWNWWEESESW|))|ES(E|SSS)))))))))|S)))))|N)|NNNWW(WW|NEEESESWSEE(NE(NWNWESES|)E|S)|SES(W|S)))|ENEES(W|S))))))))))|N)|N)|N)))|E)|N))))|NN)|N)|WW))|NW(W(NEWS|)W|S))|E)|NEN(WNENNWWS(E|W(SEWN|)WWNEEN(EE|NWSW(WSW(SEWN|)N|N)))|EESSS(WNNSSE|)ENENWN))))|NNN)|N)|NNNWWSESWSESWWWNWNNWNEEN(NWSWW(N(E|NN(WSWNSENE|)N)|SSSSE(N|S(E|WW)))|E(SSS(WNSE|)S|E))))|W)|W(SSS|WNNE(NWES|)S)))|N))|EE)|N))|EE)|EESENEESWSEESEENWNEN(WWSNEE|)ESSENNEESWSEESSEENNNW(SS|WNEEESSSESWSWWWSESE(EEN(NESSE(NNNWNNENN(WWS(S|E)|EEESSS(SWNW(NENWESWS|)(W|SSEESS)|E(N|E)))|SSS(EEESEN|W))|WW)|SWWWN(E|WNNNN(ESSSNNNW|)WWSESWWWN(E|WWS(WNWN(NWES|)EE|ESES(ENEE|WS))))))))|S|E)|N(ESENSWNW|)W)|ESSEENN(WSNE|)EESWSES(WWSWW(WSE|NE)|E(NNNESE(SWEN|)NEEE(SWWEEN|)EE|S))))|ESENNESENNNNWSS(NNESSSNNNWSS|))|E))|EEESSWSEESEESSSWSEEENEESWSESESWWNWSWSESEEEN(ESENNNEESESESWSSEEN(W|NEENN(ESESWSWSSSEE(SWSWWWS(SSWWNENWWWSSE(SWWS(ESNW|)WWNNNWNNWSWWNENENNEEENWN(EEESSE(EEESS(E(NNNN|E)|WWN(WWW(SS(ENESEE|SW(WNNE(NWWSNEES|)S|SS(ENSW|)S))|NN)|E))|NNNNW(S|N))|WSWNWWNWWSSE(N|SSE(ENNWSNESSW|)SWWWNENWWSW(SESSSS(WNWW(SEWN|)N(EENWESWW|)W|ENENE(NWWSNEES|)SES(ENESESSWWW(SWW|NEE)|WW))|NNNW(SS|WN(ENNNWWWNN(W|NNN(N|EEESWWSSSEENWNEENEN(NW(WNNNEWSSSE|)S|ES(ENSW|)SWSESESE(SSWNWSSW(SESWENWN|)NNW(NE(NWNSES|)E|SS)|EN(W|E)))))|W(S|WWW))))))|N)|EE)|ENNW(WSEWNE|)NEESENNEN(ESNW|)(N|WWW(SE|NW)))|NWSW(SEWN|)NN(E|WW(SESNWN|)WWWNWNNESENNWNWSWS(WNNENNWSWWNWNN(EEEES(ESSENEESS(WNSE|)ESENESEE(NWNWWNNEEN(WWWWS(ESSNNW|)WNW(W|S)|ESS(WW|E(SWEN|)ENEEEN(WWWWSNEEEE|)ESES(ENN(W|ESSSWSSEEN(W|ESENE(NWWW|SEN)))|WWWW)))|SWWWWW(SES(EENWESWW|)WW|N))|WW(W|S))|WSSW(NNWSSNNESS|)SEESEESWS(E|W(N|S)))|SSSESS))))|WW)))))|SS(SS|WNWSWN))|SSS(W(S|W)|EEE))))|ES(ENSW|)S)))|ENESSWS(WNSE|)E))|ENNEN(E(S|E)|WWNWSWNWN(EEEESNWWWW|)WSSES(E|W)))))))))))|S(E|SS))|W(WNWW|SE)))|W))|S)|SSSS(W|ESENNNEN(WWSSNNEE|)E(E|SSSSS(W(NNN|WW)|E(N|SWSEENE(WSWWNEWSEENE|))))))))|W)))|SESEESWS(NENWWNSEESWS|))|S))|W)|W)))|W)|NNNNNENWWS(NEESWSNENWWS|)))|S(ES(W|S)|W(N|WWSWSWS(WNWESE|)EE(SWEN|)N)))|SWWWSSEESSSWSS(WNWWSES(E|SWNWSSSWWSEESSWSESW(WWNNN(NNW(WSWSWNWW(NEWS|)SSE(EES(ENNE(N|SS)|W)|N)|NENNNNENNNEEEE(NWWNN(WSSNNE|)NEE(SWSEWNEN|)(NWWNEE|EEE)|SWS(EENENW|WNWSSS(ENSW|)SW(SSENSWNN|)N)))|E(E|SS))|SSENESS(ENENE(S|NN(ESSEWNNW|)WWNW(SSE(S|E)|N(EESNWW|)NNN))|SSSWSESESSWS(SENE(NNNN(NWSNES|)E|E)|WWNNW(WSEWNE|)NNNE(NENNWSWW(NEWS|)(S(S|E)|W)|SSES(S|E))))))|ENE(S|NNNNN(WW|E(SSEENE(NWWSNEES|)S(SWWWEEEN|)EE|N))))))|SES(ENSW|)W))|E)))))|E)|S(SS|EEEEN(W|EE(NNWSWENESS|)S(W|S)))))))|E)))))|N)|N)|W)|N(N|WWW)))|N)))))|NNWSWNNENWWSWNNWWN(EEESENNWW(NEE(EESSW(N|SESENENWNEESSSWS(WW|EEE(NNNEEN(EESWS(E|SWS(WNNEWSSE|)E)|WW(NENNN|WSSS))|S(W|S))))|N)|W)|WSWNNWSSS(WN(W|N)|EEEE))))))|E)))|S))|N)))|EE(S|N)))|EENWNENNWN(EE(NWWEES|)SSSSS|WS(SE|WN))))|N)))))))|E)|S))|N))|SSWSSEN(SWNNENSWSSEN|))|S))|SSSSWWN(E|WSSEESSE(SWWNNWWSS(ENSW|)W(NN|W)|NN)))|SSSSSSSSWSW(WWS(WNSE|)ESSSEEE(SWW(W|SESWSEE(SSWNWSWSEEESWSSE(SWSESWWWSEESWSSSSSWWWNWN(NENWNEE(SSS(E(SWEN|)NNN|W)|NNN(WSSWNW|NNESE(SWEN|)N))|WSWSSWNNWSW(NNNE(S|NWNWSSW(SS(WW|E(SWEN|)N)|N))|SES(W|EEENNESES(W|EEN(W|ESENE(S|NNNW(NNE(NN|S)|SS)))))))|N)|NN))|NWNN(WSSNNE|)E(N|S))|N))|SS))|E)|N))))|W)|WWWWWNEEE(WWWSEEWWNEEE|)))))|N)|N))|W))|W)|N(NNWWSES(NWNEESNWWSES|)|EE)))|N)|WWWWNEENWNWN(W(SSE|WWNW)|E))|WW)|NN)|WWSSSSWNWWNEENWW(WSWW(W|SEESW(W|SEESES(WSWENE|)ENEEE(ESEENW|NNN(E|NW(SSSWWWNW(ESEEENSWWWNW|)|N)))))|NN))|S))|S)|WNW(NNE(NWWNNSSEES|)S|S))|WNNW(WSES|NEE))|NNWN(WSWNW(NE(NWWSNEES|)EE|SSESSWNW(N|SS(SSWNWESENN|)E))|EE))))|W)|S))|EEN(N|W))|W)|ENN(E(ESWENW|)NN|W))))|N))|EESE(ENW|SWWN))|SWS(ESWENW|)W))))$"