#include<bits/stdc++.h>
using namespace std;
int n,f[105][105];
char a[105][105];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
bool flag[105][105][4];
struct node{
int x,y;
};
void bfs(int xa,int ya) {
queue<node> q;
q.push((node){xa,ya});
f[xa][ya]=0,flag[xa][ya][0]=flag[xa][ya][1]=flag[xa][ya][2]=flag[xa][ya][3]=1;
while(!q.empty()) {
node dq=q.front();
q.pop();
for(int i=0;i<4;++i) {
int xx=dq.x+dx[i],yy=dq.y+dy[i];
int c;
if(flag[dq.x][dq.y][i]) c=f[dq.x][dq.y];
else c=f[dq.x][dq.y]+1;
if(xx>=1 && xx<=n && yy>=1 && yy<=n && a[xx][yy]!='x' && (f[xx][yy]==-1 || c<=f[xx][yy])) {
if(c<f[xx][yy]) flag[xx][yy][0]=flag[xx][yy][1]=flag[xx][yy][2]=flag[xx][yy][3]=0;
flag[xx][yy][i]=1;
f[xx][yy]=c;
q.push((node){xx,yy});
if(a[xx][yy]=='B') return;
}
}
}
}
int main() {
memset(f,-1,sizeof(f));
cin>>n;
int x,y,xb,yb;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) {
cin>>a[i][j];
if(a[i][j]=='A') x=i,y=j;
if(a[i][j]=='B') xb=i,yb=j;
}
bfs(x,y);
cout<<f[xb][yb];
return 0;
}