#include<time.h>
#include<stdio.h>
#include<conio.h>
int main()
{
time_t t1,t2;
textmode(C40);
char far *p=(char far *) 0xB8000000L;
int A,c,c1,c2,c3,c4;
int a[83],b[83],x[82];
int n[244],n1[82],n2[82],n3[82];
char E,D[]=" 123456789";
b[0]=b[82]=c=0;
_setcursortype(_NOCURSOR);
printf("\tзддддддддддддддддддддд©\n\t");
printf ("Ёздбдбд©здбдбд©здбдбд©Ё\n\t");
printf ("ЁЁ5Ё Ё2ЁЁ Ё Ё ЁЁ Ё Ё ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё Ё ЁЁ Ё6Ё ЁЁ9Ё Ё ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё Ё ЁЁ Ё Ё ЁЁ Ё Ё ЁЁ\n\t");
printf ("ЁюдададыюдададыюдададыЁ\n\t");
printf ("Ёздбдбд©здбдбд©здбдбд©Ё\n\t");
printf ("ЁЁ Ё4Ё1ЁЁ Ё Ё7ЁЁ Ё Ё ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё Ё ЁЁ5Ё Ё ЁЁ Ё6Ё ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё Ё5ЁЁ Ё Ё2ЁЁ Ё Ё ЁЁ\n\t");
printf ("ЁюдададыюдададыюдададыЁ\n\t");
printf ("Ёздбдбд©здбдбд©здбдбд©Ё\n\t");
printf ("ЁЁ Ё9Ё7ЁЁ Ё8Ё5ЁЁ Ё Ё ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё Ё ЁЁ Ё Ё ЁЁ Ё3Ё5ЁЁ\n\t");
printf ("Ёцдедед╢цдедед╢цдедед╢Ё\n\t");
printf ("ЁЁ Ё5Ё4ЁЁ Ё Ё ЁЁ Ё9Ё6ЁЁ\n\t");
printf ("ЁюдададыюдададыюдададыЁ\n\t");
printf ("юддддддддддддддддддддды\n");
INICIO:
for(c1=-1;++c1<3;) for(c2=-1;++c2<3;)
for(c3=-1;++c3<3;) for(c4=-1;++c4<3;) {n1[c+1]=27*c1 +9*c2;
n2[c+1]=27*c3 +9*c4 +81;
n3[c+1]=27*c1 +9*c3 +162;
x[c+1]=c%9*4+c/9*160+80*c1+2*c3+180;
n[++c]=n[c+81]=n[c+162]=0;
a[c]=*(p+x[c])-48;
b[c]=0;
if(a[c]<0) a[c]=0;
else *(p+x[c]+1)=0x0B;
}
c=1;
E=0;
while(E-13) {*(p+x[c]+1)=0xB0;
*(p+x[c])=D[a[c]];
if(E>47 && E<58) E=77;
else E=0;
while(E<1) E=getch();
*(p+x[c]+1)=0x0B;
if(E==27) return 0;
c+=(E==77)*(c<81);
c-=(E==75)*(c>1);
c+=9*(E==80)*(c<73);
c-=9*(E==72)*(c>9);
if(E==32) E=48;
if(E>47 && E<59) a[c]=E-48;
}
for(c=0;++c<82;){if((A=a[c]))
if(n[n1[c]+A]+n[n2[c]+A]+n[n3[c]+A]<1)
b[c]=n[n1[c]+A]=n[n2[c]+A]=n[n3[c]+A]=1;
if(b[c]<1){a[c]=0;
*(p+x[c]+1)=0x0F;
*(p+x[c])=32;
}
}
c=1;
t1=time(NULL);
while(c){while(b[c]) c++;
if(c>81){t2=time(NULL);
printf("\t %.f\" Pulse ESPACIO\r",difftime(t2+1,t1));
while((E=getch())-32) if(E==27) return 0;
printf("\t \r");
while(b[--c]);
}
else {if((A=a[c])) n[n1[c]+A]=n[n2[c]+A]=n[n3[c]+A]=0;
while(++A<10) {if(n[n1[c]+A]<1)
if(n[n2[c]+A]<1)
if(n[n3[c]+A]<1){n[n1[c]+A]=n[n2[c]+A]=n[n3[c]+A]=1;
*(p+x[c])=D[A];
a[c++]=A;
break;
}
}
if(A>9){a[c]=0;
*(p+x[c])=32;
while(b[--c]);
}
}
}
goto INICIO;
}