#define _USE_MATH_DEFINES
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
//#include <bits/stdc++.h>

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#include <cassert>
#include <fstream>
#include <array>
#include <string>
#include <cstring>
#include <functional>
#include <ctime>
#include <iostream>
#include <unordered_set>
#include <complex>

#include <nmmintrin.h>
#include <mmintrin.h>
#include <emmintrin.h>


using namespace std;

#define dprint(Exp,...) if(Exp){fprintf(stderr, __VA_ARGS__);}
#define printe(...) fprintf(stderr, __VA_ARGS__);
//#define printe(...) void();
#define printE(...) fprintf(stderr, __VA_ARGS__);
//#define printE(...) void();


#define PrtExp(_Exp)  cerr<< #_Exp <<" = "<< (_Exp)
#define PrtExpN(_Exp)  cerr<< #_Exp <<" = "<< (_Exp) <<"\n"

#define SINT(n) scanf("%d",&n)
#define SINT2(n,m) scanf("%d %d",&n,&m)
#define SINT3(n,m,o) scanf("%d %d %d",&n,&m,&o)
#define SINT4(n,m,o,P) scanf("%d %d %d %d",&n,&m,&o,&P)
#define SINT5(n,m,o,P,q) scanf("%d %d %d %d %d",&n,&m,&o,&P,&q)
#define SLL(n) scanf("%lld",&n)
#define SLL2(n,m) scanf("%lld %lld",&n,&m)
#define SLL3(n,m,o) scanf("%lld %lld %lld",&n,&m,&o)
#define SST(s) scanf("%s",s)
#define SCH(c) scanf("%c",&c)

#define GC() getchar()

#define PINT(n) printf("%d",(int)(n))
#define PINT2(n,m) printf("%d %d",(int)(n),(int)(m))
#define PINT3(n,m,l) printf("%d %d %d",(int)(n),(int)(m),(int)(l))
#define PLL(n) printf("%lld",(long long)(n))
#define PST(s) printf("%s",(s))
#define PCH(s) printf("%c",(s))

#define PINTN(n) printf("%d\n",(int)(n))
#define PINT2N(n,m) printf("%d %d\n",(int)(n),(int)(m))
#define PINT3N(n,m,l) printf("%d %d %d\n",(int)(n),(int)(m),(int)(l))
#define PLLN(n) printf("%lld\n",(long long)(n))
#define PSTN(s) printf("%s\n",(s))
#define PCHN(s) printf("%c\n",(s))

#define PSP() printf(" ")
#define PN() printf("\n")

#define PC(c) putchar(c)
#define CSP (' ')
#define SN ("\n")

#define rep(i,a) for(int i=0;i<a;i++)
#define reP(i,a) for(int i=0;i<=a;i++)
#define Rep(i,a) for(int i=a-1;i>=0;i--)
#define ReP(i,a) for(int i=a;i>=0;i--)

#define rEp(i,a) for(i=0;i<a;i++)
#define rEP(i,a) for(i=0;i<=a;i++)
#define REp(i,a) for(i=a-1;i>=0;i--)
#define REP(i,a) for(i=a;i>=0;i--)

#define repft(i,a,b) for(int i=a;i<b;i++)
#define repfT(i,a,b) for(int i=a;i<=b;i++)
#define Repft(i,a,b) for(int i=a-1;i>=b;i--)
#define RepfT(i,a,b) for(int i=a;i>=b;i--)

#define foreach(a,it) for(auto it = a.begin(); it != a.end(); ++it)

#define FILL(a,v) fill(begin(a),end(a), v)
#define FILL0(a) memset(a,0,sizeof(a))
#define FILL1(a) memset(a,-1,sizeof(a))

typedef long long ll;

typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll>   Pll;


const int INF = 1'010'000'000; // 0x3C33'6080
const ll INFLL = 0x1f1f1f1f1f1f1f1fLL;//2,242,545,357,980,376,863


