#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int i[250],Y[25];
int main()
{
_AX=0x13;
geninterrupt(0x10);
clock_t T=clock();
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
char far*q=(char far*)0xA0000000;
char E,far*Q[250][49];
int B[4][7][12]={0,0,1,1,1,1,0,0,0,0,0,0,
0,0,0,1,0,0,0,1,1,1,0,0,
0,0,0,0,1,0,1,1,1,0,0,0,
0,0,0,1,1,0,0,0,1,1,0,0,
0,0,0,1,1,0,1,1,0,0,0,0,
0,0,0,1,0,0,1,1,1,0,0,0,
0,0,0,1,1,0,0,1,1,0,0,0};
int r[]={5,9,1,4,8,11,0,3,7,10,2,6};
int R[]={1,2,10,11,12,13,20,21,22,23,31,32};
int F[250],I[250],J[4],G[]={1,2,3,0};
int C[7][4][4],e[256],f[250],j[4];
int b=256,c=249,d=49,g=250,n=61948;
int a,x,y,p=6,L=0,M=9;
while(d--) e[d]=d/7*320+d%7;
for(y=25;y--;F[y]=g-=10,n-=2480)
for(x=10;x--;f[c--]=y,n-=8)
for(I[c]=y%24&&x?0:8,d=49;d--;*(Q[c][d]=q+n+e[d])=I[c])
if(!x) *(q+n+e[d]+80)=8;
while(b--) e[b]=10;
e[72]=0;
e[75]=-1;
e[77]=1;
for(g=4;g--;) for(a=7;a--;) for(n=d=0;d<12;d++)
if(B[g][a][d]=B[G[g]][a][r[d]]) C[a][g][n++]=R[d];
Inicio:
for(n=0;n<4;n++) if(!I[c=J[n]=C[a=p][g=0][n]+4])
for(i[c]++,d=49;d--;*Q[c][d]=a+1)
*(Q[c][d]+17048)=0;
else while(1) if(getch()==27)
return 0;
p=rand()%7;
while(n--) for(c=C[p][0][n],d=49;d--;)
*(Q[c][d]+17080)=p+1;
x=c=4;
do{
while(E=kbhit()) getch();
do if(kbhit()) E=getch();
while(!E&&clock()-T<M);
if(E==27&&getch()==27) 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));
x+=E=e[E];
y=E?g:G[g];
for(n=0;n<4;n++)
if(I[j[n]=C[a][y][n]+x]) break;
if(n<4) x=-1;
else{
while(n--) if(++i[b=j[n]]<2)
for(d=49;d--;)
*Q[b][d]=a+1;
for(n=4;n--;J[n]=j[n]) if(--i[b=J[n]]<1)
for(d=49;d--;)
*Q[b][d]=0;
if(c==x) g=y;
else c=x;
}
if(E==10) T=clock();
else x=c;
}while(x+1);
for(n=0;n<4;n++,I[b]=a+1,i[b]--)
Y[y=f[b=J[n]]]++;
do while(Y[x=y]>8)
do{
if(x==y) printf("%c[5;28fLineas=%u",27,++L);
b=F[x];
Y[--x]-=Y[x+1]=Y[x];
c=F[x];
for(n=9;n--;) if(I[++c]+I[++b])
for(I[c]-=I[b]=g=x?I[c]:0,d=49;d--;)
*Q[c][d]-=*Q[b][d]=g;
}while(Y[x+1]);
while(Y[--y]);
goto Inicio;
}