#include <bits/stdc++.h>
using namespace std;
int n,a[702][702],cnt[1836],st[6767],L[2][500005];
vector <pair<int,int>> ve[500005];
void UPDATE(int id, int l, int r, int i, int v)
{
if (l>i || r<i) return;
else if (l==r)
{
st[id]=v;
return;
}
int mid=(l+r)/2;
if (i<=mid) UPDATE(id*2,l,mid,i,v);
else UPDATE(id*2+1,mid+1,r,i,v);
st[id]=max(st[id*2],st[id*2+1]);
}
int GET(int id, int l, int r, int u, int v)
{
if (l>v || r<u) return -1e18;
else if (l>=u && r<=v) return st[id];
int mid=(l+r)/2;
return max(GET(id*2,l,mid,u,v),GET(id*2+1,mid+1,r,u,v));
}
void SOLVE(int x)
{
for (int i=0;i<ve[x].size();i++)
{
int j=ve[x][i].second,mx=GET(1,1,n,1,j)+1;
if (GET(1,1,n,j,j)<mx) UPDATE(1,1,n,j,mx),L[0][i]=mx;
}
for (int i=0;i<ve[x].size();i++) UPDATE(1,1,n,ve[x][i].second,0);
for (int i=ve[x].size()-1;i>=0;i--)
{
int j=ve[x][i].second,mx=GET(1,1,n,j,n)+1;
if (GET(1,1,n,j,j)<mx) UPDATE(1,1,n,j,mx),L[1][i]=mx;
}
for (int i=0;i<ve[x].size();i++) UPDATE(1,1,n,ve[x][i].second,0);
for (int i=0;i<ve[x].size();i++) cnt[L[0][i]+L[1][i]-1]++,L[0][i]=L[1][i]=0;
}
signed main()
{
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n;
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) cin>>a[i][j];
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) ve[a[i][j]].push_back({i,j});
for (int i=1;i<=n*n;i++) if (ve[i].size()) SOLVE(i);
for (int i=1;i<2*n;i++) cout<<cnt[i]<<'\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLGFbNzAyXVs3MDJdLGNudFsxODM2XSxzdFs2NzY3XSxMWzJdWzUwMDAwNV07CnZlY3RvciA8cGFpcjxpbnQsaW50Pj4gdmVbNTAwMDA1XTsKdm9pZCBVUERBVEUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBpLCBpbnQgdikKewogICAgaWYgKGw+aSB8fCByPGkpIHJldHVybjsKICAgIGVsc2UgaWYgKGw9PXIpCiAgICB7CiAgICAgICAgc3RbaWRdPXY7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0obCtyKS8yOwogICAgaWYgKGk8PW1pZCkgVVBEQVRFKGlkKjIsbCxtaWQsaSx2KTsKICAgIGVsc2UgVVBEQVRFKGlkKjIrMSxtaWQrMSxyLGksdik7CiAgICBzdFtpZF09bWF4KHN0W2lkKjJdLHN0W2lkKjIrMV0pOwp9CmludCBHRVQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikKewogICAgaWYgKGw+diB8fCByPHUpIHJldHVybiAtMWUxODsKICAgIGVsc2UgaWYgKGw+PXUgJiYgcjw9dikgcmV0dXJuIHN0W2lkXTsKICAgIGludCBtaWQ9KGwrcikvMjsKICAgIHJldHVybiBtYXgoR0VUKGlkKjIsbCxtaWQsdSx2KSxHRVQoaWQqMisxLG1pZCsxLHIsdSx2KSk7Cn0Kdm9pZCBTT0xWRShpbnQgeCkKewogICAgZm9yIChpbnQgaT0wO2k8dmVbeF0uc2l6ZSgpO2krKykKICAgIHsKICAgICAgICBpbnQgaj12ZVt4XVtpXS5zZWNvbmQsbXg9R0VUKDEsMSxuLDEsaikrMTsKICAgICAgICBpZiAoR0VUKDEsMSxuLGosaik8bXgpIFVQREFURSgxLDEsbixqLG14KSxMWzBdW2ldPW14OwogICAgfQogICAgZm9yIChpbnQgaT0wO2k8dmVbeF0uc2l6ZSgpO2krKykgVVBEQVRFKDEsMSxuLHZlW3hdW2ldLnNlY29uZCwwKTsKICAgIGZvciAoaW50IGk9dmVbeF0uc2l6ZSgpLTE7aT49MDtpLS0pCiAgICB7CiAgICAgICAgaW50IGo9dmVbeF1baV0uc2Vjb25kLG14PUdFVCgxLDEsbixqLG4pKzE7CiAgICAgICAgaWYgKEdFVCgxLDEsbixqLGopPG14KSBVUERBVEUoMSwxLG4saixteCksTFsxXVtpXT1teDsKICAgIH0KICAgIGZvciAoaW50IGk9MDtpPHZlW3hdLnNpemUoKTtpKyspIFVQREFURSgxLDEsbix2ZVt4XVtpXS5zZWNvbmQsMCk7CiAgICBmb3IgKGludCBpPTA7aTx2ZVt4XS5zaXplKCk7aSsrKSBjbnRbTFswXVtpXStMWzFdW2ldLTFdKyssTFswXVtpXT1MWzFdW2ldPTA7Cn0Kc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSxjaW4udGllKDApLGNvdXQudGllKDApOwogICAgY2luPj5uOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBmb3IgKGludCBqPTE7ajw9bjtqKyspIGNpbj4+YVtpXVtqXTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgZm9yIChpbnQgaj0xO2o8PW47aisrKSB2ZVthW2ldW2pdXS5wdXNoX2JhY2soe2ksan0pOwogICAgZm9yIChpbnQgaT0xO2k8PW4qbjtpKyspIGlmICh2ZVtpXS5zaXplKCkpIFNPTFZFKGkpOwogICAgZm9yIChpbnQgaT0xO2k8MipuO2krKykgY291dDw8Y250W2ldPDwnXG4nOwogICAgcmV0dXJuIDA7Cn0=