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