#include <bits/stdc++.h>
using namespace std;
long long int dxk[] = {0, 0, 1, -1, 1, 1, -1, -1};
long long int dyk[] = {1, -1, 0, 0, 1, -1, 1, -1};
long long int ll_max(long long int a, long long int b, long long int c) {
  return max(a, max(b, c));
}
int int_max(int a, int b, int c) { return max(a, max(b, c)); }
long long int ll_min(long long int a, long long int b, long long int c) {
  return min(a, min(b, c));
}
int int_min(int a, int b, int c) { return min(a, min(b, c)); }
long long int max(int a, long long int b) { return max((long long int)a, b); }
long long int min(int a, long long int b) { return min((long long int)a, b); }
long long int min(long long int a, int b) { return min(a, (long long int)b); }
long long int max(long long int a, int b) { return max(a, (long long int)b); }
long long int dx[] = {0, 0, 1, -1};
long long int dy[] = {1, -1, 0, 0};
long long int power(long long int a, long long int b) {
  if (a == 1) return 1;
  if (b == 0) return 1;
  long long int c = power(a, b / 2);
  long long int res = 1;
  if (b % 2) {
    res = (c * c) % 1000000007;
    res *= a;
    res %= 1000000007;
  } else
    res = ((c * c) % 1000000007);
  return res;
}
long long int modInv(long long int a) {
  return power(a, 1000000007 - 2) % 1000000007;
}
long long int fact[1], inv[1];
void factorial(long long int n) {
  fact[0] = 1;
  for (long long int i = 1; i <= n; i++) {
    fact[i] = fact[i - 1] * i;
    fact[i] %= 1000000007;
  }
}
void InvFactorial(long long int n) {
  inv[0] = 1;
  for (long long int i = 1; i <= n; i++) inv[i] = modInv(fact[i]);
}
long long int ncr(long long int n, long long int r) {
  if (n < r || n < 0 || r < 0) return 0;
  long long int b = inv[n - r];
  long long int c = inv[r];
  long long int a = fact[n] * b;
  a %= 1000000007;
  a *= c;
  a %= 1000000007;
  return a;
}
int a[250001], size1[250001];
int l[250001], r[250001], u[250001], d[250001], x[250001], y[250001],
    val[501][501];
int find(int x) {
  if (a[x] == -1) return x;
  return find(a[x]);
}
void insert(int x, int y) {
  x = find(x);
  y = find(y);
  if (x == y) return;
  if (size1[x] <= size1[y]) {
    size1[y] += size1[x] + 1;
    a[x] = y;
    l[y] = min(l[y], l[x]);
    r[y] = max(r[y], r[x]);
    u[y] = min(u[y], u[x]);
    d[y] = max(d[y], d[x]);
    return;
  }
  size1[x] += size1[y] + 1;
  a[y] = x;
  l[x] = min(l[y], l[x]);
  r[x] = max(r[y], r[x]);
  u[x] = min(u[y], u[x]);
  d[x] = max(d[y], d[x]);
}
void solve(int countu) {
  int n;
  scanf("%d", &n);
  memset(a, -1, sizeof(a));
  int count = 1;
  for (long long int i = 1; i < n + 1; i++) {
    for (long long int j = 1; j < n + 1; j++) {
      x[count] = i;
      y[count] = j;
      val[i][j] = count;
      u[count] = i;
      d[count] = i;
      l[count] = j;
      r[count] = j;
      count++;
    }
  }
  long long int ans = 0;
  set<pair<int, int> > s;
  for (long long int i = 0; i < n * n; i++) {
    int d1;
    scanf("%d", &d1);
    for (long long int j = 0; j < 4; j++) {
      int h = x[d1] + dx[j];
      int h1 = y[d1] + dy[j];
      if (s.find({h, h1}) != s.end()) insert(d1, val[h][h1]);
    }
    s.insert({x[d1], y[d1]});
    int j = find(d1);
    ans += min(u[j] - 1, int_min(n - d[j], l[j] - 1, n - r[j]));
  }
  cout << ans << '\n';
}
int main() {
  int t = 1;
  int countu = 1;
  while (t--) {
    solve(countu);
    countu++;
  }
}
