#include <iostream>
using namespace std;
#define SIZE 4
char map[SIZE][SIZE];
char map1[SIZE][SIZE];
int Dx[5]={0,0,0,1,-1};
int Dy[5]={0,1,-1,0,0};
int num[16];
int n=0;
int minn=20;
void fan(int step);
bool same();
void fanqi(int x,int y);
bool safe(int x,int y);
int main()
{
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
cin >>map[i][j];
}
fan(0);
if(minn==20)
cout <<"Impossible";
else
cout <<minn;
return 0;
}
void fan(int step)
{
int x;
int y;
if(step==16)
{
n=0;
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
map1[i][j]=map[i][j];
}
for(int i=0;i<16;i++)
{
if(num[i]==1)
{
x=i/4;
y=i%4;
fanqi(x,y);
n++;
}
}
if(same())
{
if(n<minn)
minn=n;
}
return;
}
num[step]=0;
fan(step+1);
num[step]=1;
fan(step+1);
}
void fanqi(int x,int y)
{
int mx;
int my;
for(int i=0;i<5;i++)
{
mx=x+Dx[i];
my=y+Dy[i];
if(safe(mx,my))
{
if(map1[mx][my]=='b')
map1[mx][my]='w';
else
map1[mx][my]='b';
}
}
}
bool safe(int x,int y)
{
bool ret=true;
if(x<0||y<0||x>=SIZE||y>=SIZE)
ret=false;
return ret;
}
bool same()
{
bool ret=true;
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
{
if(map1[i][j]=='b')
ret=false;
}
}
if(ret==false)
{
ret=true;
for(int i=0;i<SIZE;i++)
{
for(int j=0;j<SIZE;j++)
{
if(map1[i][j]=='w')
ret=false;
}
}
}
return ret;
}