#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int L,e[256],i[49],Y[25];
int main()
{
_AX=0x13;
geninterrupt(0x10);
clock_t T;
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
char E,far*Q[250],far*q=61960+(char far*)0xA0000000;
char b[4][4][7][4],C[4][7][4],D[4][7][4];
char B[4][4][7][4]={"0000","0000","0000","0000","0000","0000","0000",
"1111","0100","0010","0110","0110","0100","0110",
"0000","0111","1110","0011","1100","1110","0110",
"0000","0000","0000","0000","0000","0000","0000"};
int f[250],G[]={1,2,3,0};
int I[]={0,77,75,72},X[]={10,1,-1,0};
int a,c,g,n,x,y,d=48,M=9,p=rand()%7;
for(g=4;g--;e[I[g]]=g,d=0)
for(a=7;a--;)
for(n=0,y=4;y--;)
for(x=4;x--;) if(B[g][y][a][x]=B[G[g]][x][a][3-y]-d)
C[n++][a][g]=x+10*y;
for(a=7;a--;)
for(g=4;g--;){
for(x=n=4;n--;) i[I[n]=C[n][a][g]]++;
y=G[g];
while(x--){
while(++n<4)
if(i[c=C[n][a][y]+X[x]]) i[c]--;
else B[d++][x][a][g]=c;
D[x][a][y=g]=d;
while(n--) if(!i[c=I[n]]) i[c]++;
else b[--d][x][a][g]=c;
}
while(++n<4) i[I[n]]--;
}
for(d=49;d--;) i[d]=d/7*320+d%7;
for(c=249,y=25;y--;q-=2480)
for(x=10;x--;Q[c]=q,q-=8,f[c--]=y)
if(!x||y%24<1) for(a=80*!x,d=49;d--;)
*(q+i[d])=*(q+i[d]+a)=8;
Inicio:
for(c=n=4;n--;) if(*(q=Q[C[n][a=p][g=0]+c])) break;
else for(d=49;d--;) if(*(q+i[d])=a+1)
*(q+i[d]+17048)=0;
while (n+1) if(getch()==27)
return 0;
p=rand()%7;
while(++n<4) for(q=Q[C[n][p][0]]+17080,d=49;d--;)
*(q+i[d])=p+1;
T=clock();
do{
while(E=kbhit()) getch();
do if(kbhit()) E=getch();
while(!E&&clock()-T<M);
if(E==27&&getch()==E) return 0;
if(E=='-') printf("%c[3;35f%u",27,10-(M+=M<10));
if(E=='+') printf("%c[3;35f%u",27,10-(M-=M>1));
for(y=n=D[x=e[E]][a][g];n--;)
if(*Q[I[n]=B[n][x][a][g]+c]) break;
if(n+1) continue;
while(y--) for(q=Q[b[y][x][a][g]+c],d=49;d--;)
*(q+i[d])-=*(Q[I[y]]+i[d])=a+1;
if(x>2) g=G[g];
else c+=X[x++];
T=clock();
}while(x);
for(n=4;n--;) Y[y=f[C[n][a][g]+c]]++;
do while(Y[x=y]>8)
do for(L+=x==y,c=10*x--,n=9;n--;)
if(*(q=Q[++c])!=(a=x?*Q[c-10]:0))
for(d=49;d--;) *(q+i[d])=a;
while(Y[x+1]=Y[x]);
while(Y[--y]);
printf("%c[5;28fLineas=%u",27,L);
goto Inicio;
}