sub step {
my ($dir, $r, $c) = @_;
if ($dir == N) {return (--$r, $c)}
elsif ($dir == NE) {return (--$r, ++$c)}
elsif ($dir == E) {return ($r, ++$c)}
elsif ($dir == SE) {return (++$r, ++$c)}
elsif ($dir == S) {return (++$r, $c)}
elsif ($dir == SW) {return (++$r, --$c)}
elsif ($dir == W) {return ($r, --$c)}
elsif ($dir == NW) {return (--$r, --$c)}
else {
die "Inside 'step': invalid param\n"
}
}
####
our %step = ( N => { R => -1, C => 0 },
NE => { R => -1, C => +1 },
E => { R => 0, C => +1 },
SE => { R => +1, C => +1 },
S => { R => +1, C => 0 },
SW => { R => +1, C => -1 },
W => { R => 0, C => -1 },
NW => { R => -1, C => -1 }
);
####
($rows, $cols) = step($dir, $rows, $cols);
####
$rows += $step{$dir}{R};
$cols += $step{$dir}{C};
####
$rows -= $step{$dir}{R};
$cols -= $step{$dir}{C};
####
for my $idx (0..$#words)