#include<queue>
#include<iostream>
using namespace std;
#define re register
struct Node{
int x,y,ans;
}Used;
queue<Node>q;
int N,Map[101][101],ans;
bool vis[101][101];
char c;
int TypeX[4]={0,1,0,-1};
int TypeY[4]={1,0,-1,0};
int main(){
cin>>N;
for(re int i=1;i<=N;++i)
for(re int j=1;j<=N;++j){
cin>>c;
if(c=='A'){
Map[i][j]=114;
Used.x=i;
Used.y=j;
}
if(c=='B')Map[i][j]=514;
if(c=='+')Map[i][j]=1;
}
Used.ans=0;
q.push(Used);
while(!q.empty()){
Used=q.front();
q.pop();
if(Map[Used.x][Used.y]==514){
cout<<Used.ans;
return 0;
}
if(!vis[Used.x][Used.y]){
vis[Used.x][Used.y]=1;
for(re int i=0;i<4;++i){
Node f;
f.x=Used.x+TypeX[i];
f.y=Used.y+TypeY[i];
f.ans=Used.ans+1;
if(f.x>0&&f.y>0&&f.x<=N&&f.y<=N){
if(Map[f.x][f.y]!=Map[Used.x][Used.y])
q.push(f);
}
}
}
}
cout<<-1;
return 0;
}