const fx:array[1..4]of longint=(1,0,-1,0); fy:array[1..4]of longint=(0,1,0,-1);var map:array[0..5,0..5]of char; ans,a,b,c,d:longint;procedure init;var i,j:longint; sss:char;begin for i:=1 to 4 do for j:=1 to 4 do begin read(sss); while(sss<>'B')and(sss<>'W')and(sss<>'O')do read(sss); map[i,j]:=sss; if sss='O' then begin if a=0 then begin a:=i; b:=j;end else begin c:=i; d:=j;end; end; end;end;function flag:boolean;var i:longint;begin for i:=1 to 4 do begin if(map[1,i]=map[2,i])and(map[2,i]=map[3,i])and(map[3,i]=map[4,i])then exit(true); if(map[i,1]=map[i,2])and(map[i,2]=map[i,3])and(map[i,3]=map[i,4])then exit(true); end; if(map[1,1]=map[2,2])and(map[2,2]=map[3,3])and(map[3,3]=map[4,4])then exit(true); if(map[1,4]=map[2,3])and(map[2,3]=map[3,2])and(map[3,2]=map[4,1])then exit(true); exit(false);end;procedure try(now,x,x1,y1,x2,y2:longint);{状态设计得很好}var i:longint;begin if x>=ans then exit; if flag then begin ans:=x; exit; end; if (now and 1)=1 then//hei begin for i:=1 to 4 do ifmap[x1+fx[i],y1+fy[i]]='B' then begin map[x1+fx[i],y1+fy[i]]:='O'; map[x1,y1]:='B'; try(1-now,x+1,x1+fx[i],y1+fy[i],x2,y2);{这样设置相当妙} map[x1+fx[i],y1+fy[i]]:='B'; map[x1,y1]:='O'; end; for i:=1 to 4 do ifmap[x2+fx[i],y2+fy[i]]='B' then begin map[x2+fx[i],y2+fy[i]]:='O'; map[x2,y2]:='B'; try(1-now,x+1,x1,y1,x2+fx[i],y2+fy[i]); map[x2+fx[i],y2+fy[i]]:='B'; map[x2,y2]:='O'; end; end; if (now and 1)=0 then//bai begin for i:=1 to 4 do ifmap[x1+fx[i],y1+fy[i]]='W' then begin map[x1+fx[i],y1+fy[i]]:='O'; map[x1,y1]:='W'; try(1-now,x+1,x1+fx[i],y1+fy[i],x2,y2); map[x1+fx[i],y1+fy[i]]:='W'; map[x1,y1]:='O'; end; for i:=1 to 4 do ifmap[x2+fx[i],y2+fy[i]]='W' then begin map[x2+fx[i],y2+fy[i]]:='O'; map[x2,y2]:='W'; try(1-now,x+1,x1,y1,x2+fx[i],y2+fy[i]); map[x2+fx[i],y2+fy[i]]:='W'; map[x2,y2]:='O'; end; end;end;begin init; ans:=5; try(0,0,a,b,c,d); try(1,0,a,b,c,d); write(ans);end.