#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
template <class T>
inline void chmin(T& a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void chmax(T& a, T b) {
  if (a < b) a = b;
}
template <class T>
ostream& operator<<(ostream& o, const vector<T>& v) {
  o << "{";
  for (int i = 0; i < (int)v.size(); i++) o << (i > 0 ? ", " : "") << v[i];
  o << "}";
  return o;
}
template <class Abel>
struct BIT {
  vector<Abel> dat;
  Abel UNITY_SUM = 0;
  BIT(int n) { init(n); }
  void init(int n) {
    dat.resize(n + 1);
    for (int i = 0; i < (int)dat.size(); ++i) dat[i] = UNITY_SUM;
  }
  inline void add(int a, Abel x) {
    for (int i = a; i < (int)dat.size(); i += i & -i) dat[i] = dat[i] + x;
  }
  inline Abel sum(int a) {
    Abel res = UNITY_SUM;
    for (int i = a; i > 0; i -= i & -i) res = res + dat[i];
    return res;
  }
  inline Abel sum(int a, int b) { return sum(b - 1) - sum(a - 1); }
  int get(int k) {
    int res = 0;
    int N = 1;
    while (N < (int)dat.size()) N *= 2;
    for (int i = N / 2; i > 0; i /= 2) {
      if (res + i < (int)dat.size() && dat[res + i] < k) {
        k = k - dat[res + i];
        res = res + i;
      }
    }
    return res + 1;
  }
};
int main() {
  int N;
  cin >> N;
  vector<int> P(N * N);
  for (int i = 0; i < N * N; i++) cin >> P[i];
  vector<BIT<int>> col, row;
  for (int i = 0; i < N + 1; i++) {
    BIT<int> b1(N * N + 2), b2(N * N + 2);
    col.push_back(b1);
    row.push_back(b2);
  }
  for (int i = (1); i < (N * N + 1); ++i) {
    row[(i + N - 1) / N].add(i, 1);
    col[(i + 2) % N + 1].add(i, 1);
  }
  int ans = 0;
  for (auto i : P) {
    ans += min({
        row[(i + N - 1) / N].sum(1, i),
        row[(i + N - 1) / N].sum(i + 1, N * N + 1),
        col[(i + 2) % N + 1].sum(1, i),
        col[(i + 2) % N + 1].sum(i + 1, N * N + 1),
    });
    row[(i + N - 1) / N].add(i, -1);
    col[(i + 2) % N + 1].add(i, -1);
  }
  cout << ans << endl;
}
