#include <iostream>
#include <iomanip>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <math.h>
#include <algorithm>
#include <string>
#include <fstream>
using namespace std;

struct point {
	int x,y,d;
	point() {}
	point(int X,int Y,int D) : x(X),y(Y),d(D) {}
};
bool operator<(point n1,point n2)
{
	return (n1.d>n2.d);
}

#define bi(a,b) (a>b ? a : b)
#define sm(a,b) (a<b ? a : b)
#define fi(i,j,k) for (i=j;i<k;i++)
#define fd(i,j,k) for (i=j;i>k;i--)

int d[8][2]={0},ans=0;
char grid[10][10];

void bfs(int sx,int sy)
{
	int i;

	priority_queue<point> Q;
	Q.push(point(sx,sy,0));

	int fox[10][10];
	memset(fox,-1,sizeof(fox));

	while (Q.size())
	{
		point p=Q.top();
		Q.pop();

		if (grid[p.x][p.y]=='B')
		{
			ans=p.d;
			break;
		}

		for (i=0;i<8;i++)
		{
			int x=p.x+d[i][0],y=p.y+d[i][1];

			if (x>=0 && x<8 && y>=0 && y<8)
				if (fox[x][y]==-1)
					Q.push(point(x,y,p.d+1));
		}
	}
}


int main()
{
	ifstream f ("DATA4.txt");
	ofstream g ("OUT4.txt");

	int t=5,a,b,sx,sy;

	d[0][0]=-1,d[0][1]=0;
	d[1][0]=1,d[0][1]=0;
	d[2][0]=0,d[2][1]=1;
	d[3][0]=0,d[3][1]=-1;
	d[4][0]=1,d[4][1]=1;
	d[5][0]=-1,d[5][1]=-1;
	d[6][0]=1,d[6][1]=-1;
	d[7][0]=-1,d[7][1]=1;

	while (t--)
	{
		for (a=0;a<8;a++)
			for (b=0;b<8;b++)
			{
				f >> grid[a][b];
				if (grid[a][b]=='A')
					sx=a,sy=b;
			}

		bfs(sx,sy);

		g << ans << endl;
	}

	return 0;
}
