#include <stdio.h> #include <stdlib.h> /* ID+ DFS */ char a[5][5]; int flag; int check() { int i,j; char c=a[0][0]; for (i=0;i<4;i++) for (j=0;j<4;j++) if (a[i][j]!=c) return 0; return 1; } void DFS(int depth,int start,int step) { int row,column,i; if (depth>step) { if (check()) flag=1; return; } else { for (i=start;i+(step-depth)<=16;i++) { row=i/4; column=i%4; if (row>0) a[row-1][column]=(a[row-1][column]=='b')?'w':'b'; if (row<3) a[row+1][column]=(a[row+1][column]=='b')?'w':'b'; if (column>0) a[row][column-1]=(a[row][column-1]=='b')?'w':'b'; if (column<3) a[row][column+1]=(a[row][column+1]=='b')?'w':'b'; a[row][column]=(a[row][column]=='b')?'w':'b'; DFS(depth+1,i+1,step); if (flag==1) return; /* UNDO */ if (row>0) a[row-1][column]=(a[row-1][column]=='b')?'w':'b'; if (row<3) a[row+1][column]=(a[row+1][column]=='b')?'w':'b'; if (column>0) a[row][column-1]=(a[row][column-1]=='b')?'w':'b'; if (column<3) a[row][column+1]=(a[row][column+1]=='b')?'w':'b'; a[row][column]=(a[row][column]=='b')?'w':'b'; } } } int main() { int i,step; freopen("input.in","r",stdin); for (i=0;i<4;i++) gets(a[i]); if (check()) { printf("0/n"); return 0; } for (step=1;step<=16;step++) { flag=0; DFS(1,0,step); if (flag==1) { printf("%d/n",step); break; } } if (flag==0) printf("Impossible/n"); }