fx:array[1..4] of longint=(-1,0,1,0);
fy:array[1..4] of longint=(0,-1,0,1);
var
a: char;
ok:array[0..1001,0..1001]of boolean;
d,f,p:array[0..100001]of longint;
i,ii,j,k,x,y,x1,y1,x2,y2,t,w:longint;
b:array[0..1001,0..1001] of longint;
q,m,n:integer;
begin
fillchar(ok,sizeof(ok),true);
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read (a);
if a='1' then ok[i,j]:=false;
b[i,j]:=ord(a);
end;
readln;
end;
t:=0;
w:=1;
d[1]:=1;
f[1]:=1;
p[1]:=0;
ok[1,1]:=false;
while t<w do
begin
inc(t);
x:=d[t];
y:=f[t];
k:=p[t];
if (x=n) and (y=m) then begin writeln(k);halt; end;
for i:=1 to 4 do
begin
x1:=x+fx[i];
y1:=y+fy[i];
if not ok[x1,y1] then continue;
if (ok[x1,y1]) and (x1>0) and (x1<=n) and (y1>0) and (y1<=m)
and (b[x1,y1]=48)
then
begin
inc(w);
ok[x1,y1]:=false;
d[w]:=x1;
f[w]:=y1;
p[w]:=k+1;
end;
if (b[x1,y1]>=65) and (b[x1,y1]<=90) and (x1>0) and (x1<=n)
and (y1>0) and (y1<=m) and ( ok[x1,y1])
then
for ii:=1 to n do
begin
q:=0;
for j:=1 to m do
if (j<>y1) and (b[x1,y1]=b[ii,j]) or (ii<>x1) and (b[x1,y1]=b[ii,j]) then
begin
inc(w);
ok[x1,y1]:=false;
d[w]:=x1;
f[w]:=y1;
p[w]:=k+1;
q:=1;
break;
end;
if q=1 then break;
end;
end;
end;
write('No Solution.');
end.