#include <iostream>
#include <algorithm>
#include <vector>
#include <math.h>
#include <numeric>
#include <queue>
#include <map>
#include <math.h>
#include <stack>
#include <math.h>
using namespace std;
typedef long long int ll;

int cost[500*500];
bool used[500*500];

int main(){
	cin.tie(nullptr);
	ios::sync_with_stdio(false);
	int n; cin >> n;
	vector<int> p(n*n);
	for(int i=0;i<n*n;i++){
		cin >> p[i]; p[i]--;
		cost[i]=min({i%n,n-1-i%n,n-1-i/n,i/n});
	}
	int res=0;
	for(int i=0;i<n*n;i++){
		res+=cost[p[i]];
		used[p[i]]=1;
		queue<int> q;
		q.push(p[i]);
		while(q.size()){
			int p=q.front(); q.pop();
			int c=cost[p];
			if(!used[p])c++;
			if(p%n){
				if(cost[p-1]>c){
					cost[p-1]=c;
					q.push(p-1);
				}
			}
			if(p%n!=n-1){
				if(cost[p+1]>c){
					cost[p+1]=c;
					q.push(p+1);
				}
			}
			if(p/n){
				if(cost[p-n]>c){
					cost[p-n]=c;
					q.push(p-n);
				}
			}
			if(p/n!=n-1){
				if(cost[p+n]>c){
					cost[p+n]=c;
					q.push(p+n);
				}
			}
		}
	}
	printf("%d\n",res);
}
