#include <bits/stdc++.h>
using namespace std;
const double eps(1e-8);
typedef struct snack {
  int x, y;
  int s;
  bool operator<(const snack &q) const {
    if (x != q.x) return x < q.x;
    if (y != q.y) return y < q.y;
    return s < q.s;
  }
  void clear() { x = y = s = 0; }
} sna;
map<sna, int> mp;
int ans;
int p[20][20];
int n, m, head, last;
char g[20][20];
queue<sna> q;
int l;
void call(int &x, int &y, int s) {
  if (s == 0)
    y--;
  else if (s == 2)
    y++;
  else if (s == 1)
    x--;
  else
    x++;
}
void dfs(int x, int y, int num, sna s, int sta) {
  int jl[12];
  if (x < 0 || y < 0 || x >= n || y >= m || g[x][y] == '#') return;
  if (l == 1 && sta == s.s) {
    return;
  }
  s.x = x;
  s.y = y;
  s.s = s.s >> 2;
  s.s += sta * (1 << ((l - 1) * 2));
  if (mp[s]) return;
  mp[s] = num;
  int nx = x, ny = y;
  int dx = s.s;
  for (int i = (l); i >= (1); --i) {
    jl[i] = dx % 4;
    dx /= 4;
  }
  for (int i = (1); i <= (l); ++i) {
    call(nx, ny, jl[i]);
    if (nx == x && ny == y) {
      mp[s] = 10000000;
      return;
    }
  }
  if (g[x][y] == '@') {
    ans = min(ans, num);
    return;
  }
  q.push(s);
}
void spfa(sna s) {
  head = 0;
  last = 1;
  q.push(s);
  while (!q.empty()) {
    if (ans != 1000000000) return;
    sna s = q.front();
    q.pop();
    int x = s.x, y = s.y, num = mp[s];
    dfs(x + 1, y, num + 1, s, 1);
    dfs(x - 1, y, num + 1, s, 3);
    dfs(x, y + 1, num + 1, s, 0);
    dfs(x, y - 1, num + 1, s, 2);
  }
}
int cal(int a, int b, int a1, int b1) {
  if (a == a1) {
    if (b1 == b - 1) return 0;
    return 2;
  } else {
    if (a1 == a - 1) return 1;
    return 3;
  }
}
int main() {
  ans = 1000000000;
  scanf("%d %d", &n, &m);
  sna s;
  s.clear();
  for (int i = 0; i < (n); ++i) scanf("%s", g[i]);
  l = 0;
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (m); ++j) {
      if (g[i][j] >= '1' && g[i][j] <= '9') {
        l = max(l, g[i][j] - '0');
        p[g[i][j] - '0'][0] = i;
        p[g[i][j] - '0'][1] = j;
      }
    }
  l--;
  s.s = 0;
  s.x = p[1][0];
  s.y = p[1][1];
  for (int i = (1); i <= (l); ++i) {
    s.s = s.s * 4 + cal(p[i][0], p[i][1], p[i + 1][0], p[i + 1][1]);
  }
  spfa(s);
  if (ans == 1000000000) ans = -1;
  cout << ans << endl;
}
