use strict;
use warnings;
use 5.010;

my @c1 = (' ', '0'..'9', 'A'..'Z' );
 sub fromB37 {
     my $n = shift;
     my $s = '      ';
     substr( $s, $_, 1, $c1[ $n%37 ] ), $n /= 37 for 0 .. 5;
     $s;
 }

 my @c2;
 $c2[  ord( $c1[ $_ ] ) ] = $_ for 0 .. 36;
 sub toB37 {
     my $n = 0;
     $n = $n * 37 + $c2[$_] for reverse unpack 'C*', $_[0];
     $n;
 }
 
my @c3 = map { my $c = $_; (map { "$_$c" } @c1) } @c1;
 sub myFromB37 {
     my $n = shift;
     my $s = '      ';
     substr( $s, 0, 2, $c3[$n % 1369] );
     $n /= 1369;
     substr( $s, 2, 2, $c3[$n % 1369] );
     $n /= 1369;
     substr( $s, 4, 2, $c3[$n] );
     $s;
 }

 my @c4;
 $c4[unpack 'S', $c3[$_]] = $_ foreach 0 .. 1368;
 sub myToB37 {
     1874161 * $c4[unpack 'S', substr($_[0], 4, 2)] +
        1369 * $c4[unpack 'S', substr($_[0], 2, 2)] +
               $c4[unpack 'S', substr($_[0], 0, 2)];
 }
 
while (<>)
{
        chomp;
        say myFromB37(myToB37($_))
}
