/**********************************************************************************/
/* Problem: b010 "E.跳跳跳" from 2009 校內初選 */
/* Language: C++ */
/* Result: AC (46ms, 884KB) on ZeroJudge */
/* Author: ForTest at 2013-12-26 09:57:13 */
/**********************************************************************************/
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <queue>
using namespace std;
const int Max=201;
char map[Max][Max];
int dis[Max][Max];
int n,m;
struct data{
int x,y;
};
bool In(int x,int y){
return x >= 0 && x < n && y >= 0 && y < m;
}
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int main(){
while(~scanf("%d%d",&n,&m)){
getchar();
vector<data>w[5];
data s,e;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
dis[i][j]=0x7f7f7f7f;
scanf("%c",&map[i][j]);
char & now = map[i][j];
data push = { i , j };
if(now >= '1' && now <= '4')w[ now - '0' ].push_back(push);
else if(now == 'S'){s.x = i;s.y = j;dis[i][j] = 0;}
else if(now == 'E'){e.x = i;e.y = j;}
}
getchar();
}
/*for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
putchar(map[i][j]);
}
puts("");
}*/
queue<data> q;
q.push(s);
while(!q.empty()){
data now=q.front(); q.pop();
if(map[now.x][now.y] >= '1' && map[now.x][now.y] <= '4'){
int cnt = map[now.x][now.y] - '0';
int plus = dis[now.x][now.y];
while(plus % cnt)plus++;
for(vector<data>::iterator i = w[cnt].begin();
i != w[cnt].end(); ++i){
if(dis[(*i).x][(*i).y] > plus + 1){
dis[(*i).x][(*i).y] = plus + 1;
q.push(*i);
}
}
}
for(int i=0;i<4;++i){
data next={now.x + dx[i],now.y + dy[i]};
if(In(next.x , next.y)){
char & pos = map[next.x][next.y];
int & d = dis[next.x][next.y];
if(pos != '#' && d > dis[now.x][now.y] + 1){
d = dis[now.x][now.y] + 1;
q.push(next);
}
}
}
}
/*for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
printf("%d ",dis[i][j]);
}
puts("");
}*/
if(dis[e.x][e.y] == 0x7f7f7f7f)puts("-1");
else printf("%d\n",dis[e.x][e.y]);
}
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKLyogIFByb2JsZW06IGIwMTAgIkUu6Lez6Lez6LezIiBmcm9tIDIwMDkg5qCh5YWn5Yid6YG4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgCi8qICBMYW5ndWFnZTogQysrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgCi8qICBSZXN1bHQ6IEFDICg0Nm1zLCA4ODRLQikgb24gWmVyb0p1ZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgCi8qICBBdXRob3I6IEZvclRlc3QgYXQgMjAxMy0xMi0yNiAwOTo1NzoxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgCiAgCiNpbmNsdWRlIDxpb3N0cmVhbT4gIAojaW5jbHVkZSA8Y3N0ZGlvPiAgCiNpbmNsdWRlIDx2ZWN0b3I+ICAKI2luY2x1ZGUgPGFsZ29yaXRobT4gIAojaW5jbHVkZSA8Y3N0cmluZz4gIAojaW5jbHVkZSA8c3RyaW5nPiAgCiNpbmNsdWRlIDxjc3RkbGliPiAgCiNpbmNsdWRlIDxjbWF0aD4gIAojaW5jbHVkZSA8cXVldWU+ICAKICAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAogIApjb25zdCBpbnQgTWF4PTIwMTsgIApjaGFyIG1hcFtNYXhdW01heF07ICAKaW50IGRpc1tNYXhdW01heF07ICAKaW50IG4sbTsgIAogIApzdHJ1Y3QgZGF0YXsgIAogICAgaW50IHgseTsgIAp9OyAgCiAgCmJvb2wgSW4oaW50IHgsaW50IHkpeyAgCiAgICByZXR1cm4geCA+PSAwICYmIHggPCBuICYmIHkgPj0gMCAmJiB5IDwgbTsgICAKfSAgCiAgCmludCBkeFtdPXswLDEsMCwtMX07ICAKaW50IGR5W109ezEsMCwtMSwwfTsgIAogIAppbnQgbWFpbigpeyAgCiAgICB3aGlsZSh+c2NhbmYoIiVkJWQiLCZuLCZtKSl7ICAKICAgICAgICBnZXRjaGFyKCk7ICAKICAgICAgICB2ZWN0b3I8ZGF0YT53WzVdOyAgCiAgICAgICAgZGF0YSBzLGU7ICAKICAgICAgICBmb3IoaW50IGk9MDtpPG47KytpKXsgIAogICAgICAgICAgICBmb3IoaW50IGo9MDtqPG07KytqKXsgIAogICAgICAgICAgICAgICAgZGlzW2ldW2pdPTB4N2Y3ZjdmN2Y7ICAKICAgICAgICAgICAgICAgIHNjYW5mKCIlYyIsJm1hcFtpXVtqXSk7ICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjaGFyICYgbm93ID0gbWFwW2ldW2pdOyAgCiAgICAgICAgICAgICAgICBkYXRhIHB1c2ggPSB7IGkgLCBqIH07ICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZihub3cgPj0gJzEnICYmIG5vdyA8PSAnNCcpd1sgbm93IC0gJzAnIF0ucHVzaF9iYWNrKHB1c2gpOyAgCiAgICAgICAgICAgICAgICBlbHNlIGlmKG5vdyA9PSAnUycpe3MueCA9IGk7cy55ID0gajtkaXNbaV1bal0gPSAwO30gIAogICAgICAgICAgICAgICAgZWxzZSBpZihub3cgPT0gJ0UnKXtlLnggPSBpO2UueSA9IGo7fSAgCiAgICAgICAgICAgIH0gIAogICAgICAgICAgICBnZXRjaGFyKCk7ICAKICAgICAgICB9ICAKICAgICAgICAvKmZvcihpbnQgaT0wO2k8bjsrK2kpeyAKICAgICAgICAgICAgZm9yKGludCBqPTA7ajxtOysrail7IAogICAgICAgICAgICAgICAgcHV0Y2hhcihtYXBbaV1bal0pOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgcHV0cygiIik7IAogICAgICAgIH0qLyAgCiAgICAgICAgcXVldWU8ZGF0YT4gcTsgIAogICAgICAgIHEucHVzaChzKTsgIAogICAgICAgIHdoaWxlKCFxLmVtcHR5KCkpeyAgCiAgICAgICAgICAgIGRhdGEgbm93PXEuZnJvbnQoKTsgcS5wb3AoKTsgIAogICAgICAgICAgICBpZihtYXBbbm93LnhdW25vdy55XSA+PSAnMScgJiYgbWFwW25vdy54XVtub3cueV0gPD0gJzQnKXsgIAogICAgICAgICAgICAgICAgaW50IGNudCA9IG1hcFtub3cueF1bbm93LnldIC0gJzAnOyAgCiAgICAgICAgICAgICAgICBpbnQgcGx1cyA9IGRpc1tub3cueF1bbm93LnldOyAgCiAgICAgICAgICAgICAgICB3aGlsZShwbHVzICUgY250KXBsdXMrKzsgIAogICAgICAgICAgICAgICAgZm9yKHZlY3RvcjxkYXRhPjo6aXRlcmF0b3IgaSA9IHdbY250XS5iZWdpbigpOyAgCiAgICAgICAgICAgICAgICAgICAgaSAhPSB3W2NudF0uZW5kKCk7ICsraSl7ICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGlzWygqaSkueF1bKCppKS55XSA+IHBsdXMgKyAxKXsgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzWygqaSkueF1bKCppKS55XSA9IHBsdXMgKyAxOyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2goKmkpOyAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0gIAogICAgICAgICAgICAgICAgICAgIH0gIAogICAgICAgICAgICB9ICAKICAgICAgICAgICAgZm9yKGludCBpPTA7aTw0OysraSl7ICAKICAgICAgICAgICAgICAgIGRhdGEgbmV4dD17bm93LnggKyBkeFtpXSxub3cueSArIGR5W2ldfTsgIAogICAgICAgICAgICAgICAgaWYoSW4obmV4dC54ICwgbmV4dC55KSl7ICAKICAgICAgICAgICAgICAgICAgICBjaGFyICYgcG9zID0gbWFwW25leHQueF1bbmV4dC55XTsgIAogICAgICAgICAgICAgICAgICAgIGludCAgJiBkID0gZGlzW25leHQueF1bbmV4dC55XTsgIAogICAgICAgICAgICAgICAgICAgIGlmKHBvcyAhPSAnIycgJiYgZCA+IGRpc1tub3cueF1bbm93LnldICsgMSl7ICAKICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGRpc1tub3cueF1bbm93LnldICsgMTsgIAogICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2gobmV4dCk7ICAKICAgICAgICAgICAgICAgICAgICB9ICAKICAgICAgICAgICAgICAgIH0gIAogICAgICAgICAgICB9ICAKICAgICAgICB9ICAKICAgICAgICAvKmZvcihpbnQgaT0wO2k8bjsrK2kpeyAKICAgICAgICAgICAgZm9yKGludCBqPTA7ajxtOysrail7IAogICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLGRpc1tpXVtqXSk7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBwdXRzKCIiKTsgCiAgICAgICAgfSovICAKICAgICAgICBpZihkaXNbZS54XVtlLnldID09IDB4N2Y3ZjdmN2YpcHV0cygiLTEiKTsgIAogICAgICAgIGVsc2UgcHJpbnRmKCIlZFxuIixkaXNbZS54XVtlLnldKTsgIAogICAgfSAgCn0gIA==