#include <map>
#include <set>
#include <cmath>
#include <queue>
#include<bitset>
#include <cstdio>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include<utility>
using namespace std;
char s[4][4];
char ss[4][4];
const int maxnum=((1<<16));
vector<int> v[17];
void chuli(){
for(int i=0;i<maxnum;i++){
int num_1=0;
int ii=i;
while(ii!=0){
int is=ii&1;
if(is){
num_1++;
}
ii=ii>>1;
}
v[num_1].push_back(i);
}
}
bool is_kuang(int x,int y){
return (x>=0&&x<4)&&(y>=0&&y<4);
}
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
bool is_hao(char ss[4][4]){
if(ss[0][0]=='b'){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(ss[i][j]!='b')return 0;
}
}
}else{
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(ss[i][j]!='w')return 0;
}
}
}
return 1;
}
bool is_true(int a){
int wei=1;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
ss[i][j]=s[i][j];
}
}
while(a!=0){
int is=a&1;
if(is){
int x=wei/4;
int y=wei%4-1;
if(wei==4||wei==8||wei==12||wei==16){
x=wei/4-1;
y=3;
}
if(ss[x][y]=='b'){
ss[x][y]='w';
}else{
ss[x][y]='b';
}
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(is_kuang(xx,yy)){
if(ss[xx][yy]=='b'){
ss[xx][yy]='w';
}else{
ss[xx][yy]='b';
}
}
}
}
wei++;
a=a>>1;
}
if(!is_hao(ss)){
return 0;
}else{
return 1;
}
}
int main(){
chuli();
for(int i=0;i<4;i++){
scanf("%s",s[i]);
}
bool youjie=0;
for(int i=0;i<17;i++){
int cnt=v[i].size();
for(int j=0;j<cnt;j++){
int a=v[i][j];
if(is_true(a)){
youjie=1;
printf("%d\n",i);
return 0;
}
}
}
if(youjie==0){
printf("Impossible\n");
}
}