import java.util.Scanner;
class YiPanQi{
public int flagNum;
public int step;
public YiPanQi(int flagNum,int step){
this.flagNum=flagNum;
this.step=step;
}
}
class Queue{
public YiPanQi[] qiData=new YiPanQi[65536];
public int front=0;
public int rear=0;
public void push(YiPanQi m){
qiData[rear++]=m;
}
public YiPanQi pop(){
return qiData[front++];
}
public boolean isEmpty(){
return front==rear;
}
}
public class FanQiZi {
public static char[] yuanData=new char[16];
public static int[] visit=new int[75536];
public static int twoToTen(int a[]){
int sum=0;
for(int i=0;i<16;i++){
sum=sum*2+a[i];
}
return sum;
}
public static int[] tenToTwo(int m){
int[] res=new int[16];
int pc=15;
while(m>0){
res[pc--]=m%2;
m/=2;
}
return res;
}
public static int flip(int fl[],int fliposi){
fl[fliposi]=fl[fliposi]==0?1:0;
if(fliposi-4>=0) //up
fl[fliposi-4]=fl[fliposi-4]==0?1:0;
if(fliposi+4<16) //up
fl[fliposi+4]=fl[fliposi+4]==0?1:0; //down
if(fliposi!=0&&fliposi!=4&&fliposi!=8&&fliposi!=12) //left
fl[fliposi-1]=fl[fliposi-1]==0?1:0;
if(fliposi!=3&&fliposi!=7&&fliposi!=11&&fliposi!=15) //right
fl[fliposi+1]=fl[fliposi+1]==0?1:0;
int res=twoToTen(fl);
return res;
}
public static void bFS(int[] stat){
int ori=twoToTen(stat);
visit[ori]=1;
YiPanQi myYiPanQi=new YiPanQi(ori,0);
Queue myQueue=new Queue();
myQueue.push(myYiPanQi);
while(!myQueue.isEmpty()){
YiPanQi tempYiPanQi=myQueue.pop();
int curQi=tempYiPanQi.flagNum;
int curLayer=tempYiPanQi.step;
if(curQi==0||curQi==65535){
System.out.println(curLayer);
return;
}
int[] curQiEr=tenToTwo(curQi);
int tempQi[]=new int[16];
for(int i=0;i<16;i++){
for(int k=0;k<16;k++){
tempQi[k]=curQiEr[k];
}
int flip_num=flip(tempQi,i);
if(visit[flip_num]==0){
YiPanQi nextYiPanQi=new YiPanQi(flip_num,curLayer+1);
myQueue.push(nextYiPanQi);
visit[flip_num]=1;
}
}
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String[] strArr=new String[4];
for(int i=0;i<4;i++){
strArr[i]=sc.next();
}
int yuanData_length=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
yuanData[yuanData_length++]=strArr[i].charAt(j);
}
}
int[] erjizhiData=new int[16];
for(int i=0;i<16;i++){
if(yuanData[i]=='b'){
erjizhiData[i]=1;
}else{
erjizhiData[i]=0;
}
}
bFS(erjizhiData);
}
}