#include "bits/stdc++.h"
using namespace std;

int n;
#define MAX 502

vector<int> v;

bool flag[MAX][MAX];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int dist[MAX][MAX];
queue<pair<int,int> > q;
void upd(int a,int b){
	if(a<0||b<0||a>=n||b>=n)return;
	int cur=dist[a][b];
	dist[a][b]=INT_MAX;
	for(int i=0;i<4;i++){
		int xx=a+dx[i];
		int yy=b+dy[i];
		if(xx>=0&&yy>=0&&xx<n&&yy<n){
			dist[a][b]=min(dist[a][b],dist[xx][yy]+1-flag[xx][yy]);
		}
		else{
			dist[a][b]=0;
		}
	}
	if(cur>dist[a][b]){
		for(int g=0;g<4;g++){
			q.push(make_pair(a+dx[g],b+dy[g]));
		}
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n*n;i++){
		int p;
		scanf("%d",&p);
		v.push_back(p);
	}
	long long int ans=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			dist[i][j]=min(min(min(i,j),n-i-1),n-j-1);
		}
	}
	for(int i=0;i<v.size();i++){
		v[i]--;
		int x=v[i]/n;
		int y=v[i]%n;
		ans+=dist[x][y];
		//cerr<<x<<" "<<y<<" "<<dist[x][y]<<endl;
		flag[x][y]=true;
		for(int k=0;k<4;k++){
			q.push({x+dx[k],y+dy[k]});
		}
		while(!q.empty()){
			auto f=q.front();
			q.pop();
			upd(f.first,f.second);
		}
	}
	printf("%lld\n",ans);
	return 0;
}
