use 5.20.0;

use Digest::MD5 qw/ md5_hex /;
use Math::Vector::Real;
use List::AllUtils qw/ min max minmax /;

my @directions = (
    [ 'U', V(0,-1) ],
    [ 'D', V(0,1) ],
    [ 'L', V(-1,0) ],
    [ 'R', V(1,0) ],
);

my $best_path; 

wander( 'bwnlcvfs', V(0,0) );

sub wander {
    my( $hash, $c ) = @_;

    if( $best_path and length($hash) >= length($best_path) ) {
        return;
    }

    my( $min,$max ) = minmax @$c;

    return if 0 > $min;
    return if 3 < $max;

    if( $c == V(3,3) ) {
        $best_path = $hash;
        say $best_path;
        return;
    }

    my @md5 = split '', md5_hex($hash), 5;

    my @d = grep { (shift @md5) =~ /[b-f]/ } @directions;

    for my $d ( @d ) {
        wander( $hash . $d->[0], $c + $d->[1] );
    }
}