#!/usr/local/bin/perl
$" = ',';

$t = ' [ \\ ] ^ _/.7-06,15243 ` a b c d e f g o n m l k j i h"!# z$ y%+&*\')( p q r s t u v w';
@P = @{&c($t)};
$p = 0;

$o{30} = 0;
$o{0} = 55;
for (@P) { $P{$p} = $_; $o{$_} = 55 - ++$i; $p =$_; };

%Z = (30,1,29,1);
@D = (0..55);

$M = [ map { [map {c($_)} split "\n"] } split "\n\n",
' f(/! ej g+!D y_ e| y_m eDjIH y_ eJWKnguP]o k w~ o]E \\D` s oo ciw)r k"QaE
D$7 f dY,L _tE ^X*p `h qrb \\ qE ^S4 u x k~t4 t}j\\-3 qF lK1qN a][\'hN n [%:W
1e}} g p d c`F2F:aw d b,Vp ae2Yy u[7F [iC5 n{, ai/i^ h|p* n k>J,k7 v!v r

 g{+Y50{ h=c gyK=;Y4c=;9iucxY2 x m4 [ mqhnRj k"w7Md? x j \\ oBd}0 kU j_
f _ x pN&" s:Eh|74G j1 x:x mP oYz s _ \\e es c>Cd.jr Z mp%Nc0{ b ZQp a? \\} zr
:e^ei+D j# vL% i fXB wN&- p)ZIDe n.]_a4 vz v ntvq3 lp0 ta \\2 _.v i|X1 y \\

1 r{ew y,{e[ i*{ ye2z|sbU x lHQ0uy9e16^_ o4 `2S p%P z ^ jjo i kCxOn `@i
2 y n$HI h n[ p Z ]^\'&?\\ j km o9 f<FKo)&oOcay `8?z:m q c!6a v7{z fHU v iyO
 z t{=l o [{1>{ fq8mHz+Up" t h asm5 dEXsme? rO w[( q# m1:j dL0 _C~nr z2 ^

 ` s+8S+i_: y ]E+_1&F ]+g0_M&+_Y t b^1g \\F m dwR#RCT5np>#R bA nA[ k!h
W3PuG&" v ctY l ki>" l mk8x]lI k k2w lxzxrI a+#1*[tI^GA\\ v\\a?\\~1 j) u
wr k c4BX?F t]8% jrKA ` ah% j ^\'JB;0U) zh p nPw s-t/ \\]p h mEy x m)# lRCd a' ];


$s = $k = 0;

Q: while (1) {

	$_ = '_';

	while (1) {

		$i = -1;

		@V = p( map { (ord($_)-31)%127 } split "");
		@I,@J = 1;


		while ("@I" ne "@J") {
		
			@W = @V;
			@V = map { ( $M->[$k][0][$_] * $W[0]
					+ $M->[$k][1][$_] * $W[30]
					+ (1-$Z{$_}) * $W[$P{$_}] ) % 127
				} @D;

			@J = @I;
			@I = map { ($M->[$k][2][$_] * $V[$_] * i($V[30]) % 127)
				} @D;

			++$i*$V[30]*$W[30] && print "\t", (map {
			chr( $o{$_} > $i+1 ? 32 : $I[$_]) } @D), "\n";


		}

		!$i && (++$s,last), $s==$#$M && last Q;

		print "\nScore $s > ";
		$_ = <STDIN>;
		/\S/? chop : last;
	}

	++$k==$#$M && $s-$k && ($k=$s=0);
}

print "\n";

sub i { my $t = 1; for (1..125) { $t = $t * $_[0] % 127 } $t }
sub c { $_[0] =~ s/ (.)/chr(ord($1)-90)/ge; [map {ord($_)} split "", $_[0]] }

sub p {

	$#_ = 55 if $#_ >= 55;
	my ($n, $j) = (1,0);
	for (@_) {$n= $n* $_ % 127}
	for (@_) {$_ = $n* i($_) % 127}
	while ($#_ < 55) { push @_, $n; $n= i($_[$j++]) * $n%127; }
        @_;
}

