See also: The Introduction | Part 1: The Maze.
In this part we will look for a path through the maze, if any, using the Shortest Path Algorithm. Or rather, one of them. I have chosen Breadth-first Search. (The A* algorithm may also be worth a look.)
The output should look like this:
$ ./maze-solver-spa 5x5-ok.txt
Path: SEESEESS (with length 8)
$ ./maze-solver-spa 5x5-fail.txt
No path
Note that there can be several paths, with equal length, and which one you get from a program depends on the algorithm and the small choices (implementation details). I will show the length (number of steps), so that you can compare the result with your own program - if you choose to have a go at it.
#! /usr/bin/env raku
unit sub MAIN ($maze where $maze.IO.e && $maze.IO.r);
constant $end = '█';
my @maze = $maze.IO.lines>>.comb>>.list; # [1]
my $rows = @maze.elems; # [2]
my $cols = @maze[0].elems; # [2a]
die "Missing entrypoint '█' in maze" unless @maze[0][0] eq $end;
die "Missing exit point '█' in maze" unless @maze[$rows-1][$cols-1] eq $end;
# [3]
my %desc2symbol = ( # [4]
SW => '╗',
EW => '═',
NW => '╝',
ES => '╔',
NS => '║',
NE => '╚',
ESW => '╦',
NES => '╠',
NSW => '╣',
NEW => '╩',
NESW => '╬'
);
my %symbol2desc = %desc2symbol.antipairs; # [5]
%symbol2desc{'█'} = 'WNES'; # [6]
%symbol2desc{' '} = ''; # [7]
for ^$rows -> $row # [8]
{
for ^$cols -> $col # [8a]
{
say ": [$row, $col]: { @maze[$row][$col] } -> \ # [9]
{ %desc2symbol{get_directions($row, $col)} // '#' } \
({ get_directions($row, $col) })";
}
say "";
}
[1] This beautifully simple line reads in the entire maze from the
file, splitting each line into single characters (with comb
), giving a
two-dimentional array. Note that comb
gives a Sequence, a lazy data
structure, suited for one-time consumption (in e.g. a loop). That does not work out
as we are goingto access the values repeatedly, and not in sequence. Slapping on a
list
on each row (with >>.list
) turns the rows
into lists, thus solving the problem.
[2] The number of rows, and columns [2a], taken from the first row. We assume that all the rows have the same length.
[3] Abort if the maze doesn not have the entry and exit.
[4] The symbols, with the directions the represent as keys.
[5] The opposite; from the symbols to the direction letters.
[6] The entry and exit has exits in all four directions, so that we don't have to special case them during the traversal.
[7] Empty cells have no exits.
[8] For each row and column [8a].
[9] Print the row and column number, the maze symbol at that location, and the legal exits from there. Legal, as in the neighbouring cell in that direction has an exit lined up towards us.
See
docs.raku.org/routine/list for
more information about list
.
The // '#'
in [9] is there
as the exit unfortunately has to be special cased after all. We'll get back to
why when we run the program.
sub has_direction ($row, $col, $direction) # [10]
{
return False unless @maze[$row][$col].defined; # [11]
return %symbol2desc{@maze[$row][$col]}.contains: $direction; # [12]
}
sub get_directions ($row, $col) # [13]
{
my @directions; # [14]
return '' unless %symbol2desc{@maze[$row][$col]}; # [15]
for %symbol2desc{@maze[$row][$col]}.comb -> $direction # [16]
{
@directions.push: 'N'
if $direction eq 'N' && has_direction($row -1, $col, 'S'); # [17]
@directions.push: 'S'
if $direction eq 'S' && has_direction($row +1, $col, 'N'); # [18]
@directions.push: 'W'
if $direction eq 'W' && has_direction($row, $col -1, 'E'); # [19]
@directions.push: 'E'
if $direction eq 'E' && has_direction($row, $col +1, 'W'); # [20]
}
return @directions.join
if @directions.elems > 1
|| ($row == 0 && $col == 0)
|| ($row == $rows - 1 && $col == $cols - 1); # [21]
return " "; # [22]
}
[10] This helper procedure tells us if the given cell has an exit in the specified direction.
[11] The cell is undefined if we are trying to access a cell outside the maze, i.e. we are off the edge.
[12] Does it have the exit? We use contains
to
search for the directional letter in the directional string; e.g. «N» in «NESW».
We could have used a Regex, but this is faster.
[13] This is the big deal. We give it a cell (row and column), and it gives us a list of available exits. The cell must have the exit, but the neighbouring cells must have an exit lined up towards us as well.
[14] We rae storing the directional letters here.
[15] If the symbol at the current position isn't present in our list of symbols, it has no exits (as it is a space, or should be).
[16] Iterate over the directions from the current cell, using comb
to split the string into a list of letters.
[17] It has an exit in the North direction if it has an exit in the North direction (silly, yes), and the cell to the North has en exit to the South.
[18] As above, but to the South.
[19] As above, but to the West.
[20] As above, but to the East.
[21] Return the directions (as a string, courtesy of join
), if there are at
least 2 directions. A single direction has no corresponding symbol, and is a dead end anyway
(so we can ignore it). Unless we are at the entry or exit. They can actually have just a
single direction (after the three others have been discarded). The example shown below
shows why that is the case.
[22] Return a space if there are 0 or 1 directions, so that the program can print a space.
See
docs.raku.org/routine/contains for
more information about contains
.
Running it on the «5x5-ok.txt» maze, shown below at the left. The result of applying «get_directions» on it is shown on the right:
█╩╩║╬ ╔═
╠╬╬╔╦ ╠╦╗ ╗
╬╬╬═╣ ╠╬╬═╣
╠╩╩╩╣ ╠╩╩═╣
╩╬╬║█ ╚═ #
The three cells marked as blue should really be blank, but the algorithm is not smart enough (=recursive), and allows them as the neighbouring cells have the corresponding exit. But it does not really matter. They represent dead ends, and will be discovered as such, albeit a little bit later on. The exit cell, marked with green, is discussed in [6] below.
$ ./maze-inspector 5x5-ok.txt
: [0, 0]: █ -> ╔ (ES) # [1]
: [0, 1]: ╩ -> ═ (EW) # [2]
: [0, 2]: ╩ -> ( ) # [3]
: [0, 3]: ║ -> ( ) # [4]
: [0, 4]: ╬ -> ( ) # [5]
: [1, 0]: ╠ -> ╠ (NES)
: [1, 1]: ╬ -> ╦ (ESW)
: [1, 2]: ╬ -> ╗ (SW)
: [1, 3]: ╔ -> ( )
: [1, 4]: ╦ -> ╗ (SW)
: [2, 0]: ╬ -> ╠ (NES)
: [2, 1]: ╬ -> ╬ (NESW)
: [2, 2]: ╬ -> ╬ (NESW)
: [2, 3]: ═ -> ═ (EW)
: [2, 4]: ╣ -> ╣ (NSW)
: [3, 0]: ╠ -> ╠ (NES)
: [3, 1]: ╩ -> ╩ (NEW)
: [3, 2]: ╩ -> ╩ (NEW)
: [3, 3]: ╩ -> ═ (EW)
: [3, 4]: ╣ -> ╣ (NSW)
: [4, 0]: ╩ -> ╚ (NE)
: [4, 1]: ╬ -> ═ (EW)
: [4, 2]: ╬ -> ( )
: [4, 3]: ║ -> ( )
: [4, 4]: █ -> # (N) # [6]
[1] The box symbol █
has four exits, but W
and N
are outside of the maze and are ignored.
[2] The N
is outside the maze this time as well.
[3] The N
is outside the maze this time as well.
The E
leads to a cell without a W
exit, and is also ignored
[4] The N
is outside the maze this time as well. The cell bellow does not
have a N
, so this one has no exits at all.
[5] The same as [4].
[6] This one is tricky, It is the exit, and it has one exit only; N
. That
is perfectly legal, for the entry and exit points only. We don't have a symbol
with only one exit, so I used a #
instead to show that it is a special case.
The first part is almost identical to the code in «maze-inspector», so is shown without explanation (except one):
File: maze-solver-spa-simple (partial)
#! /usr/bin/env raku
unit sub MAIN ($maze where $maze.IO.e && $maze.IO.r);
constant $end = '█';
my @maze = $maze.IO.lines>>.comb>>.list;
my $rows = @maze.elems;
my $cols = @maze[0].elems;
die "Missing entrypoint '█' in maze" unless @maze[0][0] eq $end;
die "Missing exit point '█' in maze" unless @maze[$rows-1][$cols-1] eq $end;
my %desc2symbol = (
SW => '╗',
EW => '═',
NW => '╝',
ES => '╔',
NS => '║',
NE => '╚',
ESW => '╦',
NES => '╠',
NSW => '╣',
NEW => '╩',
NESW => '╬'
);
my %symbol2desc = %desc2symbol.antipairs;
%symbol2desc{'█'} = 'WNES';
%symbol2desc{' '} = '';
sub has_direction ($row, $col, $direction)
{
return False unless @maze[$row][$col].defined;
return %symbol2desc{@maze[$row][$col]}.contains: $direction;
}
sub get_directions ($row, $col)
{
my @directions;
return '' unless %symbol2desc{@maze[$row][$col]};
for %symbol2desc{@maze[$row][$col]}.comb -> $direction
{
@directions.push: 'N'
if $direction eq 'N' && has_direction($row -1, $col, 'S');
@directions.push: 'S'
if $direction eq 'S' && has_direction($row +1, $col, 'N');
@directions.push: 'W'
if $direction eq 'W' && has_direction($row, $col -1, 'E');
@directions.push: 'E'
if $direction eq 'E' && has_direction($row, $col +1, 'W');
}
return @directions.join; # [0]
# return @directions.join
# if @directions.elems > 1
# || ($row == 0 && $col == 0)
# || ($row == $rows - 1 && $col == $cols - 1);
#
# return " ";
}
[0] We can actually get away with only this return statement, instead of the two below it. See if you can figure out why. And if we should hold on to them.
Then we come to the job of traversing the maze. We do this by looking for non-visited cells by following legal exits from the current position (initially the entry point), and adding those cells to a queue of positions to consider. Then we work through the queue until we arrive at the exit, or the queue is empty.
File: maze-solver-spa-simple (the rest)
my @visited; # [1]
my @todo = ("0;0;"); # [2]
my $path; # [3]
while @todo # [4]
{
my $current = @todo.shift; # [4a]
my ($row, $col, $possible-path) = $current.split(';'); # [5]
@visited[$row][$col] = True; # [6]
if $row == $rows-1 && $col == $cols-1 # [7]
{
$path = $possible-path; # [7a]
last; # [7b]
}
for get_directions($row, $col).comb -> $direction # [8]
{
@todo.push: "{ $row -1 };{ $col };{ $possible-path }N"
if $direction eq "N" and ! @visited[$row-1][$col]++; # [8n]
@todo.push: "{ $row +1 };{ $col };{ $possible-path }S"
if $direction eq "S" and ! @visited[$row+1][$col]++; # [8s]
@todo.push: "{ $row };{ $col -1 };{ $possible-path }W"
if $direction eq "W" and ! @visited[$row][$col-1]++; # [8w]
@todo.push: "{ $row };{ $col +1 };{ $possible-path }E"
if $direction eq "E" and ! @visited[$row][$col+1]++; # [8e]
}
}
if $path # [9]
{
say "Path: $path (with length { $path.chars })"; # [9a]
}
else
{
say "No path"; # [9b]
}
[1] A two dementional list of visited cells, so that we can back off the second time we come across it. (As the first one is the shortest path there).
[2] We start at the start. The values in list are cells to consider. The value is composed of «row»;«column»;«path to get there». The path is there so that we simply can report it when (if) we arrive at the exit.
[3] We store the path here, if we reach the exit.
[4] As long as there are cells left to consider, get the first one [4a].
[5] Split it as discussed in [2].
[6] Indicate that we have visited this cell, so that we can back off later (as discussed in [1]).
[7] Have we arrived at the exit? If so, set the path [7a] and exit the loop [7b].
[8] Get the directions we can go from the current cell, as a string. (The maximum value is «NESW», ans the minimum is an empty string.)
[9] There are two ways to get there. One: If we run out of cells to consider.
In that case we did not reach the exit, and the $path
variable is not
set. Two: We did find the exit, and $path
variable has the path.
Print the path, or the "No path" error message.
Running it:
$ ./maze-solver-spa-simple 50x25.txt
Path: ESENEEESEEEESESWSSESSSEEENEEEEEEEEEESESE
SEESESSSEEESSEESEEESEEESESSEESEEENEEEESSS (with length 81)
So we'll do just that (with a «--show» command line option), using the ANSI Control Sequences to set and unset the colours. See my Counting Water with Raku and Perl article for examples.
The ANSI codes do not work with HTML pages, but we can fix that by using Bootstrap colours instead (with the «--html» command line option), as done in the article I just linked to.
We can also add a coverage map, which is useful to visualize why a maze is untraversable. We'll show that one instead of the path, if the maze is untraversable. And we'll visualize the difference with colours; green for a traversable maze, and red for an untraversable one.
The maze solver program:
File: /maze-solver-spa (partial)
#! /usr/bin/env raku
unit sub MAIN ($maze where $maze.IO.e && $maze.IO.r,
:v(:$verbose), # [1]
:s(:$show), # [2]
:h(:$html)); # [2a]
constant $end = '█';
my @maze = $maze.IO.lines>>.comb>>.Array; # [3]
my $rows = @maze.elems;
my $cols = @maze[0].elems;
die "Missing entrypoint '█' in maze" unless @maze[0][0] eq $end;
die "Missing exit point '█' in maze" unless @maze[$rows-1][$cols-1] eq $end;
my %desc2symbol = (
SW => '╗',
EW => '═',
NW => '╝',
ES => '╔',
NS => '║',
NE => '╚',
ESW => '╦',
NES => '╠',
NSW => '╣',
NEW => '╩',
NESW => '╬'
);
my %symbol2desc = %desc2symbol.antipairs;
%symbol2desc{'█'} = 'WNES';
%symbol2desc{' '} = '';
my $col-blue = "\e[44m"; # [4]
my $col-green = "\e[42m";
my $col-red = "\e[101m";
my $col-stop = "\e[0m";
if ($html) # [5]
{
$col-blue = '<span class="text-primary">';
$col-green = '<span class="text-success">';
$col-red = '<span class="text-danger">';
$col-stop = '</span>';
}
if $verbose # [1]
{
say ": Rows: $rows"; # [1a]
say ": Cols: $cols"; # [1a]
say ": Row: { @$_.join }" for @maze; # [1b]
}
my @visited; # [6]
my @todo = ("0;0;"); # [7]
my $path; # [8]
while @todo # [9]
{
my $current = @todo.shift; # [10]
say ": Checking: $current" if $verbose;
my ($row, $col, $possible-path) = $current.split(';'); # [11]
@visited[$row][$col] = True; # [12]
if $row == $rows-1 && $col == $cols-1 # [13]
{
$path = $possible-path; # [13a]
last; # [13b]
}
for get_directions($row, $col).comb -> $direction # [14]
{
@todo.push: "{ $row -1 };{ $col };{ $possible-path }N" # [14N]
if $direction eq "N" and ! @visited[$row-1][$col]++;
@todo.push: "{ $row +1 };{ $col };{ $possible-path }S" # [14S]
if $direction eq "S" and ! @visited[$row+1][$col]++;
@todo.push: "{ $row };{ $col -1 };{ $possible-path }W" # [14W]
if $direction eq "W" and ! @visited[$row][$col-1]++;
@todo.push: "{ $row };{ $col +1 };{ $possible-path }E" # [14E]
if $direction eq "E" and ! @visited[$row][$col+1]++;
}
}
if $path # [15]
{
say "Path: $path (with length { $path.chars })"; # [15a]
show-path($path) if $show; # [15b]
}
else
{
say "No path"; # [15c]
show-coverage if $show; # [15d]
}
[1] Verbose mode will print the dimensions of the maze [1a], and the maze itself [1b].
Note the @$_
syntax for accessing the individual elements in the first
dimension of the array as arrays themselves.
[2] Use this command line option to show the maze with the path or coverage, using ANSI codes.
[3] use this in addition to [2] to get the output with HTML markup instead of ANSI codes.
[4] I have added blue as well, even if I haven't used it.
[5] If we want html ouput, I simply override the codes (markup) to use.
[6] We set the claue for cells we have visited, so that we can stop future tries. (The first one is the shortest path there.)
[7] A list of celles to consider. Initially, at the entrance [0,0]. The third part is the path so far, which is empty here.
[8] A global variable. If it contains anything when the loop terminates, we have a path from the entrance to the exit. The path is stored in the variable.
[9] While we have more cells to consider,
[10] Get the first one in the queue.
[11] Split into row, column and path to get there.
[12] Set the cell as visited. Note that we do this when we actually gets there, and not
when we see the cell the first time. That is a problem, and the ++
thingies
in [
[13] Have we reached the exit? If so save the path [13a] and exit the loop [13b].
[14] For all legal directions (i.e. the call has the direction, and the neighbouring cell in that direction has a matching exit) from the current cell, add them to the list if we have not visited them already
[15] Do we have a path? If so say so [15a] and print the maze with the path [15b]. If not, say so [15c] and print the coverage map [15d].
The following procedures should be familiar by now:
File: maze-solver-spa (partial)
sub has_direction ($row, $col, $direction)
{
return False unless @maze[$row][$col].defined;
return %symbol2desc{@maze[$row][$col]}.contains: $direction;
}
sub get_directions ($row, $col)
{
my @directions;
return '' unless %symbol2desc{@maze[$row][$col]};
for %symbol2desc{@maze[$row][$col]}.comb -> $direction
{
@directions.push: 'N'
if $direction eq 'N' && has_direction($row -1, $col, 'S');
@directions.push: 'S'
if $direction eq 'S' && has_direction($row +1, $col, 'N');
@directions.push: 'W'
if $direction eq 'W' && has_direction($row, $col -1, 'E');
@directions.push: 'E'
if $direction eq 'E' && has_direction($row, $col +1, 'W');
}
return @directions.join;
# return @directions.join
# if @directions.elems > 1
# || ($row == 0 && $col == 0)
# || ($row == $rows - 1 && $col == $cols - 1);
#
# return " ";
}
And finally the two procedures showing the maze graphically:
File: maze-solver-spa (partial)
sub show-path ($path)
{
my $row = 0;
my $col = 0;
for $path.comb -> $direction # [1]
{
@maze[$row][$col] = $col-green ~ @maze[$row][$col] ~ $col-stop; # [1a]
if $direction eq "N" { $row--; }
elsif $direction eq "S" { $row++; }
elsif $direction eq "W" { $col--; }
elsif $direction eq "E" { $col++; }
}
@maze[$row][$col] = $col-green ~ @maze[$row][$col] ~ $col-stop; # [2]
say @$_.join for @maze;
}
sub show-coverage
{
my @matrix; # [3]
for ^$rows -> $row # [4]
{
for ^$cols -> $col # [4a]
{
@matrix[$row][$col] = @visited[$row][$col]
?? $col-red ~ @maze[$row][$col] ~ $col-stop
!! @maze[$row][$col];
}
}
say @$_.join for @matrix;
}
[1] Follow the path from the entry point, and highlight the cells [1a]. Note that this destroys the maze data structure by adding the colour markup, but that does not matter here as we are done after printng it.
[2] Highlight the exit as well.
[3] Here we do it differently. We start with an epty array,
[4] iterates over the rows [4] and columns [4a]
[5] marks the cell with red if we have visited it, and adds it without colour if not.
Running it:
$ ./maze-solver-spa 5x5-ok.txt
Path: SEESEESS (with length 8)
$ ./maze-solver-spa -s 5x5-ok.txt
Path: SEESEESS (with length 8)
█╩╩║╬
╠╬╬╔╦
╬╬╬═╣
╠╩╩╩╣
╩╬╬║█
Note the use of aliases; «-s» instead of «--show».
The entry and exit are colour coded here, as I have cheated and used html. The ANSI version does not work on that symbol, so it is shown with the normal colour in the terminal. Feel free to investigate...
Verbose mode can be used to show what is going on:
$ ./maze-solver-spa -v 5x5-ok.txt
: Rows: 5
: Cols: 5
: Row: █╩╩║╬
: Row: ╠╬╬╔╦
: Row: ╬╬╬═╣
: Row: ╠╩╩╩╣
: Row: ╩╬╬║█
: Checking: 0;0;
: Checking: 0;1;E
: Checking: 1;0;S
: Checking: 0;2;EE
: Checking: 1;1;SE
: Checking: 2;0;SS
: Checking: 1;2;SEE
: Checking: 2;1;SES
: Checking: 3;0;SSS
: Checking: 2;2;SEES
: Checking: 3;1;SESS
: Checking: 4;0;SSSS
: Checking: 2;3;SEESE
: Checking: 3;2;SEESS
: Checking: 4;1;SSSSE
: Checking: 2;4;SEESEE
: Checking: 3;3;SEESSE
: Checking: 4;2;SSSSEE
: Checking: 1;4;SEESEEN
: Checking: 3;4;SEESEES
: Checking: 1;3;SEESEENW
: Checking: 4;4;SEESEESS
Path: SEESEESS (with length 8)
An untraversable maze will not be shown with a path. But we can show the coverage instead:
$ ./maze-solver-spa 5x5-fail.txt
No path
$ ./maze-solver-spa -s 5x5-fail.txt
No path
█╠╠╠╦
╬╦╬╬╩
╠╩╣╦╬
╬╠╝╬╦
╣╣╦╣█
Verbose mode shows where the coverage, the red cells, come from. Note the path in the «Checking» lines, after the cell row and column:
$ ./maze-solver-spa -v 5x5-fail.txt
: Rows: 5
: Cols: 5
: Row: █╠╠╠╦
: Row: ╬╦╬╬╩
: Row: ╠╩╣╦╬
: Row: ╬╠╝╬╦
: Row: ╣╣╦╣█
: Checking: 0;0;
: Checking: 1;0;S
: Checking: 1;1;SE
: Checking: 2;0;SS
: Checking: 1;2;SEE
: Checking: 2;1;SES
: Checking: 3;0;SSS
: Checking: 0;2;SEEN
: Checking: 1;3;SEEE
: Checking: 2;2;SEES
: Checking: 4;0;SSSS
: Checking: 0;3;SEEEN
: Checking: 1;4;SEEEE
: Checking: 3;2;SEESS
: Checking: 0;4;SEEENE
: Checking: 3;1;SEESSW
: Checking: 4;1;SEESSWS
No path
Some more mazes:
$ ./maze-solver-spa -s 10x10-fail.txt
No path
█╝═╩╦╗╠╦╬╩
╣╬╣╠╬╬╣╩╝╦
╦╬╦╠╚╦╠╦╬╬
╣╣╬╦╩╬╠╬╦╬
╠╠╦╬╠╣╔╗╦╬
╠╩╠╦╬╦╬╩╦╗
╦╣║╦╩╠╬╬╣╚
╩╦╠╬╬╦╩╔╩╦
╠╠╦╩╬╦╩╩╬╗
╬╣╦╩╣╬╦╠╣█
$ ./maze-solver-spa -s 10x10-ok.txt
Path: ESEEESESSEEESWSESSSE (with length 20)
█╣╠╠═╣╣╣╠╦
╗╬╦╩╬╝╠╣╦╦
╣╬╠╬╠╬╠╠╠╣
╬╣╣╗╩║╣╦╣╬
╬╔╦╦╬╩╬╩╦╦
╦║╬╣╦╬╗╦╩║
╦╗╩╬╬╩╦╩╣╩
╣╠╩╠╬║╗╦╣╩
╬╠╠╩╬╬╩╗╣╠
╣╠╩║╦╬═╬╠█
$ ./maze-solver-spa -s 25x25-ok.txt
Path: SSSSEENNEEEESEEESEEEEESSSESSEESEEEEESSSESSSSSSSSSESS
(with length 52)
█╩╣╦╬╔╣╠╬╦╣╣╬╠╦╦╦╬╩╣╩╬╦╩╩
╣╬╝╔╣╦╩╬╩╠╠╬╦╬╬╬╣╠╩╦╩╠╩╠╠
╣╠╠╦╦╦╦╩╠╬╝╠╠╣╣╣╦╩╣═╬╩╠╣╠
╬╠╠║╣╬╩╦╬╬╩╠╬╬╦╠╣╩╬╠╬╠╠╦╣
╩╩╬╚╠╩╠╣╣╠╬╦╩╦╬╬╩═╦╠╩╚╔╚╬
╦╔╦╬╩╩╠╔╣╩╦╝╣╩╬╬╠╠╝╦═╣╚╠╦
╝╩╣╩╦╩╣╣╦╦╣╠╦╔║╦╦╬╬╬╬╣╩╣╠
╬╩╩╦╬╬╣╣╦═╩╠╣╬╠╣╠║╚╠╩╬╬╩╩
╩║║╚╬╩╦╬╝╣╣╩║╦╩╬╔╚╬╦╦╦╦╚║
╠╦╣╬╬╩╣╩╩╬║╠╣╠╩╠╬╬╣╬╠╦═╦╬
═╠╣╠╣╝╬╩╩╣╦╩╬╬╬╬╣╚╦╦╦╩╦╦╦
╬╠║╚╬╩╚╣╬╩╠╬╦╬╬╠╬╩╩╩╩╩╠╣═
╠╦╝╣╬╦╣╦╩╩╦╣╦╬╬╬═╦╠╦╣╩╬╩╠
╦╣╬╬╠╠╦╠╠╠╠╠╠╚╠╦╠╬╬╬╣╩╚╣╬
╦╣╔╚╣╩╬╦═╔╬╩╦╔╣╩╬╩╬╠╠╣╦╠╦
╣╠╦╠╩╬╦╠╠╬╠╬╩╦╣║╦╣═╦╩╬╠╬╬
╬╩╦╠╝╣╦╠╬╠╩═╬╩╦╣╩╣╠╩╠╬╬╣╠
╦╠╣╦╦╠╣╣═╠╩╣╬╬╬╦╩╠╣╬╣╝╩╠╦
╠╩╬╬═╔╩╦╠╠║╩╬╬╣╠╩╠╠╣╣╬╣╬╩
╩╦╬╣╬╣╠╬╣╠╣╩╦╣╦╬╣╚╦╣╠╠╩║╚
╦╩╩╦╔╬═╣╦╝╣╣╠╠╬╦═╩╔╣╔╦╬║╣
╩╬╩╬╣╩╠╩╠╣╬╠╦╠╬╠╬╬╬╠╦╠╠╬╩
╬╬╣╣╦╠╣╦╦╠╣╩╣╩╦╩╦╬╬╦╬╚╣╬╦
╚╬╣╦╠╠╠╩╝╩╬╚╠╠╬╣╬╦╣╩╠╣╩╬╬
╠║╬╦╣╬╦╠╠╦╣╠╣╩╚╠╦╩╩╠╬╚╬╣█
./maze-solver-spa -s 50x25.txt
Path: ESENEEESEEEESESWSSESSSEEENEEEEEEEEEESESESEESESSSEEESSE
ESEEESEEESESSEESEEENEEEESSS (with length 81)
█╣╠╬═╣═╩╣╠╠╝╩╬╩╠╣╦╬╩╚╠╦╣╠╣╠╦╬╩╠╩║╬╣╠╚╩╬╠╩╩═╬╣═╬╣╣║
╩╠╩║╦╩╦╦╦╣╝═╠╦═╦╚╬╩╬╠╩╬╣╩║╠╚╠╩═╦╣╦╩╠╠╬╬╬╣╠╩╩╣╦╣╣╦╣
╬╠╣═╚╣╬╩╩╠╦╩╩╦╣╩╝╬╣╩╩║╬║╠╣╬╩╣╝╬╦╣╬╩╦╠╠╬╦╣╦╣╣╩╠╬║╦╬
║╩╩╩═╣╬╠╠╦╩╬╠╝╩╬╦╩╣╣╩╦═╣╦╬╬╦╬╩╦╠╬╣╣╬╬╠╠╩╦╠╚╩╣╩╦╩╣╦
╩╬╣╣╣╣╦╩╦╬╩╝╩╦╣╦║╦╦╣╠╔╬╬╩╠╣╣╦═╬╠╠╣╦═╬╦╦╩║╠╩╩╠╩╬╦╩╬
╣╠╩╣╦╦╦╣╦╩╬═╩╠╠╦╠║╬╠╠╬╣╩╠╝╣╬╠╦╣║╬╚╩╬╬╬╦╠╦╦╠╬╠╣╦╣╩╠
╦╦║╩╩╠╣╣╩═╣╦╠╣╦╦╦╩╔╠╠╠╦╣╬═╬╬╠╦╩╩╬╬╦║╦╠║╦╬╣╦╦╬╠╩╩╠╬
╩╠╚╣╦╠╣╦╬╩╣╣╣╔╦╩╬╦╩╬╬╩╬╦╠╠╣╬═╦╦╦╦╬╦╣╠╣╠╔╩╬╣╠╦╝╬╦╣╬
╔╝╦╠╩╣╦╦╩╣╠╬╩╩╦╦╠╩╣╩╣╩╠╠╣╩╣╦╦╠╬╬╦╬╬╩╦╣╦╩╠╔╦╦╣╔╩╠╬╠
═╦╦╣╦╠║╬╦╣╦╬╣╬╩╣╦╦╣╠╬╬╩═╠╣╠╠╣╠╬╬╬╠╩╩╦╦╚╣╔╠╠╣╣╣╠╬╩╦
╬╬╣╣╩═╔╣╬╔╬╬╣╠╠╬╣╬╣╩╠╬╩╣╔╩╩╦╩╣╩║╩╔╩╦╣═╬║╦╠╣╝╦╦╠╬╩╚
╬╦╬╣╣╣╩╠╠╦╚╣╠╬╦║╣╩╦╬╣╦╠╦╠╠╣╠╣╣╣╠╣╣╬╣╩╣╠╠╠╩╣╣╩╦═╠╦╦
╣╩╩╬╩╬╦╚╠╩╣╬╬══╬╣╦╣╣╠╬╔╣╦╦╣╬╬╬╠╣╬║╦╠╣║╬╦╩╬╩╦╩╦╝╩╬╝
╦╩╣╣╦╦╬╩╩╝╬╠╩╣╠╬═╩╦╩╬╬╬╩═╩╠╣╣╩╠╣╦╠╣╣║╣═╦╩╣╝╬╣╦╬╦║╬
╬╠╦╩╠╬╠╦╚╩╠╬╠╩╣╦╝╬╦╠╦╩╠╦╬╬╣╠╠╩╬╦╣╣╣╔╬╩╠╠╣╦╠╠╬╣╦╩╦╣
╠╬╩╠╩╦╬╠╦╦╚╬╣╩╣╠╠╠╠╔═╩╬╩╬╩╠╠╣╣╬╬╔╠╬╠╬╣╩╦╩╣╣╩╩╦╦╦╬╬
╣╩╣╦╬╦╬╩╦╦╦╩╔═╩╦╦╬╣╣╩╩╣╣╦╦╦╦╩╠╩╩╦╦╩╣╦╩╩═╬╩╠╝╩╔╬╬╠╠
╦╠╝╠╔╬╝╬╦╣╝╦╬╦╝╬╦╣╩╬╣╬╠╦╣╣╣╦╬╣╬╬╩╠╦╦╣╬╩╬╦╣╣╣╬╠╦╦╝║
╠═╬╚╦╣╩╦╣╠╚╚╠║╦╩║╦╠╠═╣╣╠╬╩╦╔╠╠╬╩║╬╠╦╬═╦╦╦╦╩╠╩╩╦╦╬╣
╬╣╝╩═╠╣╩╦╣╬╠╦╝╠╦╣╬╬╣╣╬╦╠╦╦╝╬╦║╣╠╩╣╣╠╠╠╦╩╦╦╠╬╔╣╩╠╠╠
╣╦╣╩╬╩╬╣╬╠╬╬╣╣╠╦║╠╦═╦╣╠╩╬╦╝╠╠╝╚╠╠╩╣╩╩╬╠╦╬═╣╦╣╚╩╩╠╬
╠╩╠╩╣╣╬╠╝╠╣╠═╣║╦╬╩╣╩╣╩╣╣╬╣╩╠╦╣╩║╬╣╩╠╩╦╬╦╚╩╦╬╠╠╦╬╩╣
╠╠╠╦╣╠╠╬╦╩═╣╩╩╩╩╬║╬╣╔═╣╠╠╣╣╠╩═╠╩╦╩╩╬╩╩╠╣╦╬╬╦╦╣╩╣║╣
╠║╣╣╬╣╬╩╣╝╣╦╦╦╩╠╦╔╠╩═╚╬═╣╩╩╬╠╣╦╦╣║╦╦╠╣╩╦╣╣╣╝╝║╣╦╣╣
╩╬╠╩╬╬═╣╩╦╦╩╬╩╩╩╩╬╩╣╩╦╣╦╦╝╩╣║╠╦╦╬╦╦╠╬║╩╬╬╠╩╬╬╠║╠═█
I generated 10 50x50 mazes with «mazemaker2», without those spurious exits. (They are included in the zip file.) Only 3 of them are traversable:
$ ./maze-solver-spa -s 50x50-01.txt
No path
█╦╦╗╗ ╔╦╦╗╗╔╗╗═╗╦╔╦═ ╔╦═╦╦╗╦╦╦╦╦ ╦╔╦╦╦╗╦╦╦╦╦╔═╦╦╔
╚╝╬╣╦╔╬╬╣╬╩╠╠╠╣╠╬╠╣═╬═╩╬╬╦╣╬╠╬╩╦╣╣═╗╣╩╚╩╦═╩╗╚╠╩╝╣║
╚╠╩╠╣╣╬╦║╩╦╚║╩╬╩╣╩╣╬╠╬╦╩═╦╩╣╠╩╦╦╦╦╠╦╬╬╬╠╦╩╦╝╩╬╠╬╩╝
║╦╬╠╬╬║╔╣╣╬╠╦╩╬╬╣╝╠╣╣╝╬╣╠╣╣╩╠╦╣╠╩╠╦╩╬╬╣╩╬╝╣╬╣╬╣╣╦╣
╠╣╠╩╬╩╩╠╣╣╦╣╔╔╠╬╠╦╣╗╣╩╣╔╚╣╬╠╣╣╝╩╩╩╔╠╦╦╩╦╩╬╣╔╩╩╬╩╝
╚╩╠╣╦╩╦╣╩╣╦╠╔╣╬╬╬╬╬╝╠╠╩╬╩╣╣╣╠╠╦╣╣╩╦╩╬╣╩╬║╣╦╣╩╝╠╠╠
╚╩╣╠╬╬╣╣╠╬╠╬╩╠╬╦╬╦╦╬╩╗╠╠═╠║╣╬╩╦╦╠╦╬║║╠╩╦╦═╦╩╦╦╦╬╠╝
║╩╬╣╦╦╣╦╔╩╬╦╚╦╩╦╦╬╚╠╚╬╬╣╠╬╣╬╬╝═╣╬╠╣╠╩╠╗╦╦╣╦╔╬╚╬╬╣║
║╦╔╦╩║╩╬╣╩╦╬╠╠╠╦╬╗╩╩╩╩╠╠╬╣╦╦╦╩╩╬╩╠╠╣╦╣╦╦═╦╬╩╠╩╔╣╦╣
╔╬╬╠╬╬═╩╠╣╬╣╬╩╬╦╬║╣║╚╦╩╣╠╠╣╩═╠╠╠╩╦╣╩╣╦╩╣╬╠╩╩╠╦╠╦╩╗
╔╠╬╦╠╦╬╬╣╬╣╬╬╩╬═╗╦╩╦╝╠╠╗╚║╚╦╬╩╣╣╬╚╠╦╬╠╣╬╬╩═╣╩╣╦╩╠╝
╠╠╬╦╣╠╦╔╦╣╬╩║╠╩═╦╣╣╠╦╣╗╗╣╦╣╩╦╠╬╗╠╦╣╠╠╩╣╦╬╣╗╬╬╗╩═╣
╠╣╦╚╣╣╣╦╬╬╣╬╠╬╦╚╠╩╩╩╣╠╩╣╠╩║╠║╠╠╣╠╩╬╣╩╦╩╠╬╩╬╩╩╬╬╣╠╝
╚╦╠╠╬╠╠╠╬╩╦╚╠╩╬╠╦╦╠╩╦╠╩╠╬╩╠╔╩╩╦╬╦╬╝╩╠╣╦╠╠╬╣╩║╠╠╣╩╗
╠╣╦╩╔╣╦╣╬╣╚╦╦║╠╣╣╠╗╬╩╣╣╩╣╬╠╠╝╦╩╣╔╩╣╦╩╠╦╬═╦╠╩╩╠╬╩╬║
╚╩╝╣╗╠╬╦╩╩╩╬╠╦╩╦╝╦╠╦╠╣╬╣╝╬╣╦╠╩╠╦╩╩╬╩╬╦╦╚╣╠╣╝╣╬╚╚╬╣
╔╩╦╬╬╬╚╩╣╠╠╩╬╬╠╩╦╦╣╦╩╬╠╠╩╣╣╣╠╣╠╣╬╦╠╠╦╬╠╠╦╣╬╩╦╬╚╣╠╗
╠╬╣╦╬╩╦╣╔╣╠╦═╦╠╬╠╦╦║╬╦╗╣╣╠╚╦╠╔╠╣╬╣╝╬╩╠╗╩╗╬╦╠╔╠╣╠╣╣
╚╝╦║╠╠╬╣╦╩╬╩╠╩╬╦╬╬╩╩╝╝╚╩╣╦╦╠╩╠╦╩╦╠╠╩╩╣╩╣╬╬╬╠╣╔╩╚╠╣
╔╩╠╣╠╬╠╬╩╣╠╩╠╩╬╠╦╣╩╦╦╣╠╦╣╣╗╠╠║╔╩╠╩╬╣╣╩╗╠╠╚╠═╔╩╬╣╬║
╠╩╚╬╣╠╩╬╠╬═╠╔╦╠╠╗╬╣╬╠╠╦╩╣╬╬╦╬╩╬╬╣╦╦╦╚╩╦╣╣╩╦╬═╣╦╠╠╝
╦╣╦╗╬╦╬╬╬╣╦╩╬╠╣╩╦╠╠╩╬╬╣╣╬╦╩╠╝╚╠╬╣╠╣╦╚═╦╣╦╩╣╬╩╠╠╩╝
╔╠╬╔╠╬╝╣╬╦╦╩╠╦╩╦╔╔╣╬╗╦╬╩╣═╩╦╠╩╬╦╚╦╬╬╦╦╣╝╔╬╣╬╦╬╣╦╬╝
╚╠╩╩╩╣╩╠╣╬╩╬╦╣╦╩╔╬╬╩╩╬╬╬║╠╣╦╩╬╠╬╬╩╬╠╠╬╩╣═╩║╠╩╣╗╬╠
╚╦╠╠╠╬╩╩╣╬║╬╩╦╬╠╬╩╦╦╠╗╠╬╣╦╬╣╣╦╗╠╔╦╬╩╦╦╬╦╣╬╬╦╬╣╩╬╝╣
╠╩╦╬╩╠╠╦╬╦╩╬╦╣╩╩╩╣║╗╣╩╠╩╬╦║╣╠╦╦║╬╠╩╣╦╠╬╩╠║╬╬╬╩╣╚╬╣
╠╬╣╠╬╬╩╦╦╬╝╩╣╦╠╬╦╬╦╣╣╦╦╦╩╦╠╣╦╩╩╩╬═╣╬╠╠╬╩╬╬╣╣╣╠╠╝╩╗
╦╠╠╣╣╬╣╣╬╣╬╬╗╠╠╣╦╩╬╦╦╩╩╬╬╣╣╬╦╩╣╩╠╔╦╦╗╣╠╩╣╝╬╩╝╩╩╦╗
╠═╦═╦╣╩╬╠╬╠╦╦╦╠╣╚╣╩╚╩╬╩╣╬╣╝╠╦╩║╠╦╬╬╦╬╝╠╩╣╔╣╦╠╦╩╩╠╣
╔╣╠╦╠╬╠╩╠╬╣╠═╣╠╬╠╬╣╩╠╩║╝╠╠╝╣╣╩╬╦╩╦╦╬╦╦╩╬╩╚╦╠╦╣╣╩╩║
║╬╣╬╦╦═╩╣╝╣╩═╬═╦╔╦╦╗╠╣╣╣╠╦╠╠╬╝╩╠═╠╠╠║╩╩╩╩╬╦╩╚╩╣╝╦╣
╠╠╩╣╩╩╩╣╦╬╦╦╦╬╣╣╣╔╩╠╩║╦╣╩╝╦╩╠╠╬╚╣╠╩╩╗╝╩╣╬╦╩╬╬╩╠╬╣╝
╚╝╚╣╩╦╬╩╬═╩╗╦║╝╩╩╦╬╚╣╦╣╠╩╗╣╗╬╝╬╠╩╬╩╩╬╣╩║╠╦╦╠╣╠╩╗║╣
╠╠╗╦╦╩╣╩╝╣╬╠╠╗╗╦╩╩╩╣╦╣╚╦╣╦╣╚╦╣╚╩╣╦╩╬╠╦╦╠╣╣║║╬╠╣╬╦║
╠╦╣╠╬╦╦╚╣╦╬╩╬╣╣╬╣╣╣╣╣╠╦╬╣╩╬╣╣╩╩╩╠╬╠╣╬╦╠╦╝═╦╠╬╠╣╗╬╣
╔╬╠╣╩╬╠╬╬╣╩╔╦╝╬╠╩╩╝║╠╠║╬╦╠╚╣╩╩╩╠╦╣╩╩╩╣╬╬╣╩╩╦╗╦╬║╩║
║╣╦╣╦╦╣╠╠╣╬╩╗╠╬╣╦╩╣╩╬╦╩╦╬╠╠╩╬╣╣╩╠╠╦╬╬╩╦╬╝╩╣╦╠╠╠╬╣║
╚╦╦═╦╣╦╠╝╣╠═╠╦╬║╠╦╗╬╚╠╩╠╬╠╠╣╠╣╝╠╬╣╩╬╬╩╠╦╩╠║╩╠╠╠╩╩║
╠╦╦╩╩╩╬╠╦╣╠╣╩╣╣╣╩╣╣╦╠╦╠╣╣╦╣═╠╣╠╠═╦╣╬╬║╬╩╔╬╦╬╣╬╬╦╬╣
╔╦╬╩╬╦╩╩╩╝═╩═╣╬╦╬╩╬╬╬╬╩╬╬╩═╦╣╝╩╩╔╦╝╔╔═╚╠╦╣╣╦╩╣╬╦╬╣
╚╝╩╠╠╚╣╩╬╦╬╣═╠╠╩╠╠╩╩╚╩╦╦╗╬╩╬╩╬╦╣╗╦╩═╦╚╝╠╩╬╦╩╦╠╩╩╩╝
╚╬╚╦╣╝╬╣╠╚╣╬╦╩╝╦╬╠╦╩╣╦╠╬╬╦╦║╬╬╬╦╠╬╣╬╣╝╣╣╣╩╩╬╦╠╣╠║╣
╚╠╩╠╔╩╣╠╠╬╔╦╩╠╠╦╠╚╠╬╗╬╣╦╣║╬╩╬╩╬╣╩═╠╩╣╣╠╣╬╠╬╣╦╣╬╗╠╣
╬╗╦╩╬╦╗╣╬╣╠╬╩╦╩═╣╝╝╣╬╩╦╬╩╠╩╠╩╦╩╠╣╚╠╠╩╦╦║╬╩╬╠╠╦╔╣╣
╔╔╣╠╚╩╣╬╠╦╦╣╣╣╣╚╠╣╩╦╦╬╦╣╠╗╩╠╠╩╩╦╠═╦╬╬╣╬╣╣╬╣║╔╩╗╩╬╗
╦╦╣╦╠╠╠╠╝╣╔╩╦╩╝╠╬╩╠╦╣╠╣║╣╝╠╦╣╣╬╬╣╠╠╬╩╣╠╩╩╣╣╠╦╔╣╬╗
║╦╬╬╩╗╩╦╗╣╠╠╣╦╩╣╣╩╠╬╩╦╦╣╬╣╦╬╦╣╣╬╩╩╠╝╔╦╠╣╣╚═╬╣═╦╔║╝
╠╬╠╬╗╝╠╬╬╬╠╦╬╠╩╩╣╠╩╠╩║╣╣╔═╣╬╣╠╬╠╠╦╦╬╩╠╩╩═╣╬╩╦╩╠╩╠╗
╔╠╬╠╠╦╦╬╬╠╠╩╦╩╦╬╩╬╚╩╣╩╩╬║╔╠╩╣╠╦╬╩╠╠╣╬║╣╩╠╠╣╣╣║╬╠╩║
╚═╝╝╚╩╝╚╩═╝╩═╚╚╝╩╩╚╩╚╩═══ ╝╝═╝═╩ ╝╝═╩╚╝ ╚╩╩╚╩╝╝═╝█
$ ./maze-solver-spa -s 50x50-02.txt
No path
█═╔╦═╦═╦╔ ╦╦╔╔╦╗╗═╦╦╦═╦ ═╔╔╦═╔╔═╦╗╗═╦╦╦╗╔╔═╦╦═ ═╔╗
╚╠╣╣╣╠╣╣═╠╬╣║╩╩╣╦╩╩╦╩╬╗╬╠╦╩╦╠╔╬╦╦╦╝╬╣╬╬╬╠╦╩╦╣╣╬╔╠╣
╔╠╣╔╦╦╠╠╦╠╩╠╬╦╦╩╦╚╣╠╣║╣╩╩╠╬╣╗╩╦╚╣╬╦╩╬╣╣╠╣╣╝╩╩╩╠╣║║
╠╩╬╬╩╠╗╣╠╬╦╦╩╩╠║╣╦╬╚╦╗╩╠╬╠╔╬╩╣╦╩╠╦╣╠╦╩╠║╦╗╠╠╦╬═╬╠╝
╠╦╬╬╩╣╠╬╠══╬╬╣╦╦╚╠═╬╠╩╠╣╬╣╩╚╬╬╠╬╦╦╣╣╦╩╠╠╦╩╩╣╠╣╬╩╩╣
╠╣╩═╠╩╩╬╦╩╣╣╠╣╔╠═╦╬╩═╬╠╦╝╬╩╩╬╦╦╣╠╩╦╬╝╩╦╣╩╣╦╬╬╩╩╬╦╗
╔╠╣╬╠╠╩╦╦╠║╬╦╠╝╗╠╚╩╠╣╦╠╣╩╣╩╣╠╣╝╗╚╗╩╠╩╠╦╬╬╣╠╬╬╚╬╠╣╝
║╩╩╣╩╩╦╬╣╬╠╦╣╦╬╦╩╬╠╠╠╦╩╠╩╣╠╣╩╠╩╦╬╩╦╬╣╬╦╦╬╣╩╩╩╦╝╠╠╝
║╦╣╗╦╦╬╦╣╠╩╣╠╩╬╩╠╩╣╠╠╬╠╠╠╣╣╬╬╦╗╩╣╗╬╠╦║╣║╦╬╬╣╬╠╬╦║╗
╔╠╠║╣╦╦╦╦╠╣╠╬╔╝╬╦╦╦═╬╩╦╣╣╠╚╦╔╠╠╦╣╩╬╦╦╬╔╣╠╬╩╠╠╠╠╬╦║
║╣╦╠╠╩╣╩╦═╦╗╣╬╩╩╩╠╩╦╬╚╩╦╬╠╩╬╩╦╦╬╝╠╩╦║╣╬╠╩╩╚╠═╩╠╣╩╗
╬╔╦╦╩╣╣╬╬╬╣╠╦╠╔║╦╦╠╝╠╬╠╠╩╣╩╠╔╦╣╬╠╩╬╦╣╠╦╣═╬╣╚╩╗╣╣║
║╦╩╩╬╦╩╩╠╣╝╗╦═╝╦║╩╬╠╩╦╗╠╣╩╩╬╣╬╦╣╬╠╣╣╣╣╩╦╩╦╩╠╣╣╝╩╦╝
╠╠╠╦╣╠╦╦╩╦╩╦╗╩╠╩╩╦╔╩╦╦╬╠╦╦╩╦╚╣╬╩╩║╠╩╠╦╬╩╗╣╠╣╦╬╦╦╩║
╠╣╩╠╔╦╬╬╠╬╣╣╠╬╣╣╬╬╬╬╠╦╠╠╩═╣╦╦╠╠╬╠╦═╦═╩╬╬╠╦╬╠╩╠║╬╣╝
║╦╠╠╣╠╬╠╦╠╣╠╦╣╬╬║╠╩╩╦╦╦╣╩╠╩╩╠║╬╠╦║═╦╣╩╝╦╩╠╩╠╣╦╦╩╬╝
╩╬╩╬╦╦╬╠╣═╠╦╣╩╦╠╣╠╠╦╬╩╣╬═╬╬╬╬╚╬╣╦╦╦╬╣╬╬╣╝╣╝╩╠╗╦╩║
╠╩╬╣═╦╦╦╦╬╝╦╬╠╬╔╠╩╩╚╩╠╬╬╦╩╠╣╗║╗╬╦╗╔╩╚╦╩╣╬╦╩╠╠╣╣╠╣╣
║╗╩╬╣╣╠╣╩╠╣╣╬╬╣╩╠╦╠╣╩╣╗╩╗╬╣╦╗╬╩╔╠╦╦╩╬╩╩╬╬╬╠╠╠╬╔╔╩║
║╠╠╬╣╣╩╬╔╣╩╣╠╦╬╠╩╠╣╩╬╩╦╬╔╩╠╩╝║╝║╩╠╩╬╣╬╔╝╣╬╩╣╣╠╠╣╠╣
╔╣╬╣╩╬╬╝╩╗╣╩╬╠╩╩╦╠╦╦╠╦╦╠╣╩╩╬║╠╚╝╩╔╠╦╠╩╣╚╠╦═╩╠╠╠╠╣╗
╩╣╬╚╔╣╠╩║╠╚╦╬╚╩╬╬╝╗╬╦╣╣╬═╦╬╠══╝╠╚═╠╠╝╦╣╦╬╣╩╗╬╦╠╣║
╠╦═╣╩═╠║╠╬╚╣╠╬╠╣╣╠║╦╩╣╩═╦╣╬╠╦╩╩╚╬╠║╠╔╬╬╩╩╩╦╬╬╩╦║╩╣
╠╬╬╣╦╬═╩╠╔║╠╩╦╬║╩═║╬╬╣╬╬╠╣╦╔╠╩╦╬╩╠╬╩╩╠╬╚╬╬╬╠╗╦╬╬╬║
╠╠╠╣╦╬╝╦╗╦╬╦╩╩╩╔╬╬╩╩╩╦╩╠╦╠╣╦╦╦╬╣╬╬╦╣╩╣╦╦╠╦╠╩╬╦╠╩╬╣
╚╦╣╝╩╦╬╠╠╦╬╔╦╩╣╦╬╬╣╔╚╩╦╣╣╩╦╣╦╠╦╩╬╩╬╩╚╠╦╩╬╩╠╩╠╠╚╦╠╣
╚═╦╬╣╬╦╩╣╣╦╝╩╬╩╚╦╦╣╦╩╣╬╣╬╠╬╬╩║║╦╩╦╣═╣╣╩╠╦╣╩╩╦╠╬╬╦╝
╚╦╠╠╩╣╬╦╦╗╬╦╦╣╦╦╦╣╬╬╩╣╬╦╠╩╣╚╠╣╗║╣╩╠╬╩╔╣╬╚╦╣╬╩╩╬╔╬╣
╔╦╩╦╦╬╣╝╩╣╣╠╩╠╠╦╗╬═╠╣╗╬╣╩╬╣║╣╬╣╠╦╦║║╠╬║╬╠╠╬╠╣╬╠╣═╝
╠╠╦╣╩╬╬╠╦╠╦╣║╠╠╣╣╦╬╚╠╩╦╠╦╠╠╣╠╗╦╠╝╠╬╠╗╦╦╠╠╠╦╬╦╩╔╣╝
╠╩╣╔╠╩╬╠╔╣╦╣╣╠╝╣╬║╣╬╣╣╠║║╦╣╠╔╣╩╠╬╚╩╠╗╦╠╩╣╩╣╩╣╦╠╣╣║
║╩╠╣╬╠╦╔╩╬╦╬╩╣╗╦╬╣╣╣╩╣╩╣╦╦╠╬╬╩╦╠╦╠═║╦╣╬╬╦╬╩╩╩╔║╣╦
║╩╬╦║╣╚╩╬╦╠╠╩╚╦╗╦╣╣╩╬╩╣╩╝╩╩╔╬╬╩╠╩╬╠╗╦╦╠╠╣═║╬╦╦╣╠╩╗
╔╩╬╩╩╣╬╠╬╩║╦╝╦╩╩╣╣╗╦╬╦╬╠╦╩╬╠╣╝╩╬╔╬╩║╦╬╣╩╔╩╬╣╣╣║╠╣╗
╚╠╣═╠╠╣╠╠═╠╚╣╬╗╬╦╦╝╣╩╦╣╩╚╬╣╦╩╩╣╦╦╣╣╚╬╬╠╦╠╦╦╦╩╠╝╔╬╣
╠╠╣╩╦╣╗╬╦╬╩╬╬╬╣╣╩╠╦╦║╝╣╦╠╠╣╠╠╩╣╬╬╩╣╠╦╣╦╩╦╠╔═╬╚╩╠╝
║╦╠╬╠╠╦╠╠╦╣╠╩╠╬╩╣╩╔╩║║╩╦╠╠╩╦╬║╚╦╩╠╩╠╬╦║╩╩╦╣╦╩╝╠╩╠╝
╬╣╦╠╬╠╩╔╣╩╬╣║╩╩╬╩╬╦╦╬╚═╣╠╦╩╩╬╠╬╩╠╚╣╣╩╦╠╩╩╠╬╩╩╠╦╣╣
╔╠╩╩╠╗╣╣╦╗╩╦╦║╬╣═╣╩╦╠╩║║╦╩╬╩╣╠╣╣╗╩═╣╠╔╩╣╦╣╝╠╠╣╩╦╬╝
╠╠╦╬╠╔╣╝╝╬╗╗╣║╦╠╣╦╦╚╣══╩╝╣╦╦╦╔╬╩╝╣╚║╬╚╝╠╬╝╣╣╬╣╠╣╣
╠╦╩╬╬╣╚╝╠╬╦╦╩╬╠╬╦═╠╣╣╠╠╝╬╬╦╣╗╗╩╩╬╬╩╣║╣╣╦╦╬╣╩╠╠╠╠╩
║╚╦╬╩╠══╬╩╬╦╩╬╩╣╬╩╬╠╠╬╩╦╠╣╩╬╩╩║╦╩╩╚╬╚║╚╦╬╝╬╩╩╩╝╠╬
║╝╬╠╦╠╠╩╣╩╠╩╠╦╗╠╬╠╔╠╗╩╬╣╠╠╬╬╔╬╦╣╣╬╣╦╩╩╦╝╬╬╬╦╬╩╠╦╚║
╠╬╦╬╩╠╣╬╣╣╣╬═╦╬╠╠╩╠╠╚╣╣╗╣╣╩╬╗╠║╦╩╩╠╣╠╝╠╬╬║╣╩╣╚╦╠╩╗
╠╩╬╩╬╦╦╚╦╠╬╠╣╬╩╝╠═╬╬╣╣╣╣╝╠╣╬╚╦╠╩╩╬╣╬╬╩╠╠╬╬╦╦╦╝╩╠╦║
╦╗╝╣╚╚╩╬╦╣╬╦╠╦╬╬╦╬╗╦╠╬╬╩║╠╬╝╦╠╣╩╩╚╦╦╠╗╬╦╩╣╬╩╠╣╦╠╣
╔══╦╩╦╣╣╩╦╝╬╬╩╣╠╩╬╣╣╬╬╠╬╩╣╩╠╩═╠╠║╩╣╩╦╗╣╦╣╬╦╝╝╠╣╣║╣
╠╦╦╠╣╬╦╬╦╬╦╦╩╣╩═╦═╚╬╬╦╣╠╬╣╗╣╣╬╣╣╔╠╦╦╬╝╝╦╣╚╝═╣╣╦╠╝╣
╔╬╣╩╬╬╠╦╣╦╣╠╩╬╣║╠╠╦╩╣╠═║╣═╩═╦╩╩╦╣╬╔║╬╣╣╣╬╣╣╬╣╠╦╣╣╣
╚╩╩╝═╝═╚═╩╝╚╩╩ ═╩╝╚═╩ ╚╚═╝══╝╝╩╩═╚╚═╚╚ ══╝╚ ══╝╩█
$ ./maze-solver-spa -s 50x50-03.txt
No path
█═╗═╗╔╔══ ╔╦═╦═╦═══╦╦╦╗╔╗╗╦═╦ ╔═╔╔╗╗╔═╔╔╦═╔═╗╗═╦╗╗
╠║╠╩╔╣╚╣╠╣╬╦╬╦═╬╚╩╣╚╬╦╦╣═╠╦╬╠╩═╩╬╦═╬╦╠╗╠╬╠╣╚╩╣╣╣╦╗
╔╬╬╣╣╩╣╩╦╠╩╩╠╔╠╩╣╠╩╬╬╩╣╝╩╦╦╦╦╬╦╠╦╬╣╬╦╬╣╚╦╣╦╦╦╣╦╣╬╣
╚╚╬╦╦╗╬╠╬╠╚╠╣╦═╬═╠╔╦╗║╩╦╚╔╬╚╣╩╣╣╬╚╗╩╣╣╬╬╦╩╣╩╬║╩╦╩╗
╔║╬╠╦╬╔╩╠╣╠╣╣╦╣╗╝╚╣╠╠╬╬╗╣╬╬═╠╩╣╣╣╬╠╠═╠╣╦╣═╦╣╦╦╠╠═║
╚╔╠╬╠╦══╦╣╠╝═╠╦╦╦╣╠╬╣╩╬╬╦╦╗═╠╦╬╣╠╬╬╬╣╠╣╣╣╬╣╔╣╣║╣╬╣
╚╩╩╣╣╠╣╦╩╣╬╦╩╦╠╬╩╠╝╠╩╣║╦╗╦╠╣╬═╔╝╦╬╩╣╬╣╦╦╚╣╣╬╦╩╗╣╬╣
╠╦╠╠╠╦╠╠╬╬╦╠╬╦╣╠╚╣╦╣╩╣╩╣╣╬╔╣╩╬╣╦╣╦╣╬╩╣╦╩╚╦╠╣╠╬╩╩╦║
║╦╩╠╠╬╚╠╣╠╩╩╦╦╣╦╬╬╔╬╬╝╦╬╬╦╩╩╣╠╠╣╬╠╩║╣╠╩╣╠╬╣╦╬║╬╠═╗
║╣╠╠╠╔╠═╦╦╠╬╩╬╬╩║╬╠╣╠╬╝╬╦╣╠═╠╩╩╣╬╣╩╦╦╗╔╦╔╦╦╬╝╠╣╣╠╣
╚╩╠╚╣╣╦╬╩╣╣╩║╠╠╣╦╩╠╬╣╬╝╬╩╦╩╦╠╬╬╣╩╣╠╬╩╠╬╠╠╬╣╬╠╣╣╩╦╝
╚╬╦╬╩╣╩╠╦╠╬╗╠╠╠╬╩╩╠╣╣╝╣╗╬╠╦╣╩╦╦╦╠╔╬╗╩║╬╦╩╣╣╬╦╩╣╚╣╣
╚╦╠╔╠╬╠╣╠╚║╝╣╝╬╠╠╦╣╠╬╬╦╠╣╣╔╩╦═╬╩═╣╠╣╔╔╬╩╣╠╦╠╠╠╣╠╦╗
╠╣╦╠╠╩╣╠╬╩╦╣╠╠╗║╚╬╦╣║╔╗╩╣═╬╩╠╬╦╩╣╬╩╠╬╬╠╣╠╬╣╗╣╩╬╦╠╝
╦╣╦╦╣╬╠║╦╩╔╬╠╠╠╠╣╦╩╩╝╬╩╣╗╠╩╣╠╣╣╗╦╦╠═╔╣╩╣╔╔╬╠╦╠╬╠╗
║╣╦═╠╬╬╣╠═╠╩╬╬╝╬╔╦╠╩╩╬╚╚╦╦╣╩╦╣╣╦╣╠╣╬╩╩╬╣╩╔╠╬╬╦╦╩╦╣
╠║╩╦╦╦║╩║╦╬╦╣╦╩╩╣╩╬╠╣╩╣╬═╬╦╚╠╦╣║╩╣╩╦╠║╩╬╠╩╔╣╩╣╩║╣╣
╔═╩╣╦╣╩║═╗═╩╦╣╦╦═╩╔╚═╠╩╦╩╦╔╠╔╩═╦╣╬╝╠║╚╩╦╔╬╣╦╠╚╩╣╠╗
╔╩╬╩╬╣╬╬╗╣╩╠╩╦╦╦╩╦╣╣╩╩╬╬╗╦╦╩╣╩╬╠╦╣╣╩╬╬╣╬╬╠╩╩╔║╩╦╣║
╬╬╣╣╦╠╠╦╦╦╬╩╔╣╦═╠╩╩╠╬═╬╠╬╬╩╩═╠╦╗╦╦║╦╦╩╣║╬╦╠╦╠╬╦╬╣
╔╣╠╝╠╬╬╬╠╩╚╦╚╣╦╦╣╬╦╬╦╩╦╣═╣═╦╠╣╣╬╠╠╦╦╩╩╦╦╦╠╬╦╠╦╣╣╩╣
╔╦╩╣╩╝╬╣╩╩╬╣╬╦╦╩╚╬╔╠╩╠╠╗╠╣╠╠╩║╠╩╣╠║╣╩╠╠╝╩╣╩╬╦╣╬╠╣╣
╔╠╬╚╠╣╝═╦╦╬╬╬╬╠╠╩╦╩╦╠╩╣╦╦╣╣╠╬╦╬╬╩╣║╔╠╠╩╚╦╩╩╠╠╦╠╬╬╗
╚╠╩╬║╦╔╩╬╣╣╣╩╠╬╠╬╠╬╝╣╩╦╠╬╬╔╣═╣╦═╬╩╣╣╬╦╠╦╬╠╩║╝╣╬╣╬╣
╔╠╦╬╠╦╬╬╠╩╩╩╩╠╠╦╠═╠╠╠╠╣╩╩╬╠╬╩╦╬╩╬╬╝╬╣╠╠╣╦╣╠╣╬╩═╗╠╣
╠╣╩╠╦╣╣╦╬╩╣╣╦╠╩╩╬╦╠╦╔╠╚╬╦╣╦╦╠╩╣╠╝╦╠╠╦╣╩╬╬╠╬╩╣╦╩╬║╝
╣╠╬╬╬╦╩╣╠╦╩╠╬╩╦╣╗╣╦╬╠╠╦╬╬╦══╔╦╬╣═╬╩╩╩╦╩╬╠╦╬╠╗╩╬╬║
╠╔╦╠╬╠╩╩╔╠╣╩╬╦╣╝╠╬╬╬╣╬╠╩╦╣╠╩╦╗╣╦╩╦╗╦╗╬╩╩╩╠╠╩╣╠╠╠╩╝
╚╣╗╝╩╠╬╬╣╦╩╩╠╬╣╩╠╩╬╦║╬╠╗╠╦╣╗╦╠╝╦╦╣╠╝╠╦╬╠╣╩╦╩╠╠╠╬╬╣
╠═╣╠╣╬╦╣╬╩║╩╦╣╠╠╬╬╣╣╣╠╣╝╚╬╩╦╠╣╦╬╝╠╦║╠╩╣╩╣╣╩╣╩╣╩═╝╗
╠╩╩╩╠╣╩╚╠╩╦╦╩╩╦╔╠╣╬╩╩╩╦╣╚╦╬╦╩╔╩╝╠╔╩═╬╦╣╠╩╣╬╣╔╣╬╦╦
╔╦╬╩╦╣╠╦╩╬╩╬╦╬╠╠╬╠╦╦╠╣╠╩╩═╣╣╠╬╩╠╠╩╩╦╬╝╠╦╩╣╣╦╩╠═╗╗╝
╠╠╦╔╬╦╩╠╝╗╗╬╣╩╬╩╩╬╠╣╠╬╬╩╠╠╣╬╠╬╩╬╬╠╚╦╠╣╦╔╝╠╩╩╬╬╦╩╠
╠╠╦╩╣╩╣╦╠╩╩╚╠║╩╦╬╦╦╠╬╦╣╔╩╣╩╬╦╣╣╩╩╗╣╠╔╣╩╝╩╣╣╣╩╩╠╣╣╣
║╠╝╣╗╬╣╩╠║╬╦║╬╠╩╬╬╩╬═╩╦╬╣╬╬╠╠╠╣║╠║╠╠╦╠╦╣╗╦╔╠╬╬╣╦╩╣
╚╦╬╬║╬╬╠╠║╣╠╠╣╩╣╦╬╠╠╣║╠╣╠╠╩╣╠╣╬╩╦╦╠╦╦╣╣╩╩╣╩╩╦╣╠╠╩╝
╔╚╬╗╠╣╦╣╬╬╦╩╩╣╩╣╬╠╚╩╩╬╣╬╠╩═╩╠╦╚╦╣╦╬╩╣╗╦╣╩╦╬╔╦╬╝╚╦╣
╚╬╦╬║╬╦╩╩╦╣╦╠╦╦╦═╩╔╔╣╗╩╩╦╠╣╬╦╠╬╣╩╚║╣╩╝╣╦╬╬╠╦╣╠╠╝╠╝
╔╝╦╩╩╦╩╣╬╣╣║╣╝═╩╣╝╦╦╬╠╚╗╩╩╠╦╣╠╦╦╬╝╚╦═╣╩╬╣╦╝╦╬╗╣╬╬╝
╠╩╦╠╚╠╩╬╬╦╣╠╬╦╩╦╬╬╩╬╝╦╩╦╩╣╠╬╠╠╣╚╣╬╠╠╠╩╠╠╦╩╔╬╠╠╩╣╗
╚╠╣╣╔╣╣╝═╣╬╝═╦╩╣╗╬╦╔╠╩╦╬║╬╣╬╗╠╬╬║║╬╩╬╔╩╔╠╬╔╬╦╦║╠╠╗
╚╦╬╚╠╝╦╬╬╠╠╣╦╠╣║╠║╚╬╠╦╦╝╣╚╬╔╩╬╬╦╩╦╔╬╩╠╦╩╚╠╠╩╠╠╠╦╦╣
╚╗╬╩╚╩╬╬╣╣╚╦╣╝║╣╩╠╬╠╬╬╣╣╠╬╬╔╬╩╬╩╣╩╦╩╠╩╩╩╣║╠╩╠╬╣╦╗╣
╠╬╦╠╬╩╝╩╬╩╣╩╬╦╠╩╦╠╠╩╬╩╦╦║╬╠╣╣╬╣╬╦╗╗╦╣╦╬╩╩╬╦╩╬╦╬╩╗║
╔╦╠╦╠╬╣╦╠╦╠╩╣╬╦╦╠╦╠╔╩╩╣╩╦═╠╬╦╝║╩╠╠╣╦╔╣╠╦╬╬╦═╩╦╩╬═╣
╔╣╠╦╩╠╔╣╣╣╩╬╬╦╦╦╬╬╬╠╩╣╣╬╠║╠╩╦╩╦╩╬╦║╬╬╣╣╠╦╔╬╠╬╦╠╗╣╣
╚╣╬╠╠╗╠╬╠╣╣╣╝╠╣╬╦╦╣╦╬╬╚╦╩═╔╩╦╣╦╣╠╠╦╩╩╬╣╬╣╔╝╦╣╦╣╩╠║
║╠╬╦╩╬╩╣╬╔╦╔╬╣╦╦╣╩╬╠╗╣╩╣╚╩╠╩╣╦╩╬╣╣╠╣╦╦╔╦║╠╬╦╗╬╣╩╬╗
╚╬╠╝╣╗║╣╬╦╦╣╠╣╬╬╬╩╦╬╦╬╠╦╠╩╦╦╬╩╦╦╬╬╦╣╩╦╬╬╠╠╦╬╠╣╣╣╣╝
═╚╩╩═╩ ╚╚══╩╩╝╩╩╩╩╩╩╚╝╩═╚╩═╝╚╝╩╩═╩ ═╩ ═ ╚╩╩═ ╩╩╝█
The program will turn the colour on and off for each single character. That is rather excessive, especially for the coverage map we just showed. So I have fixed it by merging the «span» tags. Manually... (Feel free to have a go at fixing the program.)
$ ./maze-solver-spa -s 50x50-04.txt
Path: ESSSSEESESSESSSWSESSWWSEEENEEEESENNEEENEESSE
SEEENEEEEESESEESESEESSEEEESESSESSSSSSESSSWSEEESS
EEEESEESSESESSSSWSSESSSSES (with length 118)
█╦ ╦╦╗╦╗═╗╦╦╗╔╗╦╦ ═╔╔╦═╦═╗╔ ╦╦╗ ═╗═ ═ ═╦╗╦╔╔╔╗╔╔
╠╬╦╦╬╠╠╩╣╣═╬═╝╬╦╬╠╩╬╦╬╬╣╬╚╦╠╩╩╠╩╣╩╣╩╩╠╬╔╦╩╩╣╬╩═╦╣╝
╠╣╣╩╬╣╝╬╦╦╠╩╠╦╩║╣╩╠╬╔╬╠╬╩╬╩╩╣╩╔╚╩╠╦╩╩╩╩╬╣╬╬╬═╦╦╗╩║
╚╣╩╩╩╦╣╠╠╠╠╠╩╦╬╦╣╣╩╩║╣╣╩╩═╩╦╠╦║╦╩═╬╣╣╩╗╦╦╩╦╣╩╣╬╦╠╗
╚╬═╣╠╠╠╦╚╔╦╩╩╬╝╠╩╦╠╩╣╬╦╬╠╦╚╬╔╬╠╩╣║╩╣╬╬╩╣╔╚╣╩╩╣╬╣╠╝
╩╠╠╣╣╦╣═╣╩╦╣╠╬╣╣╣╩╠╬╦╩╔╬╬╣╣╠╠╦╠╚╩╝╣╣╬╩╦╬╬╣╣╬╠╬╩╬
╠╠╦╬╣╩╠╝╦╣╬╩╩╬╦╩╠╩╦╬║╦╦═╝╔╠╬═╬╬╩╬╩╦╬╬╠╬╣╣╦╩╠╠╠╬╠╬╝
╠╣╩╩╩╦╣╩╣╠╬╬╠╦╣╣╦╬╩╦╩╣╩╩╣╗╠╠╦╦╩╣╦╩╣╦╣╩╬╬╠╩╠╣╩╩╦╦╦╗
║╠╩╠╦╬╬╦╠╠╣╬╣╦╝╦╬╣╩═╦╩╩╠╦╬║╠╩╩╣╦╠╠╬╗╦╣╩╬╦╣╣╠╩╬╬╠╠╗
╔╣╩╬╣╠═╔╗╔╝╬╦╠╠╩╔╝╗╠╦╦╠╣╬╦║╚╬╦╦╣╠╦╚╦╠╩╩╬╦╣╦╩╬╬╣╬╩╣
║╩╩═╔╝╬╦╠╦╠╔╣╣╦╩╝╦╦╬╣╠╦╬╦╬╣╣╚╣╦╬║╣╬╩═╦╣╣╚╣╩╬╣╣╬╠╦╣
║╣╩╣╬╦╠╬╦╦║╩╣╣╦╩╬╠╬╚╣╬╬╬╬╚╣╩╚╬╠╩╚╣╗╠╩╠╔╬╬╠╬╠╠╩╬╣╠╗
╔╩╦╣╩║╬╬╠╔╩╠╬╩╣╬╠╝╦╠╩╣╬╦╩╣╣╣╣╠╣╣╣╠╗╣╣╩╠╩╩╩╩╣╬╩╦╣╣╝
╠╬╦╠╦╣╠╩╦╦╦╠╬╩╦╠╠╣╚╔╬╬╩╬╩╣╠╦╬╩╣╬╣╩╩╬╦╠╦╦╩╬╩╬╬╬╣╩║║
╚╩╩╬╦╦╬╦╠╠╠╩╠╩╦║╦╬╦═╣╣╩╩╣╬╣╬╦╠╠╬╠╩╩╠╠╣╗╠╣╦╚╩╠╦╣╣╬╝
╬╣╣╣╩╠╩╦╬╦╔╣╬╣╠╩╩╠╬╣╣╬╦╬╬╠╦╬╩╠╠╦╬╣╔╬╠╣╦╬╬╬╦╦╬╔╩╩╣
╚╬╦╗╠╣╬═╩╣╩╠╣╦═╠╦╬╣╦╠╣╣╬╣╣╠╣╬╦╠╬╣╠╬╦╬╝╠╬╠╣╦╬╠╠╣╬╣╣
╠╦╩╠╝╩╩╬╣╬╩╦║╩═╬╣╠╩╦╔║╩╬╠╬╣╬╣╬╦╬╬╩╔╠╬╬╔╝╦╣╦╠═╣╠╦╠╣
╠╠╣╠╠╣╩╠╔╦╣╦═╩╦╠╠╬╦╩╣╩╣╠╩╦╣╦╩╩╦║╠╠╬═╝╩╣╠╚╦╬╩╬╠╗║╦╗
╠╬║╩╩╩╬╬╦╩═║╚╗╣╣╬╬╚╦╚╚╩╩═╬╠╩╣╝╩╬╦╦╦╣╠╠╠╦╠╣╩╦╠╠╠╠╬╣
╠╩╦═╠╦╦╣╗╔╬╬║╩╦╠╣╠╬╦═╦╦╬╣╠╩╗╣╩╠╬╦╠╠╩╦╩╝╗╣╩╬╩╦╬╦╦╩╣
╠╦╠╣╦╝╦╣╠╩╩╬╣╝╣╠╦╣╠║╣║╣╣╠╦╦╣╣╦╣║╝╠╬╦╣╠╬╣╦╩╦╣╬╬═╩╝╣
╠╦╗╠╣╦╠╣╣╔╠╦╬╣╦╬╚═╣╦╩╬╠╦╣╩╣╣╣╣╠╣╣╠╝╬╠╗╦╩╬╠╣╣╦╝╣╬╩╝
╠╠║╬╩╬╦║╬╔╬╩╬╩╣╗╩╣╬╣╩╠╔╠╠╚╦╦╦╠╣╠╚╠╬╠╦╣╣╠╣╣╦╣╣╠╣╬╬║
╚╣╬╬╣╣╣╝╩╣╠╠╩╬╗╣═╩╩╠╔╩═╚╠╦╩╚╚║╬╩╬╗╦╣╬╠╣╬╣╣╠╣╠╦╦╠╩║
║╬╠╩╠╦╣╦╩╦╠╣╣╠╠╬╣╩╣╝╩╦╬╬╦╩╣╠╩╣╣╣╬╩╚╩╦╬╦╣╦╣╬╦║╣╬╬╣╣
╔╬╠╬╣╣╩═║╚╬╠╬╠╬╦╦╠╣╣╩═╬═╣╦╠╩╠╩║╩╗╬╩╬╣╬╗╣╩╬╬╗╣╣╗╣╩║
╠╠╬╦╦╩╠╦═╣╣═╚╣╣╩╣╬═╝╝╚╩╝╩╦╦╣╦╠╩╬╬╦╬╝╩╣╦╣╦╦╠╠╗╦╦╬╣
║╩╣╗╩╠╠╦╬╩╩╣╬╠╠╬╩╦╣╬╦╣╠╠╬╦╩╗╠╩╦╦╠╦╬╣╬╬╣╦╗╣╠╚╔║╩╬╬
╔╠═╩╦╩╬╦╦╦╩╠╠╗╣╦╬╣╣╬║╣╝╩╦╬╠╬╬╩╣╦╠╦╚╦╩╬╣╣╦╠╣╣╩╗╩╠╠╣
╚╣╔╠╬╣╠╩╣╬═╦╠╦╠╠╬╩╬╣╣╦╦╩╦╦╣╦╔╠╠╣╦╩║╩╝╬╣╩╠╦╣║╬╬║╩╩╝
╠╣╣║╩╣╠╩╩╠╦╦═╦╣╦╣╦╬║╠╬╩╩╩╠║╚╦╠╠╠╠╠╣╬╚╦╩╩╩║╩╣╠╬╦╠╠║
║╬╬╦╠╦╣╣╦╩╦╠╣╠╩╦╦╚╗╔╦╗╠╦╠╠╠╠╬╩╠╠╦╩╣╣╦╬╬╦╬╣╩╚╔╣╬║╠║
╠╦╬═╦╬╦╬╦╗╦╦╩╦╠╩║╝╦╩╬╩╬╣╩╦╣╦╠╦╔╬╦╠═╩╗╣╬╬╣╩╚╩╗╠╣╣╦╝
╗╬╣╬╠╣╦╬╠╦╩╩╠╬╠╬╣║╠╠╩╗╦╬╬╬╩╩╩╦╣╩╣╠╬╩╣╬╗╬╩╩╬╣║╩╣╚╣
╔╩╩╣╬╦╩╬╔╣╩╣╠══╣╦╬╣╬╬╣╚╩╦╦╬╦╩╠╦║╩╦╩╚╣║╩╠╣╦║╦╠╬╣╠╬╝
║╩╣╩╩╩╦╠╣╦╬╬╗╣╩╣╦╣╩╔╝╬╣╠║╬╠╦╠╩╠╣╦║╠╣╣╩╬╩╣╬╦╩╣╩╬╣╦╣
╠╬║╬╣╬╠╬╔╩╩╦╠╣╩╬╩╦╬╣║╦═╣╦╠╩╦╦╠╬╦═╣╔═╩╗╬╩╣╩╣╬╝╣╩╦╠╗
╔╦╣╣╣╦╦╠╦═╦╩╠╦╣╦╦╦╦╠╝╣╦╚╣╝╣╠╚╦╬╩╠╬╩╦╔╦╬╦╦╝╠╠╩╦╬╬╣╣
╔╬╚╩╩╩╩╦╠╬╠╩╠╬╣╬╩╩╣╩╦╦╣═╦╔╩╠╠╣╣╝╣╦╩╬╦╣╠╩╦╔╩╬╬╠╦╦║╝
╚╚║╩╗║╠╚╣╬╣╦╚╦╬╩╔╠║╦╩╦╦╩═╦╠╬╦╦╗║╣╦╬╠╩╣╣╩╠╬═╬╣╠╬╩╠║
╠╣╦╦╩╣║╬╬╬╠╩╬╬╩╦╠╩╠╣╦╝╩╠║╬╣╦╩╦╦╬╩╝╗╦╬╣╔╝╗╠╠╠╣╣╔╠╬╗
╬╣╣╦╠╦╣╠╠╠╠╩╣╣╦╦╦╬╩╣║╣╣╠╔╠╣╣╣╦╬╣╣╠╦╬╦╔╣╦╬╣╔╩╩╗╠╩╣
╠╩╦╬╬╦╚╩╠╦║╩╣╦╦╠╬╬╣╬╩╩╦╬╬╩╣╩╬╣╦╠═╬╣╣╠╝╩╣╗╣╩╠╠═╦╠╗╝
║╣╠╣╬╦╣╣╦╦╬╩╣╣╠╦╔╬╩║╠╦╚╗╦╬╝╩╩╬╦╬╦╠╩╠║╦╦╩╣╬╦╣╬╩╠╠╗║
╔╠╠╬╣╩╦╚╦╣╗╦╠╬╦╣╦╦╔╠╦╣╣╩╦╬╠╔╦╦╦╠╬╦╬╣╩╣╦╠╠╬╩╦╣╩╬╠╠╣
╔╠╣╣╠═╩╣╩╠╣╬╩╦╦╬╬╚╣╩╩╣╠╩╠╠╩╩╬╦╬╦║╣╬═╗╔╣╠╠╦╣╦╠╩╠╩║╝
╔║╦╬╦╦═╣╠╩╬╬╬╦╬╩╣╩╣║╣╦╩╣╠╔╠╠╔╦╦╬╣╦╬╣╬╩╬╣╩╝╩╦╠╗╩╩╠╝
╔╩╠╦═╩╠╦╣╝╦╬╬╬╠╦╚╔║╣╠╦╦╩╬╚╬╔╬╣╠╔╩╣═╣╠╣╩╠╦╣╚╬╩╬╠╩╩╣
╚╝╩╝╚═╩╩ ╩╚╝╚╝╩═══ ╝╚╝╩══╩╩╝╚╩╩╚╩╩╝ ╩╚═╝═╚╩╚╩╝╝ █
$ ./maze-solver-spa -s 50x50-05.txt
No path
█╔╔═╗╦╦╦╗╔═╦═ ╦╔╗═╔╦╦═╔╦╦╔╔╔╦╔╦════╗ ╗═╗╔╗╦╔═╦╔ ╦╗
╚╠╦╩╩╠╠╣╠╬╦╬╬╣╩║╦╬╣╬╩╩╣╣╣╦╠╔╦╩╣╦═╬╬╬╬╦╣╬╬╦═╦╝╬╠╩╬╝
║╦╠╠╬╬╬╦╦╠╩╩║╠║╬╣╬╬║╦╠╠╝╬╣╦╩╩═╦╦╩╠╬║╗╚╦╔╩╣╣═╣╦╦╦╦╣
╔═╦╠╩╠╬╦╠╠╩╚╦╦╬╠╬╦╩╦╠╬╩╣╬╩╦╠╦╠╩╦╦╝╩╦╦╣╣╠═╦║╦╩╩╩╠╩║
╠╣╬╩╗╩╣╦╬╗╠╬╦╩═╦╬╚╬╦╩╣╩╣╬╣╣╣╚╦╦╦║╩╩╩╣╩╠║╩╠╦╬╣╣╦╩╠╣
╝╩╩╦╣╝╦╦╬╬╩╦═╬╚╬╦╬╩╣╩╦╠╦╦╦╠╦╦╦╦╔╩╠╬╝╦╬╦╠╠═╣╩═╦╠╬║
║╩╬╦╩╩╝╣╠╩╦╝╩╔╩╦╠╩╣╩╩╩╬╬╦╚╗╦╣╠╩╩╦╬╠╬╣╣╦╩╦╦╬╦╬╦╬╬╬╣
║═╣╣╩╦╦╠╦║╬╬╦╚╗╔╬╣╦╣╝╠╩╠╣╬╬╦═╦╩╠╣╠╠╦╦╠╗╦╠╦╠╬╚╦╩╣╠╣
╔╩╣╦╬╬╬╩╠╦╩╠╦╣╣╬╣╠╬╬╬╬╦╩╩╦╬╔╝╩═╬╬╩╦═╣═╣╦║╠╩╩╣╠═╬╦╝
╠╦╩╬╬╠╦╬╣╦╠╣╠╣╩╩╩╣╣╦╠╔╣═╩╦╦╠╬╦╠╩╦╦╦╠╝╣╔╩╩╠╩╠╣╩╣╩╠╣
║╦╩╠╚╔╗╔╩╠╔╣╩╣╣╬╣╠╠╣╠╦╠╣╠╠╬║╝╬╠╩╠╠╣║╣╚═╬╣╠═╩╩╩╣╩╩╗
╔╠╠╗╠╩╩╦═╔╣╦╣╦╠╬╩╬╦╠╣╣╣╣╦╠═╣╦╣╣╬╣╣╦╦╠╠╣╣╬╦╠╠╦╣╣╩╠╗
╠╩║╬╠╗╬╬╦╦╬╬╝╬╠╠╦╩╦╩╩╠╬╩╚╣╣╔╠╬╣║╩═╬╦╦╩╝╗╣╦╩╚╩╬║╣╬
╣╠╬╠╣╬╠╠╗╩╣══╩╣╣╣╣╠╦╬╣╦╠╩╣╣╬╣╬╦╠╬╩╬╠╠╬═╣╦╣╔╠╣╣╝╠╝
╚╣╦╠╬╣╠╦║╝╚╦╠╣═╩╣╩╬╗╦╦╩╠╦╚╩╣╩╔╦╩╠╦╣╚╣╣╬╠╩╩╬╦╦╠╬╔╣╣
╠╬╩╠╬╦╬╝╬╠╠╣╩╩╠╦╣╣╬╦╩╣╩╩╬╦╠║╠╣╦╩╦╬╩╣╩╩╩╩╬╚╩╣╗╝╩╬╣╣
╬╬╗╩╩╠╦╩╣╗╦╣╣╦╗╣╩╔╩╚═╠╦╠╣╬╠╗╣╣╦╦╩╦╚╬╦╠═╩╝╠╩╦╬╩╩╠╝
╠╠╚╣╣╩═╩╠╠╦╬╦╠╚║╦╣╣═╩╣╠╣║╦╩╦╣╣╠╠╣╠╦╬╩╦╦╣╦╣═╩╦╦═╩╠╣
║╣╗╩╔╣╠╦╩═╬╩╦╦╬╩╩╬╣╩╣╩╩╩╩═╚╗╬╦╠╣╣╠╠╣╠╬╣╔╣╦╦╣╩╩╗╬╣╗
╔╬╦╣╦╩║╬╠╦╦╠╩╦╬═╬╦╦╩╬╦╬╩╩╦╣╣╣╦╦╠╠╠╣╩╬╦╦╩╠╬╩╠╔╬╦╩╩║
╠╦╬╠╣╣═╦╣╩╚╣╬╩╔╦╣╬╦╝╣╣╣╩╬╦╬╔╝╬╣╣╦╠╣║╦╦╝╠╠╬╬═╠╠╠╬╩╝
╩╦╩║╚╩╦╠╣╩╠╦╬╠╬╬╩╣╠╬╬╠╬╬╬╠╬╠╣╗╣╦╔╬╠╠╦╩╦╦╬╠╗╬╩╩╠╦╣
╠╠╗╣║╠╦═╔╩╠╝╝╣═╩╬╠╦╠╬╣╩╬╣╦╣╬╦╠╦╠╦╩╔╦╣╩╩╠╣╩╬╩╩╩╦╩╦╣
╔║╦╣╬╦╩╔╠╚╣╠╣╠║╩╦╦╬╦╣╦╣╣╠╩╠╬═╩╠╣╣╬╬╠╬╗╦╬═╠╩║╦╩╠╩╬╗
╚╣╬╠╬╠╩╩╦╦╦╩╔╬╔╣╠╣╣╦╩╣╩╬╣╦╠╬╣╦╬╠╦╠╗╩╠╦╣╦╣╩╬╦╬╦╠╦╠╝
╬╚╬╩╚╬╬╣══╠╦╩╩╦╩╠╠╩╣╦╩╬╬╣╩╩╩╣╠╣╦╬╩═╣╝╩╦╠╠╩╣╠═╦╬╩╗
║╦═╩╬╦╦╩║╣╦╚╠╔╠╣╠╦╣╠╠╦╦╦╩═╣╬╦╠╠╦╣╣╣╣╦╬╠╦╝╦╬╬╝╣╬╦╩║
╠╣╠╠╚╠║╦╩╬╣╚╬╠╠╠╚╦║╬╬╣╩╦╝╠╣╔╦═╗╣╩║╠╬╠╦═╩╩╦╬╩╬╣╠╠╣╗
╚╠╩╣╬╩╬═╦╩╚╠╦╠╦╣╣╩╚╬╗╦╔╬╩╦╬╦╩╔╣╠╩╩╠╠╣╩╬╬║╦╠╠╣═╦╣╬╣
╚╠╩╠╠╦╩╦╠╬╦╦╦╝╗╣═╩╬║╣╩╗╬╣╠╩╠╣╩╣║╦╩╩╠╠╦╔╠╦╬╩╩╦╠╠╩╬╝
╔╦╬╣╠╩╚╠╬╠╦╦╣╬╦╩╦╠╣╬╬╬╦╩╬╬╩╩╣╔╦║╬╣╣╣╦╩╦╩╩╠═╗╦╬╗╦╬║
║╣╣╩╬═╩╩╬╗╬╦╩╬╠╩╠╣╦╬╩╬╦╠╦╠╣╚╦╦╬╠╣╣╬╦╩╣╠╬╩╦╬╣╩╩╠╚╬║
╠║╬╬╠╩╠╩╩╝╚╣╗╬╣╬╩╠╩╬╬╩╬╦║╩╗╚╦╬╠╬╩╠╦╬╩╠╬═╚╦╦═╝╝╦╦╠╣
║╔╬╠╦╝╦╩╠╩║╦╩╣╠╦╦╩╗╣╬╣╣╠╦╦╩╬╦╩╣╬╩╩╩╩╠╦╩╣╦╠╠╦╣╔╬╬║╣
╔╣╠╩╠╦╩╬╗╠╬╣╠╬═╬╦╬╗╚║╠╠╩╬╦╔╩╬╠═╣╦╬╩╩╦╬╬╠╩╩╗╬╠╠╠╬╦║
║╦╦╣╣╦╣╠╣╣╦╠╠╣╦╣╬║╦╠╬╬╩╩╩═╬╠╣╦╣═╣╩╦╦╠╣╬╔╠╬╦╬╩╠╬╦╩╣
╔╣╦╣╠╠╬╣╣╦╠╬╩╩╩╦╚╦╣╣╦╠╬══║╠╠╦╣╦╗╦╦╠╩╠╣╦╩╠╬╠╗╦╦╬╦╠╗
╚╠╬╩╩╦╬╠╦╣╠╩╝╦╬╣╠╔╩╠╬╠╩╬╬╩╠╣╦╣╬╠╦╠╩╝╬╩╣╣╦╩╩╠╣╩╩╬╩║
╚╣╩╦╩╠╬╬╠╦╗╚╝═╦╠╔╣╦╣╦║╣╦╩╚╠╩╣╝╦╠╣╠╝╬╩╠╣╩╬╬╣╬╦╠╬╗╠
╠╣╦╣║╬╣╩╝╦╬╠╬╩╠╣╬╦╣╦╣╬╬╔╠╦╠╠║╠╠╬╣╠╚╣╬╠╬╬╬╦╦╠╠╠╠╠╬╗
╠╠╣╩╗╣╝╦╚╦╣╣╝╠╣╠╦╝╚╦╦╦═╗╠╦╠╬╔╣╦╩╔╬╦╩╣╗╠╩╚╠╠╦╩╣═╣╣╣
╠╣╬╬╬╚╣╦╦╦╬╩╠╩╠╦╬╚╩╩╠╣╠╠╩╦╣╣═╣╩╠╦╬╬╬╦╝╣╣╣╠╬╩╩╬╣╬╩
╔╣╠╩╦╔╔╦╣╩╔╦╬╬╩╩╣╣╠╩═╦╦╬╬╩╠╦╬╬╣╩║╦╩╣╦╩╣╩╬╣╠╬╣╦║╬╦╝
╣╬╬╩╔╩╣╩╠╩╩╩╬╣╩╬╩═╣╣╩╦╠╩╣╣╦╣╩╬╣╦╣╠╩╚╦╚╩╦╣╩╦╣╦╠╩╠╝
╠╩╣╠╣╣╠╣╩╬╣╠╩╝╣║╩╣╗╣╠╩╦╩╩╬╠╩╦╦║╩╦╠╬╬╩╣╬╣╠╦╝╣╦║╦╩╣╣
╠╬╦╩╦╬╔╩╦╬╣╠═╝╩╣╣╦═╔╬╣╦╩╦╠╦╚╣╦╩╬╩╠╣╔╣╣═╣╩╦╦╦╝╣╠╠╠╝
╠╩╣╠╦╣╠╦╩╩╦╩╝╩╦╣╩╣╬╩╠╣╦╣╔╣╠╠╠╬╩╠╬╠╦╚╬╩╣╔╩╬╠╦╩╩╦╠╬╗
║╠╩╬╩╗╦╔╬╩╦╠╬╚╦╩╦╠╬╬╠╩╠╩╩╬╠╬╬╩╣╣╔║╦╣╦╣╦╝╠╗╦╦╦╔╩╣╬╣
╠╬╦╩╬╠╦╠╣╩╩╩╠╠╬╠╠╣╦╠╣╬╬╦║╬╦╬╚╦║╠╬╚╠═╠╩╬╬╔║╬╩╦═╦╣╠╝
╚╚╝═╩╩╩═╚╝╝╩╩═╩╚╝╩╚═╝╩═╩╩═╩╝═╝╚ ╩═╝╝╚═╚═╝╩══╩ ╚═╚█
$ ./maze-solver-spa -s 50x50-06.txt
Path: ESSSEEESSSEESSSEEEEEESESSSESSWWSESSSESEEESE
ESSSSSSESSSSWWSSSSSWSEEEESSSESWSESSESENEEEEEEEE
NENEEESESEENEEESESEEESSEEESS (with length 118)
█╗═╦╗╦══╔══╦╔╔╗╗═╦╔═╗╦╔╦╔ ╦╦═╗╦╗╗╗ ╦╗╗╗╔╗╦╦╦╗═╗══╗
╚╣╠╝╬╣╣╬╦╣╦╩╬╦╩╠╦╦╩╦╩╩╣╬╣╬╣╚╬╬╣╦╗╠╣╠╣╦╔╔╩║╣╝╦╦╣╩╠╗
╠╣╦╣╬╗╩╬║╝╩╦╬═╔╦╚╩╣╣╣╩╩╠╦╦╬╦╣╩╠╠╦╗╣╚╩╝╩╦╝╣╠╩╦╠╦╠╩╗
╔╚╩╩╬╗╚╠╠╩╬╩╠╦╩╣╣╠╦╬╦╠╣╣╬╬╚╠╦╣╣╣╩╠╠╣╠╣╦╦╠╬╦╣╗╦╩╦═╣
╠╗╔╩╣╦╩╣╣╬╬╬╝╦╣╬╠═╦╩╦╝╦═╣╠╝╩╬╩╠╠╩╩╦╬╩╬╬╠╬╠╩╦╬╠╬╔╠║
╚╣╣╠╬╠╬╠╩╩╠╠╠╠╦╠╬╚╠╠╬╩╗╔╠╬╦╝╣╩╦╦╝╬╬╠╬╠╦╣╦╠╣╩╬╦╩╦╬╣
╚╠╠╬╩╦╬╬╩╬╠╩╬╦╣╬╬╠╣╦╩═╩╦╠╬╦║╦╠╠╬╦╠╦╠╩╠╩╠╠╦╗╠╬╩╬╣╩╣
╠╣╦╦╣╦╬╣╩╩╬╣╣╠╬╣╩╩╣╩╦╠╬╦╩╚╦╗╠╠╝╬╦╣╬╩╠╩╣╬╦╩╩╣╩╬╠╬╩╣
║═╬╬╠╬╣╬╩╣╦═║═╦╬╣╦╦╩╩╝╬╦╦═╩╦╠╠╩╩╔╬╣╬╠╬╬╬╩╬╬╠╩╬╬╣╔║
╠╬╬╣╣╬╬╦╬╦╬╦╬╝║╦╠╬╬╠╩╔╚╣╚╬╬╣╬╩║║╚╦╩╚╬╣╩╩║╠╣║╣╬╠╦╠╣
╠╩║╬╣╦╩╦╩╔╦╦╬╬╬╠╩╬╦╣╩╣═╣╠╣╣╬╩╩╠╬╠╬╦╬╦╠╝╠╦╠╣╦╬╦╩╦╗╗
╔╣═╗╬╩╣╝╩╠╬╬╬╬╦╩╩╠╩╬╬╠╦╦╣╬╩╬╣╬╦╬╦╠╣╬╬╦╠╝╬╩╠╣╗╠╦╩╩╗
╠╩╬╠═╩╣╬╠╣╣╦╬╬╩╬╦╠╠╬═╬╣╩╬╠╬╬╩╠╦╩╣╦╦╠╣╠╣╬╣╦╗╣╬╣╩╝╦╗
║╚╦═╔╬╠╝╣╣╣╠╦╬╬╣╬╠╣╣╬╬╬╠╣╣╬╦╬╠╦╩╦╝═╩╬╬╣═╣╗╠═╬╦╦╦╩╣
╠║╩╚═╣╩╩╩╣╣╦╦╦╣╦╦╦╬╬╩╠╝╩╩╬╬╠╣╣╬╦╬╦╠╦╬╦║╩╦╦╦╣╬╬╦╬╬╝
╠╩╬╣╠╬╣╠╦║╬╠╠╩╣╦╬╬╣╣╗╩╠╦╠╠╗║╦╗╠╚╩╩╠╩╠╠╠╠╦╦╬╬╦╠╣╣╦║
╚═╣╩╣╦╣╬╚╠╣╦╬╦╚╣╔╩╩╬╠╬╠╠╦╬╔╩╩╩╠╦╬╠═╩╬╦╦╦╩╠╩╗╠╦╦╠╩╣
╔╬╚╗╬╦╩╠╦╝╣╦╣╣╩╩╚╠╗╦╩╦╠╩╬╣╦═╣╠╣╩╗╩╣╬╠╬╩╦╣╩╗╬╦╦╦╣╬
╠╩║╦╣╣╣╠╦╦╦╣╣╠╬═╦╠╠╦╩╩╩╬╦╩╩╬╬╦╣╩╦╣╣╦╚╣╦╩╣╣╠║╦╩╦╬╣║
╚╩╠╣╦╦╠╠╠╠╦╩╦╬╗╗╚╦╠╬╣╣╣╣╚╚╗╩╠╣╠╠╬╣╦╦╦╔╠╩╠╦╚║╠╬╣╬╬║
╩╩╣╩╣╠╠╬╣╬╬╦╦╠╩═╦╝╦═╩╬╬╩╣╦╠╔╣╔╦╚╬╦╬╩╩║╠╬╦╦╬║╬║╣╣║
╠╗╗═╦╩╠╩╣╩╠╩╩╩╣╣╬╬╦╣╦╠╦╩╬╩╦║╬╦╩╩═╠╣╝╗╦╬╣╠╩╔╣╠╗╠╬╬╣
╚╚╣╔═╗╠╦╔╣╝╣╠╣╦╣╣╬╬╣╦╣╬╬╚╣╣║╠╝╬╔╩╬╠╬╚╬╬╠╦╬╗╩╩║╚╠╬╝
╔║╬╣╬╬╠╣╬╦╩╦╗╦╗╠╠╠╦╣╣╠╚╣╬╬╣╦╦╬╗╬╦╣╦║╔═╠╬╩╣╠║╣╬╔╗╬║
║╠╬╠╦╦╚╠╠╠╩╩╩╬╣╬╠╝╦╠╦╠╬╦╣╬╩╬╔═║╬╬╬╗╠╠╣╬╬╠╠╦╦╩╬╬╩╩╣
╚╬╦╩╬╦╩╝╬╠╦╠╣╬╬╩╠╩╬╣╚╩╩╩╦╣╬╣╩╦╬╠╦╠╩╦╦╦╚╩╦╝╠╗╩╦╬╚╣╣
╚╬╠╦╩╗╩╦╚╠╩╠╠╩╠╣╠╩╠╣╬╦╠╩╩╬╠╣╠╬╦╬╦╝╦║╦╬╠╔╠║╚╬╩╣╣╬╣╗
╠╠╣╠╗╣╣╦╬╦╚╦╔╣╬╦╬╔╩╦╩╩══╗═╦╬╩╦╦╬╠╣╠╠╠╬╦╦╩╬╩╝╬╦╣╣╝
╠╠╦╬═╣╩╠╬╬╣╩╠╣╬╠╦╩╦║╣╣╦╣╣╦╠╦╦╦╦╣╦═╠╣╬╬╝║╠╝╬╬╔╔╦╬╣╣
╣╠╚╩╩╣═╣╬╬╬╣╩╬╩╠╦╣╬╠╩╩╦╩╦╩╬╩╝╬╬╗╣╠╠╩╣╩╗╩╩╩╣╣╠╦╬╠╣
╦╩╣╠╣╩╩╠╦╬╦╣╩╣╣╬╠╩╣╬╦║╦╩╠╦╣╣╝╦╬╣╠╣╔║╣╣╣╩╠╣╣╩╦╔╗╦╣
═╣╦╦╣╦╩╣╣╠╣╠╬╬╗╝╩╠╦╣╬╣╦╦╦║╩╠╠╣╠╬╠╦╔╣╣╩╗╬╠╩═╦╠╦╣╝╣
║╦║╣╣╦╗╣╩╔╠╬╦╠╦╩╬╦╬╦╠╬╠╠╣╬╣╦╬╣╣╣╦╗╠╠╩╠╩╠╩╣╦╩╣╩╣╩╦╣
╔╦╣╣╣╣╦╬╠╦╦╣╠╩╗╦╣╬╣╣╦╬╠╩╬╦╝║╠╠╠╦╦╦╬══╗╦╣╣╣╠╦╦╠║╩╬╣
╠╠╬╩║╠╣╠╠╦╬╚╦╣╦╦╦╠╣╦╦╠╩╝╦╦╠╦╣╩╣╗╣╣╩╬╩╦╗╦╠╚╣╠╬╩╣╩╬╗
╠╝╠╬╬╬╦╣╬╠╣╦╣╬╩╩╚╩╣╬╬╦═╦╬╬╔╩╦╦╦╣╦╩╠╩╦╠╠╔╦╦╦╝╠╦║╝╩
╔╬╠╦╩║╚╬╣╦╚╩═╩╣╣╩╠╩╗╝╣╣╠╣╠╩╦╬╣╬╦╠╩╬╔╣╠╬╦╠╩╬╣║╩╣╠╠╗
╠╦╦╔╦╣╩╠╠╔╩╠╠║╚╬╬╠╩╦╬╣╠╬╬╬╩╣╚╦╝╦╣╠╦╣╦╬╔╬╠╬╩╦╦╬╠╠╠
╠╦╣╬╠╠╩╬╩╩╩╬╬╬╦╠╣╦╠╠╦╠╣╦╣╣╩╩║╩╩╣╩╗╩╬╦╠╗╦╦╔╣╦╩╩╬╠╠╣
╚╬╣╬╬╔╬╣╔╩╣╬╠╩╣╬╣╣╠╣╗╠╣╠╩╠╩╝╠╦╩╣╠╦╣╣╩╠╣╠║╚╦╠╦╬╠╣╦╗
╔╬╩╬╦╦╩╠╬╔╗╣╠╣╩╬╩╦╝╩╣╚╦╣╔╬╬╩╣╗╗╠║╩╗═╣╬╦╦║╔╬╠╣╣╣╬╠╣
╠╩╣╠╠╣╩╬╣╬╬╗╩╔╠╩╩╦╔═╗╦╬╝╦╔╣╩╦╠╣╩╣╬╠╠╩╠╣╩╦╠╠╠║╩╬╩╩╣
╔╩╦╩╗╣╦╝╠║╠╣╦╠╣╩╣╬╩╣╬╬╦╣╣╣╦╩╩╩╝╩╦╦╦╬╦╠╩╩═╠╗╣╩╠╦╬╩╗
╔╣╠╦╦╦╬╦╣╦╣╩╦╣╩╠╩╦╬╣╔╩╬╩╩╠╠║╠╬╠╩╦╬═╬╠╦╣╬╬╬╦║║╝╠╣╦
╠╠╩╬╦╦╠╠╩╣╦╣╦╚╠╦╣╗╩╩╩╣╬╣╬╦╩╬╩╩╦╬╩╗╦╦╦╬╦╩═╠╩╣╦╚╩╬═║
╠╦╦╬╠╣╔╔╠╬╩╦╩╠╦╠╚╠╬╩╦╣╦╠╩╬╦╣╦╩╠╣╦╩═╠║╠╬╠╦╦╠╬╦╩╦║╣║
╠╦╝╦╩╠╣╣╬╠╠╣╠╔╠╬╦╠╦╩╣╦╩╠╬╣╣╚╠╦╠╠╔═╩╠╠╦╩╬║╬╔╬╠╩╠╩╠║
║╩╣╩╣╣╣╣╝╣╣╬╩╩╠╦╦╩╗╣╩╦╩╠╬╬╠╠╠╗╣╣╠╬╩╩╝╩╬╣╬╠╦╬╦╩╬══╗
╠╦╩╬╚╩╝╩╠╣╬╔╦╣╦╬╩╬╣╦╠╠╬╦╦╩╣╦╣╣╩╬╠╩╠╩╠╬╬╦╣╠═╩╦══╩║║
╚═╝╚╩═╩╝╚╩╝╝╩╩ ══ ╩╝╩╩ ═╚╩╝╝╩═ ╩╩╩╚═ ╩╩╩╩ ╚══╩╩╝╩█
$ ./maze-solver-spa -s 50x50-07.txt
No path
█╦╗╦╔╗═╔═╗╦╦╗╔╦╗╗╔╔╦═╦╦╗╔╔╗╦╔═╦╦╦═╦╦╔╗╗╔╔ ╔╔╔╦═╦╗╗
╚╝╝╩╦╠╣╝╬╦╬╦╣╣╚╠═╩╣╠╩╦╣╩╬╣╩╩╚╝╬╠╩╠╩╦╬╠╠╦╬╦╦╗╔╬╠╚╣╝
║╦╠╬╦╩╬╠╬╣╦╬╣╩╚═╣╦╣╠╩═╦╣╩╬╬╩╠╬╬╩╬╚╩╩╣╠╦╔╠╬╩╬║╣╠╣╣╣
╠╬╦╣╦╩╩╩╬╦╩╬╠╚╩╠╦╬═║╠╬╩╔╗╩╠╣╩╦╔╬╦╦╩╣╗╣╦╠╦╦╗╔╠╦╗╠╦╝
╠╩╣╦╩╠╦╩╣╣╔╠╠╚╩╬╩═╦╦╣╬╦╬╦╣╣╬╠╦╝╬╬╩╩╠╦╦╝╣╦╬╬╬╠╦╣╬╦╗
╠╬╦╦╦╣╦╗╩╦╬╬╩╚═╝╩╠╠║╠╦╣╦╣╩╩╠╠╩═╬╣║╣═║╠╬╬╠╦╠╬╬╠╠╦╠╣
╚╣╦╩╔╦╩╬══╦╠╔╠╗╠╬╝╠╠╦╩╠╩╠═╠╗╣╦╝╬╦╬╩╬╚╦╔╗╬╦╦╦╬╚╬╠╩╗
╔╩╠╦╬╣═╦╠╣╠╣╦╣╗╠╠╬╦╗╚╩═╣╦╠╠╠╝╦╩╠╬╬╩╩╬═╬╠╣═╩╬╣╠╠╣╬╣
╚╣╩╦╠╠╩╣╔╬╬╣╠╩╠╣║╬╠╗╩╩╝╗║╣╩╩╣╚╩╣╠╠║═╬╬╣╠╩╣╣╦╠╦╦╠╦╣
╠╠╦╩╦╬╬╣╩╬╠╩╬╣╬╣╣╩╦╩╩╩╣╩╦╠╣╩╩╠╬╠╩╬╝╠╣╠╔╬╬╣╦╝╠╩╩╠╦║
╔╦╩╩╠╬╬╩║╣╣╦╬╬╣╣╩╠╣╣╦╬╩╦╠╣╝╚╝╬╣╩╠╣╩╣╦═╦╣╩╦╚║╣╦╬╩╦
╚╣╬╬╩╦╦╣╣╬╠╦╝╠╔╦╬╦╬╠╦╣╠╦╗╣╠╩╩╔╦╬║╣╦╦╣╣╩╠╠║╦╬╬╣╠╣╩╗
╠╣╠╠╔╩╦║╬╬╣╩╣║╣╩╩╝╠╠╦╦╠╣╠╠╔╩╬╬╦╬╠╦╣╩╩╬╬╠╣╣╦╦═╬╩╦╣╣
╠╠╠╦╩╣╗╦╦╦╦╩╦╦╣╬╬╬╠╚╩╩╣╩╣╬╦╦╠╠╩╦╠╚╩╣╣╠╔╣╩╬╣╗║╬║╠╠╗
╚╦╩╬╠╩╦║╗╩╣╣╬╦╦╣╦╠╣╠═╚╬╦╩╠╬╩╠╬╬╬╣╬╣╠╬╣╣╠╠╩╩╬╩╠╩║╩╣
╔╩╦╬╠╬╝╣╦╠╦╣╝╬╦╩╦╠═╩╩╦╬╬╠╝╦╦╦╬╠╝╬╠╣╣╠╩╣╠╩╩╣╣╬╠╣╣╠╗
╔╣╠╬╣╠╣╣╠╠╬╗╣╗╣╩╣╠╠╔║╠╣╦╩╩╬╬╦╔╦╗╠╬╠╔║╠╬╬╠╩╩╝╚╩╠╠╩║
║╠╣╩═╣╠╦╩╦╬╗╬║╬╚╣╣╠═╣╬╣╦╦╦╦╦╬╬╔╩╚╬╣╬║╠╚╬╩╬╩╠╩║╦╦╬║
╚╣╗╣╬╗╦╬╬╣╣╝╠╝╠╝╩╠╦╬╣║╬╩╠╬╦╩║╠╦╩╠╬╣╩╣╬╠╬╣╣╬╬╣╦╗╦╦╝
╠╬╩╬╬╩╩╠╩╦╦╦╩╬╬╠╚╦╠╠╬╠╦╦╣╝╬╣╠╬╩╩╬╠╩╩╩╣╚╩╦╣╣╣╠╦╣╩╩║
╔╬╬╬╩╚╠╬═╩╣╩╣╬╦╩╠═╣╬╠╬╩╬╩╦╣╠╠╬╦═╦╣╣╠╩╠╠╣╦╦║╦╦╩╠╚╦╝
╠╣╩╬╩╠╠╬╠╩╣╠╩╠╦╬╦╠╠╗╠╣╣╦╣║═╦╣╦╬╣╦╣╦║╠╬╩╔╬╗╬╔╗╚╦╬╠╗
╚╗╠╩╠╣╠╬╩╣╝╩╩║╩╗╣╠╚╠╣╝╬╠╠╝╠═╠═╩═╦╬╩╠╬╠╣╣╬╚╠╩╦╠╬╬╦╝
╠╦╠╦╬╬╦╦╬╬╣╠╦╩╦╚╬╝╦╗╣╠╝╩║╝╩╩╣╦╦╣╔╚╦╠╬╩╦╠╩╣╠╠╠║╣╝╠
╠╬╬╦╩╗╣╬╠╬╩╬╗╩╦╬╗╦║╦╣╠╩╗╬╩╚╦╣╩╬╬╬╔╔╬╔╣╚║╦╣╠╣╦╩╬╬╩╣
╔╩╩╦╠╠╣╦╗╣╣╔╦║╝╬╗╩═╠╦╠╝╩╩╬═╠╦╠╦╠╬╩═╣╠╦╠╔║╦╦╣╩╬╬╬═╝
╚╠╣╠╔╣╬╩╣╣╦╠╦╦╦╦╠╩╩╠╩╣╦╝╦╩╣╣╗╩╦╠╦╩╔╦═╦═╠╠╦╣╩╦╩╠╠╩╣
╚╣╠╚╬╦╠╣╠╣╣╠╣╠╬╠╠╩║╠╦╩╦╩╩╩╠╦╗╚╬═╣╣╬╩╩╬╣╬╩╦╣╠╩╣║╣╦╗
╚╣╬╝╦╦╩╦═╣╠╣╬╦╔╣╣╣╬╠╬╦╠╩╣╦╩║╣╠╣╣╦╠╩╣╬╦╦╩╬╬╩╬╩╩╚╦╣╗
╚╦╠╣╠╩╣╚╣╬╣║╩╚╩╬╣╦╠╦╬╣═╠╦╦╬╦╣║╦╬╩╚╩╠╦╩╠╬╩╬╩╦╦╠╣╦╩
╚╩╩╦╔╦╦╬╚╣╣╣╣╣╣╬╗╣╬╣╠╬╦╠╩═╬║╣║╠║╬╬╝╬╦╬╣╦╩╬╩╠╣╗╩╣╠╣
╠╠╠╦╠╣╦║╩╦╩╬╦╣╬╝╩╣╣╠╣╩╗╩╩╬╠╣╬╦╦╣╣╗╠╠╣╣╬╣╠╝╣╦╩╚╩╠║║
╠╦╣╣╬╦║╠╦╣╗╦╦╔╬╦╝╠╣╣╠╠╠╩═╬╬═╬╬╬╦╦╬╦╣╣╦╦╠╠╩╠╦╩╩╚═╬╗
╔╚╣╣╝╩╣╩╩╣╦╣╠╬╬╣╬╣╩╠╣╣╝╩╬╦╣╠╠╬╬╦╣╦╩╬╠╩╚╣╔╗╩╠╬╦╦╣╠╗
╩╩╚╣╦╦╣╬╗╩╣╩═╣╬╠║╩╠╩╣╣╦╠╩╣╠╩╠╦╠╦╣╚╩╬╗╬╣╩╦╣╚╣╩╦╝║╣
║╩╩╣╣╠╦╬╣╣╩╬╬╩╦╠╩╦╩║╠╗╩╬╠╣╝╬╩╣╣╬╠╣╠╦╗╣╣╠╬╗╝╩╩║╣╦╣║
║╣╦╩╠╩╣╬╣╬╬╝╦═╦╬╬║╩╣╩╩╣╩╣╣╬╬╠║╣╦╬╩╠╩╩╝╗╣╬╣╣╣╦╦╠╠╦
╔║╠╦╬╔╚╩╝╣╩╦═╦╩╠╩╩╬╣╬╩╣╦╦╠╬╠╬═╣╚╠╬╩╦╩╦╠╣╬╬╩╣╠╬╣╬╦╣
║╣╦╣╠╩╦╦╩╦╠╦╩╝╠╠╠╣╗╠╠╠║╠╣╣╚╣╬╬╠╣╬╩╩╦╩╬╣╩╠╦╩╬╣╚╝╔║║
╚╩╬╩╔╦╩║═║╔╠╠╠╬═╬╣╦╬╬═╚╣╠╣╬╩╦╣╩╣╠╦╬╔╬╠╣╠╩╠╣╚╩╦╬╗╬║
╚╦╠╬╬╩╚╗╬╬╬║╬╩╬═╬║╚╚╗╦╣╩╦╩╔╩╠╣╠╦╦╠╬╣╚╬═╬╚╣╬╦╬═╣╣╩╣
╠╣╦╗╬╝╠╠╬╬╣╗╠╬╝╣╩╬╣╩╦╣╦╩╝╣╣╣╠╝╦╩╣╣╬╦╦╦╩╦╣╠╬╩╠╠╩╦║╣
╔╣╬╬╦╦╚╠╔╦╬╦╣╗╩╔╣╬╠╦║╬╚╩╣╠╦╠╩╠╣╣╠╩╦╦╣╬╬╠╠╦╠╔╣╬╩╠╩╣
║╬╣╩╩╬╦╩╩╚╬╦╬╣╩╣╗╔╣╦╩╠╣╣╠╝╣╬╦╦╣╠╠╩╩╠║╣╝║╩╠╠╣╦╬╣╠╩╝
╚╩╣╩╝╩╠╠╣╣╠╠╣╬╠╦╠╠╗╩╠╦╣╣╣╬╬╩╠╩╩╣╣╬╣╬╠╩╣╠║╚╣╬╠╣╦╠╬╣
╔╠╦╣╣═╣╬╦╣╬╦╠╬╬╬╩╚═╬╣╠╩╠╣╩╦╦═╬╠╬╠╬╬╦╦╬╣╣╣╦╗╠╬╦╣╬╦╣
║╦╣╠╠║╣╦═╠═╣╗╣╣╦╠╦╣╠╦╠╬╦╠╠╝╣╦╦╬╔╠╠╬╝╣╣╩╠╬╠╦╦╩╣╩╬╬╣
╠╔╩╠╩╦╝╣╬╬╣╠╣╦╦╦╣╬╠╦╦╩╬╬╦╦╔╬╬╦╔╦╩╔╠╬╠╩╣╣╬╗╣╠╠╠╣╠╗╗
╔╩╩║═╣╠═╬╩╦╣╩║╣╬╣╩╣╣╔╬╚╦╦╦╦═╩╠╣═╠╝╬╩╠╣╦╦╦╣╠╠╠╣╣╚╦║
╚╝╝╩╝╝╚══╩╝╝╝═╝═╚╚╩╩╚ ╩ ╩╝╩═╝╚╩╩╩╩ ╩═ ╚╝╚╝╩╝╩═╩╩╝█
$ ./maze-solver-spa -s 50x50-08.txt
No path
█╔╔╦═╦╦╔╦╔╔═╗╦╦╦╦╗═╦╦╗╔╦═╔╦╔═ ╦╔╗╔╦╗╦═╗═╦╦ ═╦╦══
╝╬╦╬╔╬╠╩╣╗╠╣╚╩╦╠╬╣╩╩╦╗╦╬╣╩╠╬╬╬╠╦║╬╩╩╩╦╬╠╠╣╬╦╩╣╣╬
╣╠╬╦╣╦╬╦╠╔╣╣╝╦═╣╣╩║╬╩╬╣╬╠╠╬╬╩╣╬╦╣╠╬╠╬╠╣╬╩╦╬╬║╬╔╣╗
║╦╦╠╚╠╦╣╦╠╣╣╩╬╦╩╣╦╝╣╬╣╠╣╣╣╩╣╬╠╦╦╩╠║╬╠╦╣╬╩╣╩╣╠╩╝╠╦║
╚╩╚╣╠╣╬╣╣╠╣╠╬╩╗╩╣╩╠╦╦╣╠╬╗╬╠╦╩╔╠╩╩╦╬╠╠║╗╬╣╬╬╣╩╣╔╣╬╝
╠╩╠╬╩╬╬╔╣═╣╣╩╦╣╦╩╩╠╬╔╩╩═╬╦╦╦╬╠╣╦╬╦╣╦╦╔╣╦╬╝═╠╬╦╠╦╦║
╚╠╣╩╦╦╣╣╣╩╬╣╣╦╣╠╬╬╩╠╠╣╗╔╠╣╩╣╩╣╩╠╣╬╦╬╣╠╬╣╠╠╠╝╔╬╩╣╠║
║╩╬╦╠╠╦╩╠╠╦╦╠╩╣╩╣╩╦╝╦╔║═╩╬═╩═╦╩╬╠╚╣╦╠╩╬╠║╬╔╠╦═╦═║╗
╠═╩╬╩╠╦╦╠╬╦╣╩╦╠╚╬╣╬═╦╬╩╩╠╠╠╦╩║║╣╩╠╬╩╩╠╩╣╩╗╩╩╩╬╝╚╩╣
╠╦╠╬╣╔╣╦╣╣╠╣╩╣╩╣╬╩╔╠═╣╠╦╬╠╩╬╚╩╬╩╬╬╚╬╣╩╚╚╦╩╠╣╝╣╠╣╦╝
╠╩╬║╩╬╗╠╬╬╣╦╣╠╣╣╩╦╩╦╬╣╣╬╦╣╩╦╬╣╠╩╚╔╠╗╦╣╣╬╩╩╦╦╣╣╦╬╠╣
╚╦╩╠╬╩╩╦╗╔╣╠╠╣╠╗╔╠╩╦╠╠╦╬╦╬╩╦╣╠╦╦╦╩╠╩╩╠╬═╚╬╬╣╠╩╬╠╠╝
╠╠╠╬╬╠╬╩╦╬╣╦╩═╠╣╔╦╠╬╩╦╣╦╩╩╬╠╠╦╣╚╦╦╩╣╔═╣╬╩╩╣╝╬╩╬╣╠╣
╔╬╦╣╩╗╠║╦╗╦╦╣╠╣╗╬╦╔╦═╬═╣╩╣╩╬╣╩╦╝═╠╬╠╬╩╩╚╬╠╬╠╦╣╚╣╩╝
╔╦╠╚╣╬╩╠╬╦╠╠║╠╠╬╦╩╩╬═╣╬╠╦╣╦╩╬║╬╦╦╣╩╦╔╠╦╦╗╩═╗╬╣╩╦╦║
╔╗╩╠╩╬╣╬╣╠╣╦╣╩╠╗╩╣╠╬╠╠╩╦╣╦╩╣╗╬╣╦╩╠╬╦╬╩╦╦╩╬╦╩╠╔╣╣╦╝
╠╦╩╗╩╬╣╦╬╦╩╦╦╚╬╔╩╠╬╣╠╬═╦╠╦╦╣╗╣╦╬╩╦╩╬╬╔╣║╠╬╬╠╣╠╠╦╬
╣╠╠╬╠╦╠╚╣╝╦╣╠╬╩╬╩╠╗╬╦╩╝═╬╦╬╝╬╠╣╠╬╩╩╣╚╦╠╩╦╣╠╩╔╠╚║║
╚╔╬╬╦╠╝╦╣╠╦╠╩╩╠║╩╣╬╠╩╠╣╣╣╗╩╬╬╦╚╝═╬═╔╦╩╬╝╬╠╬╣╦╔╗╣╩╗
╠╣╠║╬╔╩╠╩╦╩╣╣╬╔╬╠╬╣╣╬║╣╚╣╬╝╦╩╣╠╬╠╦╩╬╩╦╦╠╩╦╠╣╦╣╣╚╠╣
╠╬╬╣╩╣╦╣╦╠╠║╦╣╬╣╬╠╚═╔╩╠╬╣╩╩╩╬╚╣╣╠╠╦╬╣╠╦╩═╣╬╬╩║╬╚╬║
║╣╩╩╦╠╣╠╠╩╠╠╬╬╩╬╦╩╬╬╣╬╠╣╬╠╦╝╬╠╚╬╬╔═╩╠╬╬╬╩╠╠╬╬╦╬╬╬╗
╠╬╬╗╣╣╩╠╦═╝╦╬╠╦╬╬╦╬╬╣╠╠╣╦╣╦╣╬╣╦╔╝╬╠╣╦╣═╬╬╬╠╣╠╠╬╬╣╗
╔╦╠╦╦╬╬╬╦╠╠╣╣╬╠╣╦╠╠╣╩╣╣╠╠╔╬╩╣╣╩╠╬╩╗╣╬╠╩╔╩╣╣╔╬╠╬╩╬╗
╚╦╦╣╬╔╩╬╦╣╬╠╠╠╬╣╠╣╦╠╣╬╩╣╬╬═╦╩╬╦╬╩╬╣╦╣╬╠╝╣╬╗╣╣╬╩╬╠╣
╠╬╚╠╠╚═╣╦╦╠╩╦╠╩╝╬╩╣╩╠╣╠╩╬╠╩╦╬╠╣╦╣╦╬╣╠═╬╩╬╬╦╣╦╬╣╦╬╣
╠╔╠╩╣╣╦╠═╬╣╩╩╠╬╩╦╠╦╗╠╦║╠╔╬╝╦╦╗╠╠╝╠╠╣╠╣╣╦╩╩╩╦╦╠╦╣╦╣
╠╣╬╣╬╦╩╦╗╠╬╗╦╦╩╦╦╔╦╦╗╣╦╣╦╠╬╠╬╩╩╠╠╗╩╣╬╩╠╦╠╣╝╩╦╩╣╩╩╝
╠╦╬╬╦╩╠╬╣╠╦╠═╦╣╩╩╠╣╔╦╩╩╣╣╣╣╦╝╬╬╔╬╔╬╣╬╬╠╣╦╬╗╣╝╬╗╩╣║
║╠╬╬╬╦║╠╣╣╠╬╣╣╠╣╦╣╬╩║╣╬╬╚╩╠╩╩╦═╠╣╔╩╣╩╠╦╠╦╠╠╠╠╦╬╣╣╗
╚╣╠╩╩╠╠╣╩╦╦╩╝╠╩╬╩╣╩╠╩╩╩╩╝╬╦╩╚╚╔╦╦╬╩╦═╩╦╦╬╣╩╩╬╬═╬╔╣
╚╬╗╝╩╣╬╦╬╬═╩═╬╩╣╣╦╬╦╣╦╦╦╠╣╬╬╬╩╬╠╠║╬╩╠╬╗╩╬╬╬╩╦╣╩╗╩╣
╔╬║╝╩╬╦╠╩╣╣╦╬╠╦╦╣╣╝╠╚╬╩╩╗╦╦╣╣╠╦╦═╬╩╬╣╩╬╦╬╬╩╬╬╩╦╬╩╣
╠╣╩╠╬╚╠╠╩╬╣╦╣╦╚╩╠╦╩║╣╣╣╚╩╬╬╦╬╦╣╦╠╠╦╩╬╩╣╩╣╠╠╗╦╬╦╩╗╣
╔╣╣╣╬╝╦╠╣╬╬╣╩╠╠╩╠╦╣╠╬╣╦╦╬╣╣╠╦╣╠╬╦╣╔╦╬╬╣╦╩╦╬╩╠╠╠╠╩╣
╔╩╠╩╠╬═╬╬╩╬╔╣╩╬╣╔╠╝╦╩╣╦╬╣╩╦╩╬╩╣╦╠╩╦╣╩╦╩╣╬╬╩╩╣╬╩╩╚╝
╠╣╦╦╩╦╬╣╦╦╣╠╗╣╣╣╠╬╣╣╣╦╩╣╦╬╠╬╩╣╬╬╣╣╬╩╩╠╠╬╦╦╦╣╦╝╠╠╣
║╦╗╩╬╣╚╩╠╩╬╠╦╦╩╩╠║╩╬╣╦╩╩╣╦╬╠╠╚╠╠╦╣╦╬╩╣╬╩╬╣╩╠╠╦╠╗╠╣
╬╬╦╩╣╣╠╣╠╬╣╩╣╠╬╩╠╩╚╦╣╬╬╦╠╣╩╦╣╬╗╦╬╠╬╣╣╦╗╠╠╔╩╩╠╦╗╝╣
╠║╣╠╦╠╦╦╩╩═╩╦╩╬╣╠╠╩╝╣╩╗╦╩╠╦╦╬╣╠╬╦╬╬╔╚╠╝╩╠╦╠╩╣╩╦╦╬╣
╬╬╩╬╩╠╬╩╠╚╦╦╚╩╠╬╝╣╦╦╦╬═╩╠╦╬╣╠╣═╩╣╬╠╦╣╩╦╬╠╦╩║╬╦╚╬╣
╚╣╦╬╣╣║╠╠╠╬╠╠╦╠╬╣╦╦╦╠╣╬╦╦╩╬╦╩╝═╠╠╦╩╦╩╣╠╦╦╩╔╬╩╠╦╬╦╝
╔╠╠╩╬╬╬╬╦╠╬╠╬╩╬╦╩╬╣╩╠╬╬╦╦╣╩╠╦╦╦╗╦╠╠╣╠╔╩╣╠╦╬╔╩╠╬╦╩║
╔╠╬╦╠╬╣╩╔╦╦╣╩╩╣╬╣╠╦╣╦╚╩╩╩╠╩╦╬╦╝╬╬╬║═╦╣╩╚╣╩╩╝╩╬╦╣╠║
╚╬╠╦╩╠╣╠╩╦╩╣╬╬╠╩╠╩╩╦╦╬╦╩╣╩╬╬╦╣╩╦╩╝╬╣╬╝╦═╠╦╬╣╝╣╦╩╣╗
╔╩╣╩╣╣╩═╬╣║╠╔╬╩╣╬╦╩╬╔╬║╩╬╠╩╬╦╠╠╦╬╠╠╦╩╣╣╦═╔╩╬╔╦╦╗╠╗
╠╣╬╦╬╠╠╩╠║╬╚╬╬╬╦╣╦╬╣╩╩║╦╝╦╣╣╝╬╝╦╬╬╬╦╦╬╬╩╬╦╠╝╬╦╩╩║
╚╩╬╠╔═╦╦╣╣╩╠╬╣╦╩╦╬╩═╩╠╦╦╬╦╩╦╩╬╬╩╣═╩╦╠║╦╣╣╩╦╣╣═╬╩╠╗
╔╬╦╬╣╦╩╬╣╩╩╚╩╣╬╣╩╦╣╬╩╦╦╣╣╠╦╔╔╠╠╦╔╣╣║╦╬╠╦╣╦╬╠╣╬╠╦╩╗
╚╝╚╩╚ ╝╚╝═╩╚╩╩╩═══╝╝╩╩ ═╚ ═╚ ╝╩═╝═╚╚ ╩╝══╝╩═══╩╚╚█
$ ./maze-solver-spa -s 50x50-09.txt
Path: SSESEESSSESEESSSWSSSSSSSESSEEESSESSSSEEEESWSWSSSW
SWSSSEESESENNEESEEENEEEEESENENEEENESESEEESSESESSEESSE
SSESESSSSENEESENNNENEEESSSSS (with length 130)
█═╦╗╦╗═╦╔═╗╦╦╗╗╔╔╔╗═╗╦╔╔═╦╔╔═╗╗╦╗╗═╔╦╦ ╦╔╦╗═╦╦═╦╔
╠╣╗╩╬╬╬╩║╣╦╩╬╦╬╩╗╩╠╠╠╦╣╝╬╩╠╦╦╩╠╔╠╣╠╦╦╩╚╩╬╗╩╦╬╣╦╬╣╣
╠╦╦╠╦╦╣╠╦╠╠╦╩╦╠╠╣╬╣╦╠╦╩╬╠╣╣═╠╦╠╠╩╔╗╠╦╣╣╠╬╩╣╩╣╠╠╣╠╣
╠╩╦╬╬═╬╩╔╣╩╣╠╬╣═╠╬╬╦═╩╠╬╩╩╩║╠╦╣╣╣╠╬═╦╦╬╩═╠╣╬╦╩╩╣╦╝
╠╣╠╬╩╠╦╩╬╠╠╩╬╦╬║╠╣╩╬═╣╩╦╩╩═╠╬╩╗═╠╬╩╬║╠╚╬╗╣╬╦╦╠╬═╦╝
║╬╚╬╣╗╩╠╠╔╣╠╩╠╦╬╦╩╣╦╣╣╚╩╠╠╦╬╠╠╣╦╬╬╣╠╣╣╠╠╩╣═╠╣╦╦╣╦╗
╔╠╬╩╦╠╣╩╩╣╚╣╬╣╬╠╦╬╩╗╩╣╣╠╠╣╦╬╠╬╣╦╚╠╩╦╠╠╠╬╠╦╦╦╠╗╠╩╬║
╠╦╩╦╩╦╣╬╣╝╩╠═╬╣╬╬╣╣╬╦╬╔╦╗╩╦╠╦╣╠╦═╗╠╣╠╠╬╬╣╬╬╦╣╬╦╬╦╣
╚╦╬╩║╦╬╬╩╦╣╠╬║╦╩╦╠╠╣╦╬╦╩╠╦╣╣╣╣╦╠╬╩╩╠╩╦╦╠╬╩╣╩╦╠╠╩╠║
╔╣═╠╬╬╠╩╦╠╣╠╩╦╠╠╩╬╦╗╦═╦╔╠╠╦╝╣╦╠╣╠╠╦╩╣╗╠╣╠╩╬╬╦╦╔╩╠╝
╠╠╠╬╦╠╩╣╬╣╦╦╠╣╬╠╦╬╣║╠╝╩╠╦╣╬╦╬╦╦╦╔╣╩╩╠╠╣╣╦╣╣╠╣╦╣╬╦╣
║╔═╩╬╠╬╠╣╬╠╠╣╬╦╩╦╦╬╩╩╠╩╦╣╠╩╣╔╬║╩╣╦╣╠╩╔╩╗╝╣╬╠╦╬╦╣╩╣
╠╦╬╦║╠╬╠╠╣╬╬╔╗╬╩╝╣╠╠╦╬╬╬╬╠╩╣╣╔╝╩╠╬╗╬╦╣╦╚╣╝╬╦╗╦╩╬║╝
╠╬╩╠╩╠╦╠╦╩╚╦╩╠╠╔╬╦╦╦═╩╬╦╩╩╦╩╦╬╩╩╬╣╠╩╦╣╔╩╩╬╠╬╬╣╬╣╠╝
╠╦╬╩╣╠╬╦╩╠╩╩╠╠╠╩╠║╠╦╣╠╦╣╦╠╩╦╝╣╔╗═╣╠╣╣╬╩║╩╬╦╦╠╩╦╬╔╗
╔╣╗╣╩╣╣╬╣╔╦╣╬╬═╠║╝╣╩╩╣╩╣╬═╦╦╣╦║╣╠╠╣╦╬╗╦╬╠╣╠╠╣╬╬╠║╗
║╬╠╩═║╣╩╦╩╣╣╗╠╣╦╩╠╩╩╦╦╦╬╔╩╣╬╩╠╬╣╣╠╚╣╬╦╦╩╣╦╠╠╩╩╩╩╬╝
╚╦╦╦╬╚╦╔╦╬╠╣╦╦╔╬╩╬╩╩╬╣╬╔╦╦╝╩╬╦╣╠╠╠╦╠╠╩╠╬╬╣╠╝╬╦╩╩╠╗
╠╬╦╝╦╦║╦╣╠╦╠╔╣╣║╦║╦╣╦╝╝╠╩╠╦╣╦╩╬╣╗╔╦╩╦╩╬╣║╠╩╩╬═╩╠╣╣
╚╣╬║╠║╬╬╬╣╚╬╩╬╚╠═╬╠╣╣╣╣╠╠╠╠╣╩╣╬╩╬╬╩╝═╩╣╬╩╝╩╩╚╠╬╣╠╗
║╬╦╦╣╬╚╦╠╣║╣╣╩╩╩╠╠╦╠═╩╠╣╦╦╩═╦╦╠╩╩╩╠╬╦╦╚╣╩╦╦╩╬╚╣═╣╣
╠╠╠╩╩╠╩╦╚╬╦╩╩╠╬╦╬═╬╣╩═╦╚╩╬╩╠╠╬╩╠╣╣╝╠╝╠╬╣╠╬╩╝╦╚╠╝╦╣
╠╠╚╠╚╬╩╣╩═╬╩╝╔╩╠╩╩╬╬╬╩╬╣╠╦╗═╦╦╩╠╠╚╬╩║╣╔╬╝╬╬═╔╩╣╠╩╝
╩═╣╣╩╩╣╣╩╬╣╬╠╩╦═╦╣╬╦╣╦╣╬╠╠╦╠╦╬╠╝╦╦╩╣╣╠╠║╩═╬╠╠╣╦╣╗
╠╠╬╦╬╩╩╠╣╠║╠╣╣╣╗╗╩╗═╠╩╔╬╩╠╩╣╣╦═╦╔╣╦╝║╠╦╬╦╣╔╣╬╬╝╩╠╗
╔╦╣╠╣╬╝╦╬╦╩═╦╩╣╦╣╚╣╝╠╬╩╣═╠╠╝╠╩╬╩╬╠╣╠╦║╣╔╩╬╩╣╣╦╦╠╩╝
╚═╠╠╩╗╬╩╠╩╣╣╣╠╩╦╩╣╠╔╔╣╩╣╝╦╩╬╚╠╣╣╬╦╠╚╬╣╣╬╦╗╦╬╦╣╣╦╬║
╠╬╗╣╬╣╦╠╣╚═╬╦╣╣╩╣╬═╠╚╣╝╩╠╗╣╗╬╬╣║╦╠╩╣╩╣╬╦╬╗╠╦╔╦╦╩═║
╠╠╦╣╝╠╩╦╦╩╩╠╣╦╠╣╠╣╬╦╬═╦╩╠╠╩╠╠╦═╬╦╩╠╠╦╬╩╣╦╬╣╦╩╣╠╬╣╗
╔║╠╔╣╣╩╣╬╦╠╦╬╬╣║╦╦╣╣╔║╩╩╩╦╠╩╩╣╬╣╬╠╬╩╬╦╦╣╬╝╬╣╩╣╗╠╠╗
╠╣╣╠╦╣╠╩╗╬║╠╩╬╣╦╩╦╔╠╠╠╠╠╠╩╝╦╬╠╠╬╬╠╬═╠╠╩╩╩╩╦╠║╝╩╝╩╝
╬╗╠╩╣╦╬╦╠╠╩╩╠╝╩╣╣╩╣╩╩╠╗╬╬╩╩╩╩╩═╩╬╣╣╣╝╠╦║╩╬╩╚╩╬╝╣
║╦╦╣╦╦╦╬╩╬╠╠╩╗╬║╣╦═╦╬╗╦╦╦╬╦╚╣╬╦╝╣╔╠╣╦╣╠╣╠╣╩╣╠╣╬╣╦╣
╠╣╝╩╩╩╣╦╬╠╠╝╦╩╩╠╬╬╣╦╠╣╩╚╩╦╬╬╩╬╠╣╣╩╬╦╣╣╠╦╩╬╩╗╠╦╬╩╦╣
║╦╣╩╦╠╦║═╦╬╩╣╩╠╬╣╝╦╠╦╦╩╬╗╦╣╩╬╔╠╬╩═╣╠╦╦╦╣╦╩╠╣╦║╣╩╠╗
╔╦║╠╩╣╦╠║╩╠╬╬╬╠╣╩╩╩╝╩╠╬╬╠╣╦╗╦╦╩═╦╔╣╠╣╬╦╩═╦╣╩╦╚╬╬╩║
╔╣╠╣╠╩╣╣╔╩╦╗╦╠╬╠╝╣╦╠╗╣╦╣╠╩╝╠╚╬╬╩╚╦╬╬╬╩╩╝╦╠╠╦╬╬═╦╠╣
╚╦╬╠╠╬╠╝╬╦╠╣╦╦╚╠╗╣╬╬╩╬╠╬╝╦╣╠╠╬╠║╦╣╣╩╦╬╣╠╬╩╬╬╣╣╦╦╬║
╚╣╩╬╬╠╠╩╣╚╩╠╠╬╩╩╚╣╩╝╚╬╠╦╣╩╬╣╬╠╩╝╩╠╩╦╠╔╦╩╦╬╬╚╩╩╠╦╦
╠╬╦╩╣╩╠╠║╦╠╦╦╩╣╩╣╬╬╦╬╗╬╔╬╦╠╩╬╦╬║╣╦╩╔╠╦╬╗╩╠╦╦╦╩╠╩╦║
╚╠╣╣╩╣╣╠╣╠╦╦╣╩╩╗╦╣╣╦═╦╠╠╣╣╬╬╣╦╣╩╬╣╣╦╚╔╣╩╩╠╬╩╣╠╬╠╗╗
║╦╣╠╩╦╬╬╦╦╠╦╩╣╠╣╣╩╩╠╩╚╬╦╦╬╠╣╠╩╦╦╦╦╠╦╩╬╩╦╣╩╦╬╚╣╩╚╩╣
╚╩╗═╣╦╦╩╦╬╠╬╦═╠╩╬╠╚╬╠╬═╦╠╬╩╬╦╩╦╦╠╣╬╣╣╠╩╬╩╩╠╠╬╩╠╣╬╝
║╦╦╠╩╣╠╗╬╬╗╣╚╦╝╩╦╩╩╠╣╬╬╦╗╠╠║╣╔╩╬╣╬╣║╬║╩╩╣╠╦╠╔╝╠╣╦╣
╔╩╔╦╣╠╩═╦╣╚╣╠╣╩╠╣╦╩╦╦╠╣╣╣╩╣╬╣╩╬═╬╬╩╣╗╦╔╩╠╣╣═╬╠╠╩╦╗
╔╦╬╬╩╣╩╩╠╗╬╬╦╦╗═╠╣╬╬╬╩╩╦╬╬╣╣╗╦╣╩╝╦╦╦╦╩╦╠╩╣╣╬╣╠╩╣╣╣
╔╦╠╦╬╬╦║╠╣╠╦╦╔╠╠╚╬╬╩╠╦═║╠╦╝╩╩╬╣╩╠╦╬╠╠╦╩╣╩╠╩╠╠║╠╩╔║
╠╣╣╩╝╩╦╠╠╣╦╩╩╬╠╠╠╠╦╬╠╩╠╬╩╦╬╠╬╣╠═╣╣╠╬╬╦╔╬╩╣╠╩╦║╚╦╠║
╠╬╝╬╩╠╦╩╣╩╬╠╦╩╩╠╦╦╝╩╠╬╦║╠║╠╩╠╩╣╦╦╣╩╣╚╔╦╣╬╠╩╣╩╬╠╬╦╣
╚═╩═╩╚╚═╩╩═╚╝╩═╩╩╝╝╝═╩╩╚╩═╩╝╚╝╝╩╚ ╚╝═╩═╩╩╩╩╩╩═╚╩═█
$ ./maze-solver-spa -s 50x50-10.txt
No path
█═╔╔╦═ ╔╔╦╗╦═╦╦ ╦╔╔═╦╔══╔╔ ╔╦╔╗═╗╗ ═╗╔╔╗╔╔╔╔╦╗╦╦╦╗
╚╣╩╠╩═╦╔╬╬╦╩╬╝╬╠╠╣╩╬╣╦╦╬╠╦╦╣╦╬╦╬║╣╩╣╠╬║╣╬╣╣╣╦╠╬╔╣╝
╔╦╬╩╣╔╠╬╣╬╝╣╩╣╦╝╠╦╦╣╦╠╣║╣╣╣╩╩╣╠╬╬╠╚╠╩╬╩╔╦╦╠╠╩╚╬╩╠╗
║╩╗╠╣╚╣╦╦╠╦╬╩╝╠╝╬╣╦╩╦╠╝╦╦╣╦╣╩╗╬═╦╩╗╣╣╩╔╦╬╦╬╦╚╣╠╬╠║
╚╗╬╬║╠╣╬═╠╦╣╠╠╣╦╦╩╩╣╩╣╬╩╗╦╠╩╣╦╬╩╩╩╣╠╩╣╗╠╩╬╠╠╩╣╣╩╠╝
╠╬╣╠╠╠╬╣╩╦═╠╩╠╦╦╩╬╩╦╣═╬╩╬╗╦╩╦╬╣╬╣╩╗╚╣╠╠╦╣╩╝╩╩╦╩╩╚╝
╚╠╣═╣╠╠╩╠╠╣╔║╠╩╠╬╠╩╣╬╬║╣╩╬╩╬╠╬╬╠╠╚╠╠╣╬╦╣╬╩╩╩╠╬╩╦╝
╠╦╝╩╩╬═╣╚╠╬╣╦╦╦╣╩╬╦╠╠╣╦╝╠╦╬╬╬╬╦╦═╬╬╠║╩╩╣╦╦╬╦╣╠╠╝╦╗
║╩╦╦╬╣╬╩╠╬╩╦╠╝╩╬╩╠═╬╩╠╬╬╩╬╠╚╩╩╠╣╠║╦╠╬╩╩╬═╬╩╬╬╠╦╣╝╣
╠╩╬╝╣╬╬╬╣╩╦╬╗╣╠╠╣╩╣╬╩╦╬╠╠╚╣╠╬╬╩╠╩╝╦╬╩╣╣╝╣╠╩╩╝╦╩╦╬╝
╔╦╬╬╣║╔╣╩╣╩╣╦╦╩╦╦╩╠╬╣╦╬╬╩╦╬╣╩╣╩╬╦╣╩╬╦╠╣╩╔╔╠╩╠╣╬╣╚╗
║╬╦╦╬═╩╣╬╩╣╦╩╦╠╦╬╦╦╣╩╩╦╬═╦╦╝╬╬╩╦╩╬╠╝╚╩╬╣╩╣╩╝╣╦╚╝╬║
╚╩╦╠╬╠╝╣╬╩╬╦╣╣╣╗╬╠╣╦╣╩╣╣╬╣╠╠╝╬╣╚╚╦╦╠╠╩╣╣╠╠╦╬╣╣╬═╦╣
╠╬║╬╚╠╚╬╠╦╦╠╬╬╣╠╣╠╩╦╩╩╩╦╔╣╠╣╩╦╠╣╣╣╩╬╣╠╣╩╦╠╩╠╣╦╩╩║╗
╚╠═╗╠╩╦╩╬╚╬╔╣╬╦╝╣╔╦╬╣╩╩╩╬╦╝╔╦╬╩╦╦╠╝╩╦╣╔╠╣╦╠╣╦╦╩╦╣║
╠╩╬╣╩╬║═╦╬╠╩╔╦╩╣╦╦╩╬╬╠╩╣╦╦╩╣╦╠╩║╦╣╗╠╩╣║║╠╝║╣═╦╦╩╬║
╔╬╠╩╠╦╬╣╦╣╩╦═╬╬╩╗╣╗╬╠╚╠╩╝╣╬╝╝╦╠╦╦╬╠╗╠╦╩╠╩╦╚╦╦╚╠╦╬╗
╠╚╣╩═╦╩╦╣╦╬║╦╦╣╝╬╣╦╬╩╔╗╠╩╩╬╠╠╠╗╬╠╣╬╬╣╣╣╩╩╝╠╬╣╬╦╠╣║
╠╬╬╩╠╩═╬╣╬╩╩╬╠╗╦╩╠╣╩╦═╠╬╦╩╠╣╬╩╩╩═╦╣╦╠╣╩╣╩╠╔╦╦╠╣╬╩║
║╣╬╠╩╩╗╠╣╬╩╠╦║╬╝═╬╦╦╩═╬╝╚╩╬╠╬╦╠╬╣╬╣╣║╣╩╣╣╣╬╗╩═╦║║╝
╚╦╠╣╚╠╣╣╗╔╩╩╦╬╣╬═╣╬║╩╩╣╣╩╩╠╣╩╣╣╩╬╣╩╬╠╩╣╬╣╠╣╬╦╠╣╬╝╗
║╣╔╬╦╬╩╠╚╠╬╝╠╩╩╣╩╠╣╣╣╣╚╔╬╬═╦╠╩╣╬╦╠╣╔╩╣╬╣╩╠╠╩╚╣═╣╠╣
╚╝╣╦╔╦╬╣╩╬║╩╣╬╣╬╣╦╠╦╣╦╠╣╩╠╦╦╩╩╝╩╣╦╣╦╩╦╣╩╩╦╬╩╬╬╠╩╬║
╚╠╩╠╩╣╠╩╩╬╩╣╬╩╗╠╣╩╣╬╣╔╬╬╦╠╩╩╬╣╦╠╣╬╬╬╠║╩╠╦║╦╩╦╣╣═╝║
╔╬╠║╩╦╔╗╩╬╣╔╬╬╠╣╬╠╠╬╬╣╦╬╩╩╦╠╩╦╣╣╣╦╩╠╣╠╔╠╬╩╠╠╣╠╬╩╩╝
╔╦╝╦╬╬╬╣╣╬╠╠╠═╦═╠╣╣╩╦╩╝╦╚╦╦╠╦╠╠╠╣╣╦╬╣╬╦╣╚╠╦╦╠╩╩╩╗╗
╠╬╠╬╬╠╝╬╠╠╦╣╦╣╣╬╩╩╗╩╣╦╬╣╬╝╠╬╣╦╩╠╝╦╬╩╦╦╚╠╦║╗╬╦╣╬╬╣╝
║╦╦╝╦╩╩╦╬╬╩╣╦╩╠╩╣╩╣╩╦╝╣╦╦╩╣╣╩╣╠╠╝╣╦╩╩╩╦╩╚╬╦╩╩╬╣╦╚╣
╔╣╠╦╩╦╠╩╠╦╩╦╬╠╠╠╣╣╩╣╦╗╣╩╩╠╦╬╬╬╠╩╣╔╩══╣╠╦╬╣╦╦╔╦╦╔╬╝
╚╦╝╣╬╦╩║╬╬╣╣╠╝═╚╣╣╩╚╠╦╦╦╠╦╠╩╝╣╣╦╦╠╠╩╣╦╦╣╝╣╣╦╩╠╠╦╣
╔║╦╝╚╦╣╩╠╠╬╣╬╦╣╬╠╠╠╚╦╗╩╦╦╦╠╠╩╦╬╠╠╬╣╠╬╦╣╣╬╚╦═╣╦╩╦╠╝
╚╬╦╬╦╗╣╦╩╣╣╩╣╦═╩╚╔╠╩╣╦╠╠╦╩╬╬╣╣╠╬╬╬╔╩╦╝╬╠╣╩═╗╠╬╣╬╔╝
║╠╣╬╣╠╩═╚╦╬╩╠╩╚╩╦╔╣╩╣╠╬╣╠╠╬╦╦═╣╬╣╝╣╦╩╩╠╣╣╬╣╩╩╦╬╩╣╣
╚╬╝╦╦╔╝╬╬╣╠╠╩╬╬╠╠╣╚╝╣║╬╩╠═╣╬╬╦═║╬╬╦╦╬╦╬╦╩╬╬╦╠═╩╦╦║
╬╣╩╦╦╣╣╬╝╬╣╦╩╬╩╩╣╠╣╦╣╩╣╦╠╦╠║╠╦╣╦╬╬╩╬╚╩╣╬╚╩╦╣╩╠╩╔╗
╠╩╦╣╦║╣╣╚╣╝═╠╠╠╬╠╦╣╩╣╗╬╩╩╦╣╦╩╦╦╠╬╩═╬╦╝╬╣╣╦╦╣╬╦╦╩╦
╠╬╠╠╬╠╠╗╠╩╣╠╣╬╔╦╬╦╣╩╔╩╬╠╦╦╠╣╠═╬╩╣╦╩╦╦╩╦╩╣╣╗╣╩╠╣═╦╣
╚╦╠╣║╩╠║╩═╠╦╦╩╦╬╩═╦╦╣╠╣╦╦╩╝╦╬╣╚╬╔╦╬╩╬╣╣╔╦╦║╚╠╦╬╩╚╝
║╚╬╩╣╣╣╗╣╬╦╩╠╠╝╦║╠╩╩╣╠╗╬╦╦╩╬╠╩╦╦╝╗╩╦╩╦╣╣╠╠╬╦╩╠╬╩╩╣
╠╩╬╣╬╩╠╦╠╩╬╩╩╩╠╩╬╩╩╣╬╣╬╣╬╣╩╠╩╩╣╝╩╠╬╗╬╩╣╦╗╠╣╦╬╣╣╬╣╣
╔╩╬═╠╩╩╗╦╩╣╩╦╩╬╠╚╬╩╩═╩╬╩╣╠╠╩╣╣╠╦╝╩╔╬╬╩╣╚╠╔╠╝╬╠╣╚╩╝
╚╩╬╠╩╦╦╩╬╣╬╩╦╬╠╩╠╩╠╬╣╣╣╩╬╬╦╝╦╦╣╠╠╦╠╠╩╩╬╠╬╣╣╠╩╬╩╦╬╝
╠╦╣╣╬╩╔╔╠╠╦╬╦╦╬║╠╠╩╩╬╩╠╠╠╠╠╠╦╠╩╠═╣║╝╦╬╬╬╣╩╗╩╣╬╦╗╣╗
║╬╣╬╩╬╦╩╬║╩╩╣╬╬╩╬║╬╬╬╔╠╩╬╝╩╬╠╚╩║╬╠╠╣╠╠║╠╩╠╣╩╗╬╠╚║
║╠╔╠╩╬╬╔╦╗╣╩║╬╬═╬╣╣╦╗╩╩╠╦╩╠╠╠╦╣╠╩╩╠╬╠╩╠╣║╩╬╦╦╣╩╣╝╝
╚╣╬╦╠╠╠╣╠║╩╗╠╦╬╦╠╬╩╝╣╠╚╬╚╬═╬╝╬╦╦╣╣╦╬╣╣╦╬╩╦╬╦╝╔╩╠╦╣
╚╩╦╚╦╦╬╬╠╣╣╦╝╠╣╝╣╬═╣╦╠╩╩╔╠╦╩╩╩╔╬═╠╣╣╦╠╠╗╠╩╩╩╩═╦╣╠╝
╔╦╣╣╠╠╗╗╣╦╩╩╠╠╩╦╠╬╦╩╣╦╬╬╚╣╬╩╗╩╣║╦╚╩╬╦╔╠╦╬║╦═╣╠╣╦╬╣
║╣╣╝╣╦═╦═╦║╣╔╩╦╩╣╬╣╣╩║╠╠╬╬╬╦╣╩╔╦╦║╣╩╩╩╠╦╩╦╣╩╠╩╦╩╣╣
╚╝╩═╝╚╚╝═╝═╝═╩╩╩╚╩╩╝╝╩═╚╩╩╝╝╚ ╩╩╝╩╚ ╝═╩═╩╩╩╩╩╩╩╚╝█
See the next part; Part 3: The Wall for a completely different approach to traversing a maze. An approach that we can actually use «on site», if we happen to come across a physical maze...