#!/usr/bin/ruby t=%w{ if@STDIN.tty?; i=ARGV; z=[i[0]&&i[0].to_i-3||18,14].max; Z=[i[1]&&i[1].to_i-2||64,32].max/16; z=(z-(z+2)%4)/2; if@i[2];sL@i[2].to_i;B $p={}; $o=[]; $q={}; def@s(d,b); p=[d,b]; while$p[p]&&$p[p]!=p; p=$p[p] B return@p; B def@y(d,i,b,q); p=s(d,i); q=s(b,q); if@p!=q; $p[p]=$p[q]=[p,q].min; if@d==b; 4F{|l|$o[d+l][i+8,2]="'@@."[l]*2}; else; o=[d,b].max; if$q[p]&&$q[q]; 2F{|l|$o[o+l][i+2,6]="@"*6}; else $o[o][i+4,2]="@,@"[(i%16/8)^(o%4/2),2]; $o[o+1][i+4,2]="@@" B B B B I=(";@.;;;.@;;'@;@';;;.@;@.;;@';;;'@';.@;@.;@@';;;'@@@@@'@@@" .split(//).map{|l|l*2})*""; (z*2)F{|l|$o+=[I[l%4*16,16]*Z]}; $o[0]=$o[0].gsub(/;;@/,"@@@"); $o[1]=$o[1].gsub(/;;;;''/,"..;;''"); 3F{|l|$o+=[I[(l+4)*16,16]*Z]}; $oJF{|l|$o[l]+="@.'@"[l%4]*2}; zF{|l| (Z*2)F{|i| p=[l*2,i*8]; $p[p]=p } }; O=(Z*2)*z+1; OF{ if$qJ0?2:-2; while(g<1||L(5)>0)&& (p=j+8*g)1&& (0..2).all?{|l|!$q[[q+l*2,p]]&& !$q[[q+l*2,p+8]]}; g+=1; B if@g>0; gF{|l| 3F{|u| [0,8]H{|v| $q[[i+l*f+u*2,j+l*8+v]]=1; } } }; h=L(2)*2-1; e=h*f<0; u=v=w=x=nil; gF{|l| y(d=i+l*f+(h>0?0:4),b=j+l*8,p=d,q=b+8); y(m=d+(e@?-2*f:f),n=b+(e@?8:0),r=m+f,s=n); if@u; y(u,v,d,b); y(w,x,m,n) B u=p; v=q; w=r; x=s }; y(u=e@?i+2:w,v=e@?j:x+8,u-f,v) B B }; w=[]; zF{|l| ZF{|i| y(q=l*2,p=i*16-l%2*8,q,p+(!$q[[q,p]]&&!$q[[q,p+8]]?8:0)) }; (1..Z*2-2)H{|i| w+=l>0?[[q=l*2,p=i*8,q-2,p]]:[] } }; w=w.shuffle; 2F{|l| wH{|p,d,q,b| if(l<1|| s(0,0)!=s(z*2-2,Z*16-8))&& !$q[[p,d]]&& !$q[[q,b]]; y(p,d,q,b) B }; $q={} }; y(-2,0,0,0); y(p=z*2,q=Z*16-8,p-2,q); else; x=[]; STDINH_line{|l|x.push(l)}; b={}; d=0; q=[0,0]; p=[[0,0,0,0]]; while@pJ>0; i,j,u,v=p.shift; if@i>=0&&i=0&&x[i][j]=="@"&&!b[[i,j]]; b[[i,j]]=[u,v]; n=(i<<16)+j; if@d