#!/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];srand@i[2].to_i;end; $p={}; $o=[]; $q={}; def@s(d,b); p=[d,b]; while$p[p]&&$p[p]!=p; p=$p[p] end; return@p; end; 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; 4.times{|l|$o[d+l][i+8,2]="'@@."[l]*2}; else; o=[d,b].max; if$q[p]&&$q[q]; 2.times{|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]="@@" end; end; end; end; I=(";@.;;;.@;;'@;@';;;.@;@.;;@';;;'@';.@;@.;@@';;;'@@@@@'@@@" .split(//).map{|l|l*2})*""; (z*2).times{|l|$o+=[I[l%4*16,16]*Z]}; $o[0]=$o[0].gsub(/;;@/,"@@@"); $o[1]=$o[1].gsub(/;;;;''/,"..;;''"); 3.times{|l|$o+=[I[(l+4)*16,16]*Z]}; $o.size.times{|l|$o[l]+="@.'@"[l%4]*2}; z.times{|l| (Z*2).times{|i| p=[l*2,i*8]; $p[p]=p } }; O=(Z*2)*z+1; O.times{ if$q.size0?2:-2; while(g<1||rand(5)>0)&& (p=j+8*g)1&& (0..2).all?{|l|!$q[[q+l*2,p]]&& !$q[[q+l*2,p+8]]}; g+=1; end; if@g>0; g.times{|l| 3.times{|u| [0,8].each{|v| $q[[i+l*f+u*2,j+l*8+v]]=1; } } }; h=rand(2)*2-1; e=h*f<0; u=v=w=x=nil; g.times{|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) end; u=p; v=q; w=r; x=s }; y(u=e@?i+2:w,v=e@?j:x+8,u-f,v) end; end }; w=[]; z.times{|l| Z.times{|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).each{|i| w+=l>0?[[q=l*2,p=i*8,q-2,p]]:[] } }; w=w.shuffle; 2.times{|l| w.each{|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) end }; $q={} }; y(-2,0,0,0); y(p=z*2,q=Z*16-8,p-2,q); else; x=[]; STDIN.each_line{|l|x.push(l)}; b={}; d=0; q=[0,0]; p=[[0,0,0,0]]; while@p.size>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