fork download
  1. #define W 40
  2. int Y,X,T,L,px[W*W],D[]={-W,-1,1,W};char B[W*W],K[W*W],Ks[W];
  3. t(x){int d=0,s=T;for(L=0;B[x]&7;){
  4. s-=K[px[L++]=x]-1;d=(54202126527627840ll>>2*(d*7+(B[x+=D[d]]&7)))&3;
  5. if(x==*px)return s;}return 0;}
  6. m(x){int o,c=K[x],u=B[x-W],Bu=u&7,l=B[x-1],Bl=l&7,r=0,
  7. i=Bu!=3&&Bu!=4&&Bl!=2&&Bl!=4;
  8. if(x/W>Y+1){for(;--L>=0;)printf("%d %d ",px[L]%W-1,px[L]/W-1);exit(0);}
  9. o=(39>>Bu)&1?57:70;o&=(52>>Bl)&1?42:85;
  10. if(u>7)o&=Bu>4?~64:~6;
  11. if(l>7)o&=Bl>4?~32:~10;
  12. o&=c?c>1?c>2?(r=8*i,96):(r=8,i*30):~0:1;
  13. for(;o;r++,o>>=1)if(o&1)if(B[x]=r,r%8!=1||!t(x))m(x+1);B[x]=0;}
  14. main(){for(;gets(Ks);Y++)for(X=0;Ks[X];X++)
  15. T+=(K[X+1+Y*W+W]=Ks[X]/36)-1;m(W+1);}
Success #stdin #stdout 0s 2020KB
stdin
.....w.b.w..
ww..b...b...
.w.....b....
...wbww..b.b
....b.......
w.w.........
..w......b.b
.....bb.....
.....b.....w
w.ww..b.....
...w......w.
b..w.....b..
stdout
10 11 10 10 10 9 9 9 9 10 9 11 8 11 7 11 7 10 8 10 8 9 7 9 6 9 6 10 6 11 5 11 5 10 5 9 5 8 6 8 7 8 8 8 8 7 7 7 6 7 6 6 6 5 5 5 5 6 5 7 4 7 3 7 3 8 4 8 4 9 3 9 2 9 1 9 1 10 2 10 3 10 4 10 4 11 3 11 2 11 1 11 0 11 0 10 0 9 0 8 1 8 1 7 2 7 2 6 2 5 2 4 1 4 1 5 1 6 0 6 0 5 0 4 0 3 0 2 0 1 0 0 1 0 1 1 1 2 1 3 2 3 2 2 3 2 3 3 3 4 3 5 3 6 4 6 4 5 4 4 5 4 6 4 7 4 7 3 6 3 5 3 4 3 4 2 4 1 3 1 2 1 2 0 3 0 4 0 5 0 6 0 6 1 5 1 5 2 6 2 7 2 7 1 7 0 8 0 9 0 10 0 10 1 9 1 8 1 8 2 8 3 8 4 8 5 9 5 9 4 9 3 10 3 11 3 11 4 11 5 11 6 10 6 9 6 9 7 9 8 10 8 10 7 11 7 11 8 11 9 11 10 11 11