#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
char A[][40]={
"0000000000000000000000000000000000000000",
"00000000000000000000;0000000000000000000",
"00000000000000000000:0000000000000000000",
"004::1004::::1000000:0000004:::8:::::100",
"00:00:00:0000:000000:000000:000:00000:00",
"00:00:00:0000:000000:000000:000:00000:00",
"00:00:00:0000:000000:000000:000:00000:00",
"00:00:00:0000:000000:000000:000:00000:00",
"00:007::20000:000000:000000:000:00000:00",
"00:00:0000000:000000:000000:000:00000:00",
"00:00:0000000:000000:000000:000:00000:00",
"00:00:0000000:000000:000000:000:00000:00",
"00:00:0000000:000000:000000:000:00000:00",
"00:00:0000000:000000:000000:000:00000:00",
"00:003::8::::9::::::9::::::6:::9:::::500",
"00:00000:0000:000000:0000000000:00000:00",
"00:00000:0000:000000:0000000000:00000:00",
"00:00000:0000:000000:0000000000:00000:00",
"00:00000:0000:000000:0000000000:00000:00",
"00:00000:0000:000000:0000000000:00000:00",
"00:004::500007::8:::6::::1004::500000:00",
"00:00:00:0000:00:00000000:00:00:00000:00",
"00:00:00:0000:00:00000000:00:00:00000:00",
"00:00:00:0000:00:00000000:00:00:00000:00",
"00:00:00:0000:00:004::100:00:00:00000:00",
"00:00:00:0000:00:00:00:00:00:00:00000:00",
"00:00:00:0000:00:00:00:00:00:00:00000:00",
"00:00:00:0000:00:00:00:00:00:00:00000:00",
"007::2007::::200:00:00:007::2007:::::200",
"00:00000:0000000:00:00:00:00000:00000000",
"00:00000:0000000:00:00:00:00000:00000000",
"00:00000:0000000:00:003::200000:00000000"};
char Pieza[][15]={
"000011111110000",
"001111111111100",
"011111111111110",
"011111111111110",
"111111111111111",
"111111111111111",
"111111111111111",
"011111111111110",
"011111111111110",
"001111111111100",
"000011111110000"};
char far*q=(char far*)0xA0000000;
int J[2560],B[2560],b[13];
int Q[616],X[616],Y[616];
int e[256]={0,72,77,80,75};
int G[]={0,2,1,4,3,5,8,7,6,9,10,12};
int H[12][4]={1,0,0,-1,3,1,0,0,0,-1,1,0,0,0,-1,-3};
int I[]={0,-64,1,64,-1};
int C[]={1309,1311,1313,1315};
int D[]={3,1,1,3};
int c=2008,d=2559,g=61590,n=5;
int E,L,M,a,h,v,w,x,y;
void Figura(f,F){
for(v=11;v--;f+=305)
for(w=15;w--;*(q+f++)=Pieza[v][w]*F);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
textcolor(BLUE);
clrscr();
clock_t T;
b[12]-=b[11]=61;
while(e[e[--n]]=n) e[n]=0;
for(v=11;v--;)
for(w=15;w--;Pieza[v][w]-=48);
for(y=40;y--;g-=1440)
for(h=g+5,n=d-=x=32;x--;g-=5,h+=5)
if(B[++n]=G[B[d--]=A[x][39-y]-48])
Figura(Q[J[d+1]=a]=g,0),
Figura(Q[J[n]=a+1]=h,0),
Y[a]=Y[a+1]=y,
X[a++]=x,
X[a++]=63-x;
Inicio:
T=clock();
for(a=4;a--;D[a]=d)
if(C[a]==c) break;
else{
d+=H[n=B[h=C[a]]-1][d=D[a]];
if(x=X[J[c]]-X[J[h]]) x*=x%2&&a%2?-1:1;
if(y=Y[J[c]]-Y[J[h]]) 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;
Figura(Q[J[h]],0);
h+=b[B[h+=I[d+1]]];
Figura(Q[J[C[a]=h]],a+2);
}
while(clock()-T<3);
while(kbhit()) M=E=getch();
if(E==27&&getch()==E) return 0;
E=M;
do{
h=d=c+I[e[E]];
if(!B[d+=b[B[h]]]) h=E!=L?E=L:0;
else L=E,
Figura(Q[J[c]],h=0),
Figura(Q[J[c=d]],14);
}while(h);
goto Inicio;
}