#include<dos.h>
#include<stdio.h>
#include<conio.h>
char ficha[8][16]={
" 000000 ",
" 0000000000 ",
" 000000000000 ",
" 00000000000000 ",
" 00000000000000 "};
char far*Q,far*q=(char far*)0xA0000000;
char S[][3]={"0-1","1-0","1/2"," "};
char D[]="012345678036147258048246";
char T[10][3],R[]="%c[%u;%uf%.3s";
char H[10][4],I[2][8],G[10],E;
char J[10][10],M[10][10];
int B[10],C[10]={9};
int L[10],V[10],W[10];
int P[242],p[484];
int t=1,w=3,y=21755,ply=9;
int c,j,n,v,x;
void figura(f,F){
Q=q+f/3*7680-f%3*24+3631;
for(w=242;w--;*(Q+p[w])=*(Q+p[483-w])=P[w]?F:1);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
printf("%c[2;25fBlancas Rojas",27);
for(v=5;v--;w=3,y-=4992)
do{
x=!v&&w?1211:v*5120+w*32+1147;
for(n=16;n--;*(q+x+n*320)=*(q+y+n*320)=7);
for(n=y-x+1,y=x;n--;*(q+x+n)=*(q+x+n+5120)=7);
}while(w--);
for(n=v=w=y=0;y<22;y++,w+=298)
for(x=22;x--;p[v++]=w++)
if(y>2&&y<11&&x>2&&x<19) P[v]=ficha[y-3][x-3]!=32;
for(y=3;y--;)
for(x=3;x--;figura(c,1),B[c++]=1)
printf("%c[12;%uf%c",27,10+3*x,T[c+1][0]=97+x),
printf("%c[%u;7f%c",27,9-3*y,T[c+1][1]=49+y);
for(v=24;v--;H[c=D[v]-48][G[c]++]=v/3);
for(v=10;v--;w=v%2,V[v]=!w-w,W[v]=w*2);
Inicio:
t=!t;
for(x=v=ply+1;--v>n;) //Reinicio de contadores
for(w=x-v;w--;J[w][v+w]=W[w]);
while(c=C[n]--) //Casilla siguiente
if(B[--c]){
B[c]=0;
C[++n]=9;
for(x=G[c];x--;)
if(++I[t][H[c][x]]>2) C[n]=0;
if(n==ply&&C[n]) J[C[n]=0][n]=1;
t=!t;
}
if(n){
J[0][--n]=1;
if(!n){
for(L[j]=y=0;y++<ply&&!L[j];)
if(!J[y-1][y]) L[j]=y;
M[j++][0]=C[0]+1;
}
else for(x=n+1,y=0;y++<ply-n;x++) //Minimax
if(v=J[y-1][x]-J[y][x])
if(V[y]==(v>0)-(v<0)) J[y][x]+=v;
B[c=C[n]]=1;
for(x=G[c];x--;I[!t][H[c][x]]--);
goto Inicio;
}
do{ //Teclado
figura(M[n][0]-1,1);
n+=(E==77)-(E==75);
v=L[n+=n<0?j:n==j?-j:0];
for(y=v+!v,x=y+t;y;)
printf(R,27,x/2*2+4,25+x%2*12,S[y==v?t!=y%2:3]),
printf(R,27,--x/2*2+4,33-x%2*4,T[c=M[n][--y]]);
figura(--c,t?4:7);
while(kbhit()) getch();
while(!(E=getch()));
for(y=4;y--;)
for(x=4;x--;printf(R,27,4+y*2,25+x*4,S[3]));
}while(E!=13);
printf(R,27,4,37-t*12,S[y=v==1?!t:--ply?3:2]);
while(y<3) if(getch()==27) return 0;
for(x=G[c];x--;I[t][H[c][x]]++);
C[j=n=0]=9;
B[c]=0;
goto Inicio;
}