#include <bits/stdc++.h>
#define mp make_pair
#define xx first
#define yy second
using namespace std;
int n;
int res=INT_MAX;
void dfs1(pair<int,int> sada,vector< vector<bool> > &gde,vector< vector<char> > &mapa){
    if(sada.xx>=n || sada.xx<0 || sada.yy>=n || sada.yy<0) return;
    if(mapa[sada.xx][sada.yy]=='X') return;
    if(gde[sada.xx][sada.yy]) return;
    gde[sada.xx][sada.yy]=true;
 //   cout<<sada.xx<<" "<<sada.yy<<endl;
    dfs1(mp(sada.xx+1,sada.yy),gde,mapa);
    dfs1(mp(sada.xx-1,sada.yy),gde,mapa);
    dfs1(mp(sada.xx,sada.yy+1),gde,mapa);
    dfs1(mp(sada.xx,sada.yy-1),gde,mapa);
}
map< pair< pair<int,int>, pair<int,int> > , bool> bio;
void dfs2(pair<int,int> sada,vector< vector<bool> > &gdea,vector< vector<bool> > &gdeb,vector< vector<char> > mapa,pair<int,int> prosli){
    if(sada.xx>=n || sada.xx<0 || sada.yy>=n || sada.yy<0) return;
    if(bio[mp(sada,prosli)]) return;
    bio[mp(sada,prosli)]=true;
    pair<int,int> sled=prosli;
    if(gdea[sada.xx][sada.yy]){
        sled=sada;
    }
    bio[mp(sada,sled)]=true;
    if(gdeb[sada.xx][sada.yy]){
        res=min(res,max(abs(sada.xx-sled.xx),abs(sada.yy-sled.yy)));
        return;
    }
    dfs2(mp(sada.xx+1,sada.yy),gdea,gdeb,mapa,sled);
    dfs2(mp(sada.xx-1,sada.yy),gdea,gdeb,mapa,sled);
    dfs2(mp(sada.xx,sada.yy+1),gdea,gdeb,mapa,sled);
    dfs2(mp(sada.xx,sada.yy-1),gdea,gdeb,mapa,sled);
}
int main()
{
    int m;
    cin>>n>>m;
    vector<char> pom(n);
    vector< vector<char> > mapa(n,pom);
    pair<int,int> a;
    pair<int,int> b;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>mapa[i][j];
            if(mapa[i][j]=='A'){
                a=mp(i,j);
            }
            if(mapa[i][j]=='B'){
                b=mp(i,j);
            }
        }
    }
    vector<bool> pom2(n,false);
    vector< vector<bool> > gdeb(n,pom2);
    vector< vector<bool> > gdea(n,pom2);
    dfs1(b,gdeb,mapa);
    dfs1(a,gdea,mapa);
   // cout<<"Proso";
    dfs2(a,gdea,gdeb,mapa,a);
    cout<<res-1;
    return 0;
}