#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
_AX=0x13;
geninterrupt(0x10);
clock_t T;
srand(time(NULL));
char far*Q=(char far*) 0xA0000000L;
char E,A[][12]={"000000111100",
"000020222000",
"000300033300",
"000400444000",
"000055055000",
"006600066000",
"000770077000"};
int B[]={6,2,10,7,3,0,11,8,4,1,9,5};
int N[]={1,2,11,12,13,14,22,23,24,25,34,35};
int C[12],D[12],Y[25],I[275],i[275];
int a,c,d,v,w,x,y,n=121,z=6,M=9,L;
for(L=c=y=0;y<25;y++,n+=2472)
for(Y[y]=x=0;x<11;x++,c++,n+=8)
if(I[c]=!y||y>23||!x||x>9)
for(d=i[c]=n,v=7;v--;)
for(d+=313,w=7;w--;)
*(Q+d++)=8;
else i[c]=n;
Inicio:
a=z;
z=rand()%7;
for(n=12;n--;)
for(d=17849+N[n]/11*2560+N[n]%11*8,v=7;v--;)
for(d+=313,w=7;w--;)
*(Q+d++)=A[z][n]-48;
printf("%c[5;28fLineas=%u",27,L);
printf("%c[3;28f Nivel=%u",27,10-M);
x=c=15;
while(++n<12)
if(D[n]=C[n]=A[a][n]-48)
if(!I[N[n]+c])
for(I[N[n]+c]=C[n],d=i[N[n]+c],v=7;v--;)
for(d+=313,w=7;w--;)
*(Q+d++)=C[n];
else while(1) if(getch()==27) return 0;
T=clock();
while(a+1){while(E=kbhit()) getch();
do if(kbhit()) E=getch();
while(!E&&clock()-T<M);
if(E==27&&getch()==27) return 0;
if(E=='-') M+=M<10;
if(E=='+') M-=M>1;
for(n=12;n--;)
if(C[n])
for(d=i[N[n]+c],v=7;v--;)
for(I[N[n]+c]=0,d+=313,w=7;w--;)
*(Q+d++)=0;
if(E==77||E==75) x=c+E-76;
else if(E!=72) x=c+(E=11);
else for(n=12;n--;)
D[n]=C[B[n]];
while(++n<12)
if(D[n]&&I[N[n]+x])
for(x=c,n=a=12;a--;)
D[a]=C[a];
for(c=x,n=12;n--;)
if(C[n]=D[n])
for(I[N[n]+c]=C[n],d=i[N[n]+c],v=7;v--;)
for(d+=313,w=7;w--;)
*(Q+d++)=C[n];
if(E==11) T=clock();
else a=0;
}
y=c/11;
do for(n=11*y+1,Y[y]=0,x=9;x--;)
if(I[n+x])
if(++Y[y]>8)
for(L++,Y[y]=0,a=9;a--;n++)
for(I[n]=0,d=i[n],v=7;v--;)
for(d+=313,w=7;w--;)
*(Q+d++)=0;
while(++y<24&&y<c/11+4);
while(--y)
if(!Y[x=y])
while(x--)
if(Y[y]=Y[x])
for(Y[x]=0,a=11*y,c=11*x,x=10;--x;)
if(I[++a]=I[++c])
for(I[c]=0,d=i[a],n=i[c],v=7;v--;)
for(d+=313,n+=313,w=7;w--;)
*(Q+n++)-=*(Q+d++)=I[a];
goto Inicio;
}