#include <bits/stdc++.h>
using namespace std;
char a[20][20];
int premask, vis[16][16][65536];
int n, m, k;
int go[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
struct snake {
  int x, y, mask;
  snake(){};
  snake(int X, int Y, int Mask) { x = X, y = Y, mask = Mask; }
};
int find(int x, int y, char cur) {
  if (a[x - 1][y] == cur + 1) return 0;
  if (a[x][y + 1] == cur + 1) return 1;
  if (a[x + 1][y] == cur + 1) return 2;
  if (a[x][y - 1] == cur + 1) return 3;
}
bool judge(int tx, int ty, snake cur) {
  int x = cur.x, y = cur.y, mask = cur.mask;
  for (int i = 1; i <= k - 2; i++, mask >>= 2) {
    x += go[mask % 4][0];
    y += go[mask % 4][1];
    if (x == tx && y == ty) return true;
  }
  return false;
}
int main() {
  scanf("%d %d\n", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      scanf("%c", &a[i][j]);
      if (a[i][j] >= '1' && a[i][j] <= '9') k = max(k, a[i][j] - '0');
    }
    scanf("\n");
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (a[i][j] >= '1' && a[i][j] < k + '0')
        premask |= (find(i, j, a[i][j]) << (2 * (a[i][j] - '1')));
    }
  queue<pair<snake, int> > Q;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (a[i][j] == '1') {
        vis[i][j][premask] = 1;
        Q.push(pair<snake, int>{snake(i, j, premask), 0});
      }
  int ans = -1;
  while (!Q.empty()) {
    pair<snake, int> cur = Q.front();
    Q.pop();
    if (a[cur.first.x][cur.first.y] == '@') {
      ans = cur.second;
      break;
    }
    for (int i = 0; i <= 3; i++) {
      int tx = cur.first.x + go[i][0];
      int ty = cur.first.y + go[i][1];
      int newmask =
          ((cur.first.mask & ((1 << (2 * k - 4)) - 1)) << 2) | (i ^ 2);
      if (a[tx][ty] == '#' || tx < 1 || tx > n || ty < 1 || ty > m ||
          vis[tx][ty][newmask])
        continue;
      if (judge(tx, ty, cur.first)) continue;
      vis[tx][ty][newmask] = 1;
      Q.push(pair<snake, int>{snake(tx, ty, newmask), cur.second + 1});
    }
  }
  cout << ans;
  return 0;
}
