#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<memory.h>
char num[101][101]={1};
int cou[101][2]={0}/*队列*/, pan[101][101]={0}/*判定是否走过*/, kun[101]/*答案*/;
int dx[4]={1, -1, 0, 0};/*行走状态:横坐标*/
int dy[4]={0, 0, 1, -1};/*行走状态:纵坐标*/
int n, m, ans=0;
void lnm()
{
int i, j, k=0, t=1, p, x, y;
cou[0][0]=0;
cou[0][1]=0; //标示出发点;
pan[0][0]=1; //队列初始化;
kun[0]=0; //
while(k!=t)
{
for(p=0; p<4; p++)
{
x=cou[k][0]+dx[p];
y=cou[k][1]+dy[p];
if(pan[x][y]==0&&num[x][y]!='1'&&x>=0&&y>=0&&x<n&&y<m) //判定是否能行走的条件
{
cou[t][0]=x;
cou[t][1]=y;
pan[x][y]=1; //进入队列;
kun[t]=kun[k]+1;
if(num[x][y]>='A'&&num[x][y]<='Z') //传送门条件
{
for(i=0; i<n; i++)
for(j=0; j<m; j++)
{
if(num[i][j]==num[x][y]&&(i!=x||j!=y)) //搜索另一个传送门
{
cou[t][0]=i;
cou[t][1]=j; //位置传送
}
}
}
if(cou[t][0]==n-1&&cou[t][1]==m-1) //得出答案的条件
ans=kun[t];
t++;
}
}
k++;
}
}
int main()
{
int i, j, a, b, c;
freopen("boss.in", "r", stdin);
freopen("boss.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=0; i<n; i++) //输入地图
scanf("%s", &num[i]);
lnm();
if(ans!=0) //有答案则输出答案,无答案则输出No Solution.
printf("%d", ans);
else
printf("No Solution.");
system("pause");
return 0;
}