#include <bits/stdc++.h>
const long double PI = acos(-1);
using namespace std;
inline long long mod(long long n, long long m) {
  long long ret = n % m;
  if (ret < 0) ret += m;
  return ret;
}
long long gcd(long long a, long long b) {
  if (a == 0)
    return b;
  else
    return gcd(b % a, a);
}
void solution() {
  long long n;
  cin >> n;
  set<long long> r[n + 2], c[n + 2];
  long long mat[n + 2][n + 2];
  long long dst[n + 2][n + 2];
  vector<pair<long long, long long> > pos(n * n + 1);
  long long val = 1;
  for (long long i = 1; i <= n; i++) {
    for (long long j = 1; j <= n; j++) {
      pos[val] = pair<long long, long long>(i, j);
      mat[i][j] = val++;
    }
  }
  for (long long i = 0; i <= n + 1; i++) {
    mat[0][i] = mat[i][0] = mat[i][n + 1] = mat[n + 1][i] = -1;
  }
  for (long long i = 0; i <= n + 1; i++) {
    for (long long j = 0; j <= n + 1; j++) {
      dst[i][j] = 1e18;
      r[i].insert(j);
      c[j].insert(i);
    }
  }
  long long ans = 0;
  for (long long i = 0; i < n * n; i++) {
    long long st;
    cin >> st;
    long long x = pos[st].first;
    long long y = pos[st].second;
    vector<pair<long long, long long> > vis;
    deque<pair<long long, long long> > q;
    q.push_back(pair<long long, long long>(x, y));
    vis.push_back(pair<long long, long long>(x, y));
    dst[x][y] = 0;
    while (q.size() > 0) {
      long long cx = q.front().first;
      long long cy = q.front().second;
      q.pop_front();
      if (cx == 0 || cx == n + 1 || cy == 0 || cy == n + 1) {
        ans += dst[cx][cy];
        break;
      }
      auto it = c[cy].find(cx);
      ++it;
      long long add1 = *it;
      --it;
      --it;
      long long sub1 = *it;
      if (dst[cx][cy] + (mat[add1][cy] != -1) < dst[add1][cy]) {
        dst[add1][cy] = dst[cx][cy] + (mat[add1][cy] != -1);
        vis.push_back(pair<long long, long long>(add1, cy));
        if (mat[add1][cy] == -1)
          q.push_front(pair<long long, long long>(add1, cy));
        else
          q.push_back(pair<long long, long long>(add1, cy));
      }
      if (dst[cx][cy] + (mat[sub1][cy] != -1) < dst[sub1][cy]) {
        dst[sub1][cy] = dst[cx][cy] + (mat[sub1][cy] != -1);
        vis.push_back(pair<long long, long long>(sub1, cy));
        if (mat[sub1][cy] == -1)
          q.push_front(pair<long long, long long>(sub1, cy));
        else
          q.push_back(pair<long long, long long>(sub1, cy));
      }
      it = r[cx].find(cy);
      ++it;
      add1 = *it;
      --it;
      --it;
      sub1 = *it;
      if (dst[cx][cy] + (mat[cx][add1] != -1) < dst[cx][add1]) {
        dst[cx][add1] = dst[cx][cy] + (mat[cx][add1] != -1);
        vis.push_back(pair<long long, long long>(cx, add1));
        if (mat[cx][add1] == -1)
          q.push_front(pair<long long, long long>(cx, add1));
        else
          q.push_back(pair<long long, long long>(cx, add1));
      }
      if (dst[cx][cy] + (mat[cx][sub1] != -1) < dst[cx][sub1]) {
        dst[cx][sub1] = dst[cx][cy] + (mat[cx][sub1] != -1);
        vis.push_back(pair<long long, long long>(cx, sub1));
        if (mat[cx][sub1] == -1)
          q.push_front(pair<long long, long long>(cx, sub1));
        else
          q.push_back(pair<long long, long long>(cx, sub1));
      }
    }
    for (pair<long long, long long> p : vis) dst[p.first][p.second] = 1e18;
    r[x].erase(y);
    c[y].erase(x);
  }
  cout << ans << '\n';
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solution();
}
