#include <bits/stdc++.h>
using namespace std;
const int inv[] = {2, 3, 0, 1};
const int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
struct Info {
  int x, y, step, snake;
};
int n, m, len;
char a[20][20];
int b[20][20];
int snake;
int tailx, taily;
void build(int x, int y, int t) {
  if (t > len) return;
  for (int i = 0; i < 4; i++) {
    int tx = x + dir[i][0];
    int ty = y + dir[i][1];
    if (tx < 1 || tx > n || ty < 1 || ty > m) continue;
    if (a[tx][ty] == t + '0') {
      snake = (snake << 2) | i;
      build(tx, ty, t + 1);
      break;
    }
  }
}
bool check(int sn, int xx, int yy) {
  int p[20][20];
  memset(p, 0, sizeof(p));
  int x = xx, y = yy;
  p[x][y] = 1;
  if (x < 1 || x > n || y < 1 || y > m) return 0;
  for (int i = len - 2, j = 2; i >= 0; i--, j++) {
    int t = sn >> (i << 1);
    t &= 3;
    x += dir[t][0], y += dir[t][1];
    if (x < 1 || x > n || y < 1 || y > m || p[x][y]) return 0;
    p[x][y] = j;
    if (j == len) tailx = x, taily = y;
  }
  return 1;
}
queue<Info> qq;
set<pair<pair<int, int>, pair<int, int> > > ss;
int main() {
  cin >> n >> m;
  int fx, fy, lx, ly;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      cin >> a[i][j];
      if (isdigit(a[i][j])) {
        len = max(len, a[i][j] - '0');
        if (a[i][j] == '1') fx = i, fy = j;
      }
      if (a[i][j] == '@') lx = i, ly = j;
    }
  build(fx, fy, 2);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (isdigit(a[i][j])) a[i][j] = '.';
  a[lx][ly] = '.';
  qq.push({fx, fy, 0, snake});
  while (!qq.empty()) {
    Info info = qq.front();
    qq.pop();
    for (int i = 0; i < 4; i++) {
      int tx = info.x + dir[i][0];
      int ty = info.y + dir[i][1];
      if (tx < 1 || tx > n || ty < 1 || ty > m || a[tx][ty] == '#') continue;
      int sn = info.snake;
      sn = sn >> 2;
      int t = (1 << ((len - 2) << 1));
      sn = sn | (inv[i] * t);
      if (!check(sn, tx, ty)) continue;
      if (tx == lx && ty == ly) {
        cout << info.step + 1 << endl;
        return 0;
      }
      if (ss.find(make_pair(make_pair(tx, ty), make_pair(tailx, taily))) !=
          ss.end())
        continue;
      ss.insert(make_pair(make_pair(tx, ty), make_pair(tailx, taily)));
      Info tinfo = {tx, ty, info.step + 1, sn};
      qq.push(tinfo);
    }
  }
  puts("-1");
  return 0;
}
