#include<time.h>
#include<stdio.h>
#include<conio.h>
char A[][20]={
"00000000000000000000",
"01::::::5::::::::200",
"0:000000:00000000:00",
"0:000000:00000000:00",
"0:000000:00000000:00",
"08::::::9:::5::::7::",
"0:000000:000:0000000",
"0:000000:0004::::200",
"04::::::600000000:00",
"00000000:0001::::7:2",
"00000000:000:000000:",
"00000000:000:01::::3",
"::::::::9:::604:::::",
"00000000:000:0000000",
"00000000:0008:::::::",
"00000000:000:0000000",
"01::::::9:::7::::200",
"0:000000:00000000:00",
"0:000000:00000000:00",
"04::20008:::5::::7::",
"0000:000:000:0000000",
"01::7:::30004::::200",
"0:000000000000000:00",
"04:::::::::::::::7::",
"00000000000000000000"};
char far*q=1960+(char far*)0xB8000000;
char far*Q[1000];
int B[1000],b[1000];
int X[1000],Y[1000];
int e[256]={0,72,77,80,75};
int G[]={0,2,1,4,3,5,8,7,6,9,10};
int H[10][4]={1,0,0,-1,3,1,0,0,0,-1,1,0,0,0,-1,-3};
int I[]={0,b[520]=-40,1,b[479]=40,-1};
int C[]={457,462,456,463};
int D[]={3,1,1,3};
int c=778,d=999,n=5;
int E,L,M,a,v,w,x,y;
int main(){
textmode(C40);
_setcursortype(_NOCURSOR);
clock_t T;
while(e[e[--n]]=n) e[n]=0;
for(y=25;y--;n=0,q-=40)
for(v=d-=w=x=20;x--;X[d--]=x,X[v]=w++)
B[++v]=G[B[d]=A[y][x]-48],
*(Q[d]=q)=*(Q[v]=--q+2*++n)=!B[d],
*(--q+2*n++)=*q=219,
Y[d]=Y[v]=y;
Inicio:
T=clock();
for(a=4;a--;D[a]=d)
if(C[a]==c) break;
else{
d+=H[n=B[C[a]]-1][d=D[a]];
if(x=X[c]-X[C[a]]) x*=x%2&&a%2?-1:1;
if(y=Y[c]-Y[C[a]]) y*=y%2&&a>1?-1:1;
if(n==4) if(d==0) d=x>0?1:3;
else if(y>0) d=2;
if(n==5) if(d==1) d=y>0?2:0;
else if(x<0) d=3;
if(n==6) if(d==2) d=x>0?1:3;
else if(y<0) d=0;
if(n==7) if(d==3) d=y>0?2:0;
else if(x>0) d=1;
if(n==8) if(x&&d%2==0) d=x>0?1:3;
else if(y&&d%2) d=y>0?2:0;
*Q[C[a]]=0;
*Q[C[a]+=b[C[a]+=I[d+1]]]=a+2;
}
while(clock()-T<4);
while(kbhit()) M=E=getch();
if(E==27&&getch()==E) return 0;
E=M;
do{
a=d=c+I[e[E]];
if(!B[d+=b[a]]) a=E!=L?E=L:0;
else L=E,
*Q[c]=a=0,
*Q[c=d]=14;
}while(a);
goto Inicio;
}