#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
char far*q=(char far*)0xA0000000;
char B[4][8]={"00000000",
"00000000",
"!000000!",
"!!0000!!"};
int Q[1000],D[1000];
int M=3,a=20,c=59,g=61760;
int E,b,n,v,w,x,y;
void pieza(f,F){
for(v=7;v--;f+=313)
for(w=7;w--;*(q+f++)=F);
}
void muro(f,F){
pieza(Q[n],D[n]=0);
pieza(Q[n],D[n+=1-n%2*2]=0);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
clock_t T;
for(y=25;y--;g-=2240)
for(x=40;x--;Q[n++]=g-=8)
if(y>3&&y<11) pieza(g-8,D[n]=b=x%2?8-b/8:b);
Inicio:
T=clock();
do{
if(E=kbhit()) E=getch();
if(E==27&&getch()==E) return 0;
if(E==77&&a) pieza(Q[--a],9),
pieza(Q[a+4],0);
if(E==75&&a<36) pieza(Q[a+4],9),
pieza(Q[a++],0);
M+=(E=='-'&&M<5)-(E=='+'&&M>1);
}while(clock()-T<M);
x=c%40<1||c%40>38?-x:x;
y=c>959?1:y;
if(c<80){
n=c-a;
if(n<44+(x>0)&&n>39-(x<0)) y=-1;
while(y>0) if(getch()==13) y=-1;
if(n>40&&n<43) x=0;
else if(c>40&&c<79) x=(n<41)-(n>42);
}
else{
if(b=D[n=c-x]) muro(x=-x);
if(D[n=c-40*y]) muro(y=-y);
else if(D[n-=x]*!b) muro(x=-x,y=-y);
}
for(n=2;n--;c-=n?40*y+x:0)
for(b=Q[c],g=b+2247,v=4;v--;b+=312,g-=312)
for(w=8;w--;*(q+b++)=*(q+g--)=n?0:B[v][w]-33);
goto Inicio;
}