#include<stdio.h>
#include<conio.h>
#include<graphics.h>
int main()
{
int gdriver=1,gmode,errorcode;
initgraph(&gdriver,&gmode,"");
setcolor(3);
setbkcolor(0);
cleardevice();
rectangle(81,17,226,162);
rectangle(81,17,228,164);
int b[83];
int n[244],n1[82],n2[82],n3[82];
int x[82],y[82];
int A,c;
char E,D[]=" 123456789";
int a[]={0,
5,0,2,0,0,0,0,0,0,
0,0,0,0,6,0,9,0,0,
0,0,0,0,0,0,0,0,0,
0,4,1,0,0,7,0,0,0,
0,0,0,5,0,0,0,6,0,
0,0,5,0,0,2,0,0,0,
0,9,7,0,8,5,0,0,0,
0,0,0,0,0,0,0,3,5,
0,5,4,0,0,0,0,9,6};
b[0]=b[82]=c=0;
for(b[1]=0;b[1]<3;b[1]++)
for(b[2]=0;b[2]<3;b[2]++)
for(b[3]=0;b[3]<3;b[3]++)
for(b[4]=0;b[4]<3;b[4]++){n1[c+1]=27*b[1] +9*b[2];
n2[c+1]=27*b[3] +9*b[4] +81;
n3[c+1]=27*b[1] +9*b[3] +162;
x[c+1]=12+c%9*2;
y[c+1]= 4+c/9*2;
n[++c]=n[c+81]=n[c+162]=0;
rectangle(8*x[c]-13,8*y[c]-13,8*x[c]+3,8*y[c]+3);
if(b[2]+b[4]<1) rectangle(8*x[c]-14,8*y[c]-14,8*x[c]+35,8*y[c]+35);
}
c=1;
while(E!=13) {gotoxy(x[c],y[c]);
printf("%c",D[a[c]]);
setcolor(1);
rectangle(8*x[c]-11,8*y[c]-11,8*x[c],8*y[c]);
if((E==32)+(E>47 && E<58)) E=77;
else E=0;
while(E==0) E=getch();
setcolor(0);
rectangle(8*x[c]-11,8*y[c]-11,8*x[c],8*y[c]);
if(E==27) return 0;
if(E==77 && c<81) c++;
if(E==75 && c>1) c--;
if(E==80 && c<73) c+=9;
if(E==72 && c>9) c-=9;
if(E==32) a[c]=0;
if(E>47 && E<59) a[c]=E-48;
}
for(c=1;c<82;c++){A=a[c];
b[c]=0;
if(A)
if(n[n1[c]+A]+n[n2[c]+A]+n[n3[c]+A]) {a[c]=0;
gotoxy(x[c],y[c]);
printf(" ");
}
else {setcolor(1);
rectangle(8*x[c]-11,8*y[c]-11,8*x[c],8*y[c]);
gotoxy(x[c],y[c]);
printf("%c",D[A]);
n[n1[c]+A]=n[n2[c]+A]=n[n3[c]+A]=++b[c];
}
}
c=1;
while(c){while(b[c]) c++;
if(c>81){gotoxy(14,23);
printf("Pulse ESPACIO");
while((E=getch())!=32) if(E==27) return 0;
while(b[--c]);
}
else {A=a[c];
if(A) n[n1[c]+A]=n[n2[c]+A]=--n[n3[c]+A];
while(++A<10) {if(n[n1[c]+A]) continue;
if(n[n2[c]+A]) continue;
if(n[n3[c]+A]) continue;
n[n1[c]+A]=n[n2[c]+A]=++n[n3[c]+A];
gotoxy(x[c],y[c]);
printf("%c",D[A]);
a[c++]=A;
break;
}
if(A>9) {a[c]=0;
gotoxy(x[c],y[c]);
printf(" ");
while(b[--c]);
}
}
}
return 0;
}