#include<iostream>
#include<queue>
using namespace std;
const int dax[]={0,0,1,-1};
const int day[]={1,-1,0,0};
const int dbx[]={0,0,2,-2};
const int dby[]={2.-2,0,0};
const int dcx[]={1,1,-1,-1};
const int dcy[]={1,-1,1,-1};
int n;
char a[1205][1205];
int ans[1205][1205];
struct node{
int x;
int y;
};
void bfs(){
queue<node> q;
if(a[1][1]!='*'){
q.push({1,1});
ans[1][1]=1;
}
if(a[1][n]!='*'){
q.push({1,n});
ans[1][n]=1;
}
if(a[n][1]!='*'){
q.push({n,1});
ans[n][1]=1;
}
while(q.size()){
int bx=q.front().x;
int by=q.front().y;
q.pop();
if(a[bx][by]=='A'){
for(int i=0;i<4;i++){
if(bx+dax[i]>=1&&bx+dax[i]<=n&&by+day[i]>=1&&by+day[i]<=n&&(ans[bx+dax[i]][by+day[i]]==0||ans[bx+dax[i]][by+day[i]]>ans[bx][by]+1)&&a[bx+dax[i]][by+day[i]]!='*'){
ans[bx+dax[i]][by+day[i]]=ans[bx][by]+1;
q.push({bx+dax[i],by+day[i]});
}
}
}
else if(a[bx][by]=='B'){
for(int i=0;i<4;i++){
if(bx+dbx[i]>=1&&bx+dbx[i]<=n&&by+dby[i]>=1&&by+dby[i]<=n&&(ans[bx+dbx[i]][by+dby[i]]==0||ans[bx+dbx[i]][by+dby[i]]>ans[bx][by]+1)&&a[bx+dbx[i]][by+dby[i]]!='*'){
ans[bx+dbx[i]][by+dby[i]]=ans[bx][by]+1;
q.push({bx+dbx[i],by+dby[i]});
}
}
}
else{
for(int i=0;i<4;i++){
if(bx+dcx[i]>=1&&bx+dcx[i]<=n&&by+dcy[i]>=1&&by+dcy[i]<=n&&(ans[bx+dcx[i]][by+dcy[i]]==0||ans[bx+dcx[i]][by+dcy[i]]>ans[bx][by]+2)&&a[bx+dcx[i]][by+dcy[i]]!='*'){
ans[bx+dcx[i]][by+dcy[i]]=ans[bx][by]+2;
q.push({bx+dcx[i],by+dcy[i]});
}
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
if(n<=1) cout<<0;
else{
bfs();
if(ans[n][n]==0) cout<<"No answer";
else cout<<ans[n][n];
}
return 0;
}