#include <bits/stdc++.h>
using namespace std;
int n, m;
string a[20];
int len = 0;
long long ten[10];
map<pair<long long, long long>, int> visited;
queue<pair<long long, long long>> q;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {-1, 1, 0, 0};
bool valid(pair<long long, long long> cur, int dir) {
  int x = cur.first % ten[1] + dx[dir];
  int y = cur.second % ten[1] + dy[dir];
  if (x < 0 || y < 0 || x >= n || y >= m) return false;
  if (a[x][y] == '#') return false;
  for (int i = 0; i < len - 1; i++) {
    if (x == ((cur.first / ten[i]) % 100) &&
        y == ((cur.second / ten[i]) % 100)) {
      return false;
    }
  }
  return true;
}
pair<long long, long long> move(pair<long long, long long> cur, int dir) {
  int x = cur.first % ten[1] + dx[dir];
  int y = cur.second % ten[1] + dy[dir];
  pair<long long, long long> nxt = make_pair(x, y);
  for (int i = 0; i < len - 1; i++) {
    nxt.first += ((cur.first / ten[i]) % 100) * ten[i + 1];
    nxt.second += ((cur.second / ten[i]) % 100) * ten[i + 1];
  }
  return nxt;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ten[0] = 1;
  for (int i = 1; i <= 9; i++) {
    ten[i] = ten[i - 1] * 100;
  }
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  pair<long long, long long> hash = make_pair(0, 0);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (a[i][j] >= '1' && a[i][j] <= '9') {
        hash.first += i * ten[a[i][j] - '1'];
        hash.second += j * ten[a[i][j] - '1'];
        len++;
      }
    }
  }
  q.push(hash);
  visited[hash] = 0;
  int ans = INT_MAX;
  while (!q.empty()) {
    pair<long long, long long> u = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      if (valid(u, i)) {
        pair<long long, long long> nxt = move(u, i);
        if (visited.count(nxt)) continue;
        q.push(nxt);
        visited[nxt] = visited[u] + 1;
        int x = nxt.first % 100;
        int y = nxt.second % 100;
        if (a[x][y] == '@') {
          ans = visited[nxt];
        }
      }
      if (ans != INT_MAX) break;
    }
    if (ans != INT_MAX) break;
  }
  if (ans == INT_MAX)
    cout << "-1\n";
  else
    cout << ans << "\n";
  return 0;
}
