
#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
char a[2000][2000];int b[2000][2000],cs[50][50],n,m,wyy,jbl;
bool flag=false;
void adg(char ds,int x,int y)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]==ds&&i!=x&&j!=y)
{
wyy=i;
jbl=j;
//cout << wyy << " " << jbl << endl;
return ;
}
}
}
}
void bfs(int p,int q)
{
int x,y,h,t;
int xb[100000],yb[100000],lg[90005];
h=0;
t=1;
xb[1]=p;
yb[1]=q;
lg[1]=0;
b[p][q]=1;
do
{
h++;
for(int i=0;i<4;i++)
{
x=xb[h]+dx[i];
y=yb[h]+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&b[x][y]==0&&a[x][y]!='1')
{
if(a[x][y]>=65&&a[x][y]<=90)
{
t++;
adg(a[x][y],x,y);
xb[t]=wyy;
yb[t]=jbl;
lg[t]=lg[h]+1;
}
if(a[x][y]==48)
{
t++;
xb[t]=x;
yb[t]=y;
lg[t]=lg[h] +1;
b[x][y]=1;
}
if(x==n-1&&y==m-1)
{
cout << lg[t];
flag=true;
return ;
}
//cout << xb[t] << " " << yb[t] << endl;
}
}
}while(h<t);
}
int main()
{
cin >> n >> m;
for(int i=0;i<n;i++)
{
string s;
cin >> s;
for(int j=0;j<m;j++)
{
a[i][j]=s[j];
}
}
bfs(0,0);
/*for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout << a[i][j];
}
cout << endl;
}*/
if(flag==false) cout << "No Solution.";
return 0;
}