template <class A, class B> inline ostream& operator<<(ostream& st, const pair<A, B>& P) { return st << "(" << P.first << "," << P.second << ")"; };
template <class A, class B> inline pair<A, B> operator+(const pair<A, B>& P, const pair<A, B>& Q) { return pair<A, B>(P.first + Q.first, P.second + Q.second); };
template <class A, class B> inline pair<A, B> operator-(const pair<A, B>& P, const pair<A, B>& Q) { return pair<A, B>(P.first - Q.first, P.second - Q.second); };


int bitCount3bit(unsigned int bits) {
    return ((bits & 1) > 0) + ((bits & 2) > 0) + ((bits & 4) > 0);
}

inline ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }


/*
int main() {
    int n;
    cin >> n;
    ll ret = 0;
    rep(i, n) {
        rep(j, n) {
            int v = min({ i, j, n - 1 - i, n - 1 - j });
            printf("%3d ", v);
            ret += v;
        }
        puts("");
    }
    cout << ret << endl;
}
//*/


int aa[502][502];

int         a[502 * 502];
vector<int> b[502 * 502];
bool     used[502][502];
int         p[502 * 502];

int         z[502][502];
int n;

const int dx[4] = { 1,-1,0,0 };
const int dy[4] = { 0,0,1,-1 };

int ppp[502][502];

int main() {
    
    cin >> n;
    rep(i, n) rep(j, n) {
        int I = i * n + j;
        cin >> p[I];
        --p[I];
    }
    //*/
    /*
    const int n = 500;
    {
        int c = 1;
        ppp[0][1] = 1;
        rep(i, n - 2) {
            if (i % 2 == 0) {
                rep(j, n - 2) {
                    ppp[i + 1][j + 1] = ++c;
                }
            } else {
                rep(j, n - 2) {
                    ppp[i + 1][n - j - 2] = ++c;
                }
            }
        }
        rep(i, n) rep(j, n) {
            if (ppp[i][j] == 0) ppp[i][j] = ++c;
        }
        rep(i, n) rep(j, n) {
            p[ppp[i][j]-1] = i * n + j;
        }
    }
    //*/

    rep(i, n) rep(j, n) {
        int I = i * n + j;
        aa[p[I] / n][p[I] % n] = I;
        a[p[I]] = I;
    }

    /*
    rep(i, n) {
        rep(j, n) {
            printf("%3d ", aa[i][j] + 1);
        }
        puts("");
    }
    //*/
    auto st = clock();

    rep(i, n) rep(j, n) {
        z[i][j] = min({ i, j, n - 1 - i, n - 1 - j });
    }

    ll ret = 0;
    using Pii = pair<Pi, int>;
    deque<Pii> Q;
    rep(i, n * n) {
        const int y = p[i] / n;
        const int x = p[i] % n;
        ret += z[y][x];

        //if (z[y][x] > 0) {
        if (1) {
            --z[y][x];
            used[y][x] = true;
            Q.push_back({ {y, x}, z[y][x] });
            while (!Q.empty()) {
                const auto P = Q.front().first;
                const auto d = Q.front().second; Q.pop_front();
                rep(j, 4) {
                    int Y = P.first + dy[j];
                    int X = P.second + dx[j];
                    if (Y < 0 || Y >= n) continue;
                    if (X < 0 || X >= n) continue;
                    int D = d + !used[Y][X];
                    if (z[Y][X] <= D) continue;
                    z[Y][X] = D;
                    Q.push_back({ {Y, X}, D });
                }
            }
        }
        /*
        printf("ret : %lld (%d, %d)=%d\n\n", ret, x, y, i + 1);
        rep(i, n) {
            rep(j, n) {
                printf(" %3d", z[i][j]);
            }
            printf("\n");
        }
        */
    }
    cout << ret << endl;

    cerr << "time:" <<  (clock() - st) / double(CLOCKS_PER_SEC) << endl;


    return 0;
}




Measured memory_bytes: 13844