#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;
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
char E,far*D[49]={(char far*)0xA0000000};
char B[4][7][12]={"001111000000",
"000100011100",
"000010111000",
"000110001100",
"000110110000",
"000100111000",
"000110011000"};
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 I[250],Q[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,p=6;
int a,g,n,x,y,L=48,M=9;
while(d--)
D[d]=D[0]+d/7*320+d%7;
while(b--) e[b]=10;
e[72]=0;
e[75]=-1;
e[77]=1;
Q[249]=61948;
for(y=25;y--;Q[c]-=2480)
for(x=10;x--;f[c--]=y,Q[c]=Q[c+1]-8)
if(I[c]=!x||y%24<1) for(n=80*!x,d=49;d--;)
*(Q[c]+D[d])=*(Q[c]+D[d]+n)=8;
for(g=4;g--;L=0)
for(a=7;a--;)
for(n=d=0;d<12;d++)
if(B[g][a][d]=B[G[g]][a][r[d]]-L)
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[d])=a+1;
*(Q[c]+D[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[d]+17080)=p+1;
x=c=4;
T=clock();
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>3){
while(n--)
if(++i[b=j[n]]<2) for(d=49;d--;)
*(Q[b]+D[d])=a+1;
for(n=4;n--;J[n]=j[n])
if(--i[b=J[n]]<1) for(d=49;d--;)
*(Q[b]+D[d])=0;
if(c==x) g=y;
else c=x;
T=clock();
}
else if(E!=10) x=c;
}while(x==c);
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=10*x;
c=b-10;
Y[--x]-=Y[x+1]=Y[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[d])-=*(Q[b]+D[d])=g;
}while(Y[x+1]);
while(Y[--y]);
goto Inicio;
}