#include <iostream>
#include <cstring>
using namespace std;
int mi=1000;
char map[100][100];
int mark[100][100]={0};
int x,y,n;
int x0,y0;
int a[4]={0,0,1,-1}; //这样下标就从0开始了。
int b[4]={1,-1,0,0};
void dfs(int k)
{
if(x<1||y<1||x>n||y>n) //出界递归结束
{
return;
}
if(k>mi) // !!!关键所在!!!
return; //找最小,超过最小就不用找了,递归结束
if(map[x][y]==‘B‘)
{
mi=k;
return; //找到了也要结束递归
}
mark[x][y]=1;
for(int i=0;i<=3;i++)
{
if(map[x+a[i]][y+b[i]]!=map[x][y]&&!mark[x+a[i]][y+b[i]])
{
x+=a[i];
y+=b[i];
dfs(k+1);
x-=a[i]; //循环内部回溯
y-=b[i];
}
}
mark[x][y]=0; //标记,不能走原路!!!!!循环外部也不要回溯 !!!
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>map[i][j]; //!!!!不能用scanf%c,他可以读取空格。
if(map[i][j]==‘A‘)
{
x=i;
y=j;
}
}
}
dfs(0);
if(mi==1000)
cout<<-1;
else
cout<<mi;
}