#include <bits/stdc++.h>
using namespace std;
int n;
long long dist[502][502];
bool used[502][502];
void upd(int x, int y, int z) {
  if (!used[x][y]) z++;
  if (dist[x][y] <= z) return;
  dist[x][y] = z;
  if (x > 0) upd(x - 1, y, z);
  if (x < n) upd(x + 1, y, z);
  if (y > 0) upd(x, y - 1, z);
  if (y < n) upd(x, y + 1, z);
}
int main() {
  static int p[250010];
  scanf("%d", &n);
  for (int i = 0; i < n * n; i++) scanf("%d", &p[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      dist[i][j] = 100000;
      used[i][j] = false;
    }
  for (int i = 0; i < n; i++) {
    upd(0, i, 0);
    upd(n - 1, i, 0);
    upd(i, 0, 0);
    upd(i, n - 1, 0);
  }
  long long ret = 0;
  for (int i = 0; i < n * n; i++) {
    int x = (p[i] - 1) / n;
    int y = (p[i] - 1) % n;
    ret += dist[x][y] - 1;
    used[x][y] = true;
    upd(x, y, dist[x][y] - 1);
  }
  cout << ret << endl;
}
