#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << setprecision(20);
  int N;
  cin >> N;
  vector<int> P(N * N, 0);
  for (ll i = 0; i < (ll)N * N; ++i) cin >> P[i];
  vector<int> d(N * N, 0), s(N * N, 0);
  for (ll y = 0; y < (ll)N; ++y)
    for (ll x = 0; x < (ll)N; ++x)
      d[y * N + x] = min({x, N - x - 1, y, N - y - 1});
  const int dirs[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
  ll total = 0;
  for (ll i = 0; i < (ll)N * N; ++i) {
    int p = P[i] - 1;
    s[p] = 1;
    queue<int> q;
    q.push(p);
    total += d[p];
    unordered_set<int> t;
    t.insert(p);
    while (!q.empty()) {
      int xy = q.front();
      int x = xy % N, y = xy / N;
      q.pop();
      for (auto &dir : dirs) {
        int nx = x + dir[0], ny = y + dir[1];
        int nxy = ny * N + nx;
        if (nx < 0 || nx >= N || ny < 0 || ny >= N || t.find(nxy) != t.end())
          continue;
        if (d[nxy] > d[xy] + 1 || (s[xy] && d[nxy] > d[xy])) {
          --d[nxy];
          q.push(nxy);
          t.insert(nxy);
        }
      }
    }
  }
  cout << total << endl;
}
