#include <bits/stdc++.h>
int a[2][505][505], b[2][505][505];
int pos[250005][2];
int od[250005];
int n;
long long int ans = 0;
int lb(int x) { return x & (-x); }
void add(int x, int *w) {
  while (x <= n) {
    w[x]++;
    x += lb(x);
  }
}
void sub(int x, int *w) {
  while (x <= n) {
    w[x]--;
    x += lb(x);
  }
}
int que(int x, int *w) {
  int ans = 0;
  while (x) {
    ans += w[x];
    x -= lb(x);
  }
  return ans;
}
int main() {
  memset(a, 0, sizeof(a));
  memset(b, 0, sizeof(b));
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= n; j++) {
      pos[i * n + j][0] = i + 1;
      pos[i * n + j][1] = j;
      add(i + 1, a[0][j]);
      add(n - i, a[1][j]);
      add(j, b[0][i + 1]);
      add(n - j + 1, b[1][i + 1]);
    }
  }
  for (int i = 1; i <= n * n; i++) {
    int st = 0, mn = 501, x, y;
    scanf("%d", &x);
    y = que(pos[x][0], a[0][pos[x][1]]);
    if (mn > y) {
      mn = y;
      st = 1;
    }
    y = que(n - pos[x][0] + 1, a[1][pos[x][1]]);
    if (mn > y) {
      mn = y;
      st = 2;
    }
    y = que(pos[x][1], b[0][pos[x][0]]);
    if (mn > y) {
      mn = y;
      st = 3;
    }
    y = que(n - pos[x][1] + 1, b[1][pos[x][0]]);
    if (mn > y) {
      mn = y;
      st = 4;
    }
    int l, r;
    l = pos[x][0];
    r = pos[x][1];
    sub(l, a[0][r]);
    sub(n - l + 1, a[1][r]);
    sub(r, b[0][l]);
    sub(n - r + 1, b[1][l]);
    ans += mn - 1;
  }
  printf("%lld", ans);
}
