#include <bits/stdc++.h>
using namespace std;
struct Pair {
  int x, y;
};
struct Node {
  Pair Snk[13];
  int step;
};
int dir[4][2] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}};
int n, m, ans;
bool flag;
char ss[17][17];
int v[17][17][17 * 17];
queue<Node> q;
Node H;
void dfs(int x, int y) {
  int i, xx, yy;
  for (i = 0; i < 4; i++) {
    xx = x + dir[i][0];
    yy = y + dir[i][1];
    if (xx >= 0 && xx < n && yy >= 0 && yy < m && ss[xx][yy] == ss[x][y] - 1) {
      H.Snk[(int)(ss[xx][yy] - '0')].x = xx;
      H.Snk[(int)(ss[xx][yy] - '0')].y = yy;
      dfs(xx, yy);
    }
  }
  return;
}
void bfs(int h) {
  int xx, yy, i, j;
  Node tp, nn;
  while (!q.empty()) q.pop();
  q.push(H);
  while (!q.empty()) {
    tp = q.front();
    q.pop();
    for (i = 0; i < 4; i++) {
      xx = tp.Snk[1].x + dir[i][0];
      yy = tp.Snk[1].y + dir[i][1];
      if (xx >= 0 && xx < n && yy >= 0 && yy < m &&
          v[xx][yy][tp.step + 1] == false) {
        if (ss[xx][yy] == '@') {
          flag = true;
          ans = tp.step + 1;
          return;
        } else if (ss[xx][yy] != '#') {
          bool ff = false;
          for (j = 1; j < h; j++) {
            if (xx == tp.Snk[j].x && yy == tp.Snk[j].y) {
              ff = true;
              break;
            }
          }
          if (ff == true) continue;
          v[xx][yy][tp.step + 1] = 1;
          nn.Snk[1].x = xx;
          nn.Snk[1].y = yy;
          for (j = 2; j <= h; j++) nn.Snk[j] = tp.Snk[j - 1];
          nn.step = tp.step + 1;
          q.push(nn);
        }
      }
    }
  }
}
int main() {
  char ch;
  Pair tp;
  int i, j, hh;
  while (scanf("%d%d", &n, &m) != EOF) {
    for (i = 0; i < n; i++) scanf("%s", ss[i]);
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++) {
        if (ss[i][j] > '0' && ss[i][j] <= '9' && ss[i][j] > ch) {
          ch = ss[i][j];
          tp.x = i;
          tp.y = j;
        }
      }
    memset(v, 0, sizeof(v));
    hh = (int)(ch - '0');
    H.Snk[hh] = tp;
    H.step = 0;
    flag = false;
    dfs(H.Snk[hh].x, H.Snk[hh].y);
    bfs(hh);
    if (flag == false)
      puts("-1");
    else
      printf("%d\n", ans);
  }
}
