1 #include <iostream>
2 using namespace std;
3 int num=0;
4 int minnum=100;
5 void flip(int step);
6 void fanzhuan(int x,int y);
7 char map[4][4];
8 bool same();
9 bool safe(int x,int y);
10 int Dx[4]={0,0,1,-1};
11 int Dy[4]={1,-1,0,0};
12 int data[4];
13 int n[16]={0};
14 int main()
15 {
16 for(int i=0;i<4;i++)
17 {
18 for(int j=0;j<4;j++)
19 {
20 cin >>map[i][j];
21 }
22 }
23
24 flip(0);
25 if(minnum<1000000)
26 {
27 cout <<minnum<<endl;
28 }
29 else
30 {
31 cout <<"Impossible"<<endl;
32 }
33 return 0;
34 }
35
36
37
38 void flip(int row,int col,int deep)
39 {
40
41 if(deep==step)
42 {
43 flag=isOver();
44 return;
45 }
46 if(flag || row==5)
47 {
48 return;
49 }
50 flip(row,col);
51 if(col<4)
52 {
53 dfs(row,col+1,deep+1);
54 }
55 else
56 {
57 dfs(row+1,1,deep+1);
58 }
59 flip(row,col);
60 if(col<4)
61 {
62 dfs(row,col+1,deep);
63 }
64 else
65 {
66 dfs(row+1,1,deep);
67 }
68 return;
69 }
70
71
72
73
74
75
76
77 void fanzhuan(int x,int y)
78 {
79 int mx;
80 int my;
81 if(safe(x,y))
82 {
83 if(map[x][y]=='b')
84 map[x][y]='w';
85 else map[x][y]='b';
86 }
87 for(int i=0;i<4;i++)
88 {
89 mx=x+Dx[i];
90 my=y+Dy[i];
91 if(safe(mx,my))
92 {
93 if(map[mx][my]=='b')
94 map[mx][my]='w';
95 else map[mx][my]='b';
96 }
97 }
98 }
99 bool safe(int x,int y)
100 {
101 bool ret=true;
102 if(x>=4||x<0||y>=4||y<0)
103 ret=false;
104 return ret;
105 }
106 bool same()
107 {
108 bool ret=true;
109 for(int i=0;i<4;i++)
110 {
111 for(int j=0;j<4;j++)
112 {
113 if(map[i][j]!='b')
114 ret=false;
115 }
116 }
117 if(ret==false)
118 {
119 ret=true;
120 for(int i=0;i<4;i++)
121 {
122 for(int j=0;j<4;j++)
123 {
124 if(map[i][j]!='w')
125 ret=false;
126 }
127 }
128 }
129 return ret;
130 }