n = int(input())
p = list(map(int,input().split()))

thtr = [0]*((n+2)**2)
psn = [1]*(n**2)

def ppidx(ttidx):
    r = ttidx // (n+2) - 1
    c = ttidx % (n+2) - 1
    if r == 0 or r >= n:
        return -1
    if c== 0 or c >= n:
        return -1
    return n*r + c

def ttidx(psidx):
    r = psidx // n
    c = psidx %  n
    return (n+2)*(r+1) + c + 1

def init_rnk(psidx):
    r = psidx // n
    c = psidx %  n
    return(min(r,c,n-1-r,n-1-c)+1)

def set_rnk2(pidx):
    tidx = ttidx(pidx)
    val = thtr[tidx]
    wk = min(thtr[tidx - 1],thtr[tidx + 1],thtr[tidx-(n+2)],thtr[tidx +n+2])
    #その場所が空席なら、周りの経路の最小値に合わせる。
    if psn[pidx] == 0 :
        if val != wk:
            thtr[tidx] = wk
        else:
            #自身を更新しないなら伝播不要
            return            
    else:
        if val > wk + 1:
            thtr[tidx] = wk + 1
        else:
            #自身を更新しないなら伝播不要
            return

    #伝播
    wk = ppidx(tidx - 1)
    if wk >= 0:
        set_rnk2(wk)
    wk = ppidx(tidx + 1)
    if wk >= 0:
        set_rnk2(wk)
    wk = ppidx(tidx -n - 2 )
    if wk >= 0:
        set_rnk2(wk)
    wk = ppidx(tidx +n + 2 )
    if wk >= 0:
        set_rnk2(wk)

#初期化
for i in range(n**2):
    thtr[ttidx(i)]=init_rnk(i)

#処理
ans = 0
for el in p:
    psn[el-1]=0
    wk =  (thtr[ttidx(el-1)] - 1 )
    ans += wk
    set_rnk2(el-1)

print(ans)

