#include<bits/stdc++.h>
using namespace std;
int n,m;
int jia[5][3]={{0,0,0},{0,1,0},{0,0,1},{0,-1,0},{0,0,-1}};
struct wz
{
int a,b;
int s;
}c,q;
string nn[305];
int m2[305][305]={};
void fd(wz &wy)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(nn[i][j]==nn[wy.a][wy.b]&&(i!=wy.a||j!=wy.b))
{
wy.a=i;
wy.b=j;
break;
}
}
}
}
void dd()
{
queue<wz>mm;
mm.push(q);
wz ne,wy;
for(int i=1;;i++)
{
if(mm.empty())
{
break;
}
wy=mm.front();
mm.pop();
if(nn[wy.a][wy.b]=='=')
{
cout<<wy.s;
break;
}
if(nn[wy.a][wy.b]>='A'&&nn[wy.a][wy.b]<='Z')
{
fd(wy);
}
m2[wy.a][wy.b]=1;
for(int i=1;i<=4;i++)
{
int x=wy.a,y=wy.b,ss=wy.s+1;
for(int i=1;i<=4;i++)
{
if(!m2[wy.a][wy.b]&&x+jia[i][1]>-1&&x+jia[i][1]<n&&y+jia[i][2]>-1&&y+jia[i][2]<m&&nn[x+jia[i][1]][y+jia[i][2]]!='#')
{
ne.a=x+jia[i][1];
ne.b=y+jia[i][2];
ne.s=ss;
mm.push(ne);
}
}
}
}
cout<<-1;
}
int main()
{
cin>>n>>m;
c.a=c.b=q.a=q.b=-1;
c.s=q.s=0;
for(int i=0;i<n;i++)
{
cin>>nn[i];
if(c.a<0&&nn[i].find("=")!=string::npos)
{
c.a=i;
c.b=nn[i].find("=");
}
if(q.a<0&&nn[i].find("@")!=string::npos)
{
q.a=i;
q.b=nn[i].find("@");
}
}
dd();
return 0;
}
只输出-1