#include <cstdio>
#include<cmath>
void oslobodi(bool d[500][500],bool u[500][500],int n,int x,int y)
{
    if(!u[y][x])
        d[y][x]=1;
    if(y>0)
        oslobodi(d,u,n,x,y-1);
    if(y<n-1)
        oslobodi(d,u,n,x,y+1);
    if(x>0)
        oslobodi(d,u,n,x-1,y);
    if(x<n-1)
        oslobodi(d,u,n,x+1,y);
    return;
}
bool d[500][500],p[500][500];
int main()
{
    bool u[500][500];
    int n,m;
    int tr=0;
    float r,rm;
    char a;
    scanf("%d %d",&n,&m);
    int x,y,dx,dy,xr,yr;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            scanf("%c",&a);
            if(a=='A')
                {
                    x=j;
                    y=i;
                }
            else if(a=='B')
                {
                    dx=j;
                    dy=i;
                }
            else if(a=='X')
                u[i][j]=1;
            else
                u[i][j]=0;
        }
    u[y][x]=0;
    oslobodi(d,u,n,x,y);
    u[dy][dx]=0;
    oslobodi(p,u,n,x,y);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            for(int ii=0;ii<n;ii++)
                for(int jj=0;jj<n;jj++)
                    if(d[i][y]&&p[ii][jj])
                        {
                            if(tr=0)
                            {
                                 r=sqrt(pow((ii-i),2)+pow((jj-j),2));
                                 rm=r;
                                 tr=1;
                                 xr=fabs(jj-j);
                                 yr=fabs(ii-i);
                            }
                            r=sqrt(pow((ii-i),2)+pow((jj-j),2));
                            if(r<rm)
                                {
                                    rm=r;
                                    xr=fabs(jj-j);
                                    yr=fabs(ii-i);
                                }
                        }
    if(xr>yr)
        printf("%d",xr);
    else
        printf("%d",yr);
    return 0;
}