#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
char D[2560],far*q=(char far*)0xA0000000;
int B[21],C[2560],Q[2561]={62715};
int E=6,M=2,a=30,c=99,n=1;
int b,d,v,w,x,y;
void paleta(f,F){
for(b=Q[f],v=5;v--;b+=315)
for(w=5;w--;) *(q+b-35)=!F*9,
*(q+b++)=F;
}
void muro(f){
for(d=v=D[f];v--;C[f-v]=C[f-v-64]=E?f:0);
for(b=Q[f]+321,v=9;v--;b+=322-5*d)
for(w=5*d-2;w--;*(q+b++)=E);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
clock_t T;
for(y=5;y--;b+=315)
for(x=5;x--;b++)
if(y&&y<4||x&&x<4) B[v++]=b;
for(y=40;y--;Q[n-1]-=1280)
for(x=64;x--;Q[n++]=Q[n-1]-5)
if(y<4||y>20||y%2||n%5&&x) continue;
else D[n-1]=x>59?64-x:n%5?n%5:5,
muro(n-1);
Inicio:
T=clock();
do{
while(kbhit()) E=getch();
if(E==27&&getch()==E) return 0;
if(E==77&&a) paleta(--a,9);
if(E==75&&a<57) paleta(a++,0);
M+=(E=='-'&&M<5)-(E=='+'&&M>1);
}while(E=clock()-T<M);
x=c%64<1||c%64>62?-x:x;
y=c>2495?1:y;
if(c>127){
if(n=C[c-x]) muro(n);
if(C[d=c-64*y]||C[d-=x]*!n&&++n)
if(y=-y) muro(C[d]);
x=n?-x:x;
}
else d=c%64-a,
y=d<7+(x>0)&&d>=-(x<0)?-1:0,
x=d<5&&d>1?0:c>64&&c<127?(d<2)-(d>4):x;
while(!y) y-=getch()==13;
d=Q[c];
b=Q[c-=64*y+x];
for(v=21;v--;) *(q+d+B[v])=0,
*(q+b+B[v])=15;
goto Inicio;
}