#include <cstdio>
#include <cstring>

int n,p[1000001],f[501][501],ind[501][501],dis[501][501],q[30000001][2],h,t;
bool vis[501][501];
void add(int x,int y,int Dis){
//	printf("%d %d %d\n",x,y,Dis);
	dis[x][y]=Dis;
	++t;
	q[t][0]=x;
	q[t][1]=y;
}
void walk(int x,int y){
	if(x>1&&dis[x-1][y]>dis[x][y]+vis[x-1][y])add(x-1,y,dis[x][y]+vis[x-1][y]);
	if(y>1&&dis[x][y-1]>dis[x][y]+vis[x][y-1])add(x,y-1,dis[x][y]+vis[x][y-1]);
	if(x<n&&dis[x+1][y]>dis[x][y]+vis[x+1][y])add(x+1,y,dis[x][y]+vis[x+1][y]);
	if(y<n&&dis[x][y+1]>dis[x][y]+vis[x][y+1])add(x,y+1,dis[x][y]+vis[x][y+1]);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n*n;i++)scanf("%d",p+i);
	memset(dis,0x7f7f7f7f,sizeof dis);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			vis[i][j]=1;
	for(int i=1;i<=n;i++)
		add(1,i,1),add(n,i,1);
	for(int i=2;i<n;i++)
		add(i,1,1),add(i,n,1);
	while(h<t){
		++h;
		walk(q[h][0],q[h][1]);
	}
	long long ans=0;
	for(int i=1;i<=n*n;i++){
		int x=(p[i]-1)/n+1,y=(p[i]%n)?(p[i]%n):n;
		ans+=dis[x][y]-1;
		--dis[x][y];
		vis[x][y]=0;
		add(x,y,dis[x][y]);
		while(h<t){
			++h;
			walk(q[h][0],q[h][1]);
		}
	}
	printf("%lld\n",ans);
}