#include <bits/stdc++.h>
using namespace std;
int n, m, k, h, t;
int dp[505][505];
bool vis[505][505];
long long ans;
struct node {
  int x, y;
};
node q[505 * 505];
bool b[505 * 505];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      dp[i][j] = min({i - 1, j - 1, n - i, n - j}), vis[i][j] = 1;
  for (int i = 1; i <= n * n; i++) {
    cin >> k;
    int x = (k - 1) / n + 1, y = (k - 1) % n + 1;
    ans += dp[x][y];
    vis[x][y] = 0;
    h = 0;
    q[t = 1] = {x, y};
    while (h < t) {
      node u = q[++h];
      if (u.x > 1 && dp[u.x - 1][u.y] > dp[u.x][u.y] + vis[u.x][u.y])
        dp[u.x - 1][u.y] = dp[u.x][u.y] + vis[u.x][u.y],
                 q[++t] = {u.x - 1, u.y};
      if (u.x < n && dp[u.x + 1][u.y] > dp[u.x][u.y] + vis[u.x][u.y])
        dp[u.x + 1][u.y] = dp[u.x][u.y] + vis[u.x][u.y],
                 q[++t] = {u.x + 1, u.y};
      if (u.y > 1 && dp[u.x][u.y - 1] > dp[u.x][u.y] + vis[u.x][u.y])
        dp[u.x][u.y - 1] = dp[u.x][u.y] + vis[u.x][u.y],
                      q[++t] = {u.x, u.y - 1};
      if (u.y < n && dp[u.x][u.y + 1] > dp[u.x][u.y] + vis[u.x][u.y])
        dp[u.x][u.y + 1] = dp[u.x][u.y] + vis[u.x][u.y],
                      q[++t] = {u.x, u.y + 1};
    }
  }
  cout << ans;
  return 0;
}
