#include <iostream>
#include <math.h>
using namespace std;
char info[5][5];
void read ()
{
for (int i=1; i<=4; i++)
{
for (int j=1; j<=4; j++)
cin>>info[i][j];
}
}
int arr[25];
int coins[5][5];
int _1Dto2D ()
{
int k=1;
int count = 0;
for (int i=1; i<=4; i++)
{
for (int j=1; j<=4; j++)
{
coins[i][j]=arr[k];
if (arr[k]==1) count++;
k++;
}
}
return count;
}
char rs[5][5];
int x_xq[]={+1, +0, -1, +0};
int y_xq[]={+0, -1, +0, +1};
void latxu ()
{
//Cop:
for (int i=1; i<=4; i++)
{
for (int j=1; j<=4; j++)
rs[i][j]=info[i][j];
}
for (int i=1; i<=4; i++)
{
for (int j=1; j<=4; j++)
{
if (coins[i][j]==1)
{
if (rs[i][j]=='b') rs[i][j]='w';
else rs[i][j]='b';
for (int k=0; k<4; k++)
{
int X=j+x_xq[k];
int Y=i+y_xq[k];
if (X>=1 && X<=4 && Y>=1 && Y<=4)
{
if (rs[Y][X]=='b') rs[Y][X]='w';
else rs[Y][X]='b';
}
}
}
}
}
}
int check ()
{
char init = rs[1][1];
for (int i=1; i<=4; i++)
{
for (int j=1; j<=4; j++)
{
if (rs[i][j]!=init) return 0;
}
}
return 1;
}
char tt[5][5];
int t2[5][5];
int Ans = 25;
void sinhNP (int u)
{
if (u>16)
{
int x = _1Dto2D ();
latxu ();
if (check()==1) Ans = min (Ans, x);
}
else
{
arr[u]=0;
sinhNP (u+1);
arr[u]=1;
sinhNP (u+1);
}
}
int main ()
{
read ();
sinhNP (1);
if (Ans != 25) cout<<Ans;
else cout<<"Impossible";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2hhciBpbmZvWzVdWzVdOwp2b2lkIHJlYWQgKCkKewoJZm9yIChpbnQgaT0xOyBpPD00OyBpKyspCgl7CgkJZm9yIChpbnQgaj0xOyBqPD00OyBqKyspCgkJCWNpbj4+aW5mb1tpXVtqXTsKCX0KfQoKaW50IGFyclsyNV07CmludCBjb2luc1s1XVs1XTsKaW50IF8xRHRvMkQgKCkKewoJaW50IGs9MTsKCWludCBjb3VudCA9IDA7Cglmb3IgKGludCBpPTE7IGk8PTQ7IGkrKykKCXsKCQlmb3IgKGludCBqPTE7IGo8PTQ7IGorKykKCQl7CgkJCWNvaW5zW2ldW2pdPWFycltrXTsKCQkJaWYgKGFycltrXT09MSkgY291bnQrKzsKCQkJaysrOwoJCX0KCX0KCXJldHVybiBjb3VudDsKfQoKY2hhciByc1s1XVs1XTsKaW50IHhfeHFbXT17KzEsICswLCAtMSwgKzB9OwppbnQgeV94cVtdPXsrMCwgLTEsICswLCArMX07CnZvaWQgbGF0eHUgKCkKewoJLy9Db3A6Cglmb3IgKGludCBpPTE7IGk8PTQ7IGkrKykKCXsKCQlmb3IgKGludCBqPTE7IGo8PTQ7IGorKykKCQkJcnNbaV1bal09aW5mb1tpXVtqXTsKCX0KCWZvciAoaW50IGk9MTsgaTw9NDsgaSsrKQoJewoJCWZvciAoaW50IGo9MTsgajw9NDsgaisrKQoJCXsKCQkJaWYgKGNvaW5zW2ldW2pdPT0xKQoJCQl7CgkJCQlpZiAocnNbaV1bal09PSdiJykgcnNbaV1bal09J3cnOwoJCQkJZWxzZSByc1tpXVtqXT0nYic7CgkJCQlmb3IgKGludCBrPTA7IGs8NDsgaysrKQoJCQkJewoJCQkJCWludCBYPWoreF94cVtrXTsKCQkJCQlpbnQgWT1pK3lfeHFba107CgkJCQkJaWYgKFg+PTEgJiYgWDw9NCAmJiBZPj0xICYmIFk8PTQpCgkJCQkJewoJCQkJCQlpZiAocnNbWV1bWF09PSdiJykgcnNbWV1bWF09J3cnOwoJCQkJCQllbHNlIHJzW1ldW1hdPSdiJzsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0KCmludCBjaGVjayAoKQp7CgljaGFyIGluaXQgPSByc1sxXVsxXTsKCWZvciAoaW50IGk9MTsgaTw9NDsgaSsrKQoJewoJCWZvciAoaW50IGo9MTsgajw9NDsgaisrKQoJCXsKCQkJaWYgKHJzW2ldW2pdIT1pbml0KSByZXR1cm4gMDsKCQl9Cgl9CglyZXR1cm4gMTsKfQoKY2hhciB0dFs1XVs1XTsKaW50IHQyWzVdWzVdOwoKaW50IEFucyA9IDI1Owp2b2lkIHNpbmhOUCAoaW50IHUpCnsKCWlmICh1PjE2KQoJewoJCWludCB4ID0gXzFEdG8yRCAoKTsKCQlsYXR4dSAoKTsKCQlpZiAoY2hlY2soKT09MSkgQW5zID0gbWluIChBbnMsIHgpOwoJfQoJZWxzZQoJewoJCWFyclt1XT0wOwoJCXNpbmhOUCAodSsxKTsKCQlhcnJbdV09MTsKCQlzaW5oTlAgKHUrMSk7IAoJfQp9CgppbnQgbWFpbiAoKQp7CglyZWFkICgpOwoJc2luaE5QICgxKTsKCWlmIChBbnMgIT0gMjUpIGNvdXQ8PEFuczsKCWVsc2UgY291dDw8IkltcG9zc2libGUiOwoJcmV0dXJuIDA7Cn0=