#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
#define FOR(i, l, r, x) for(int i = l; i <= r; i += x)
#define FOD(i, r, l, x) for(int i = r; i >= l; i -= x)
#define pub push_back
#define pii pair<int, int>
#define fi first
#define se second
#define int long long
#define x1 x_1
#define y1 y_1
#define x2 x_2
#define y2 y_2
using namespace std;
const int N = 5e5 + 5;
const int MAX = 1e6 + 5;
const int M = 1005;
const int mod = 1e9;
const long long inf = 2e18;
int n, m, q, k, a[M][M], st[4 * M], out[N];
vector <pii> vec[N];
void upd(int id, int l, int r, int pos, int val) {
if (!(l <= pos && pos <= r)) return;
if (l == r) {
st[id] = val;
return;
}
int mid = (l + r) >> 1;
upd(id << 1, l, mid, pos, val);
upd(id << 1 | 1, mid + 1, r, pos, val);
st[id] = max(st[id << 1], st[id << 1 | 1]);
}
int get(int id, int l, int r, int u, int v) {
if (r < u || v < l) return -inf;
if (u <= l && r <= v) return st[id];
int mid = (l + r) >> 1;
int m1 = get(id << 1, l, mid, u, v);
int m2 = get(id << 1 | 1, mid + 1, r, u, v);
return max(m1, m2);
}
void solve() {
cin >> n;
FOR(i, 1, n, 1) FOR(j, 1, n, 1) {
cin >> a[i][j];
vec[a[i][j]].pub({i, j});
}
FOR(i, 1, n, 1) FOR(j, 1, n, 1) {
int val = a[i][j];
int nn = vec[val].size();
int ans = 0;
vector <int> dp1(nn + 2, 0);
vector <int> dp2(nn + 2, 0);
int pos = 0;
FOR(k, 0, nn - 1, 1) {
dp1[k] = 1;
int y = vec[val][k].se;
if (vec[val][k].fi == i && vec[val][k].se == j) pos = k;
if (k > 0) {
dp1[k] = max(dp1[k], get(1, 1, 705, 1, y) + 1);
}
upd(1, 1, 705, y, dp1[k]);
}
FOR(k, 0, nn - 1, 1) {
int y = vec[val][k].se;
upd(1, 1, 705, y, 0);
}
FOD(k, nn - 1, 0, 1) {
dp2[k] = 1;
int y = vec[val][k].se;
if (vec[val][k].fi == i && vec[val][k].se == j) pos = k;
if (k < nn - 1) {
dp2[k] = max(dp2[k], get(1, 1, 705, y, 705) + 1);
}
upd(1, 1, 705, y, dp2[k]);
}
FOD(k, nn - 1, 0, 1) {
int y = vec[val][k].se;
upd(1, 1, 705, y, 0);
}
ans = dp1[pos] + dp2[pos] - 1;
out[ans]++;
}
FOR(i, 1, 2 * n - 1, 1) {
cout << out[i] << '\n';
}
}
signed main() {
#define name "baitap"
if (ifstream(name".inp")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgYWxsKHgpIGJlZ2luKHgpLCBlbmQoeCkKI2RlZmluZSBGT1IoaSwgbCwgciwgeCkgZm9yKGludCBpID0gbDsgaSA8PSByOyBpICs9IHgpCiNkZWZpbmUgRk9EKGksIHIsIGwsIHgpIGZvcihpbnQgaSA9IHI7IGkgPj0gbDsgaSAtPSB4KQojZGVmaW5lIHB1YiBwdXNoX2JhY2sKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSB4MSB4XzEKI2RlZmluZSB5MSB5XzEKI2RlZmluZSB4MiB4XzIKI2RlZmluZSB5MiB5XzIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gNWU1ICsgNTsKY29uc3QgaW50IE1BWCA9IDFlNiArIDU7CmNvbnN0IGludCBNID0gMTAwNTsKY29uc3QgaW50IG1vZCA9IDFlOTsKY29uc3QgbG9uZyBsb25nIGluZiA9IDJlMTg7CgppbnQgbiwgbSwgcSwgaywgYVtNXVtNXSwgc3RbNCAqIE1dLCBvdXRbTl07CnZlY3RvciA8cGlpPiB2ZWNbTl07Cgp2b2lkIHVwZChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHBvcywgaW50IHZhbCkgewogICAgaWYgKCEobCA8PSBwb3MgJiYgcG9zIDw9IHIpKSByZXR1cm47CiAgICBpZiAobCA9PSByKSB7CiAgICAgICAgc3RbaWRdID0gdmFsOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwoKICAgIHVwZChpZCA8PCAxLCBsLCBtaWQsIHBvcywgdmFsKTsKICAgIHVwZChpZCA8PCAxIHwgMSwgbWlkICsgMSwgciwgcG9zLCB2YWwpOwoKICAgIHN0W2lkXSA9IG1heChzdFtpZCA8PCAxXSwgc3RbaWQgPDwgMSB8IDFdKTsKfQppbnQgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKICAgIGlmIChyIDwgdSB8fCB2IDwgbCkgcmV0dXJuIC1pbmY7CiAgICBpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHN0W2lkXTsKCiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwoKICAgIGludCBtMSA9IGdldChpZCA8PCAxLCBsLCBtaWQsIHUsIHYpOwogICAgaW50IG0yID0gZ2V0KGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCB1LCB2KTsKCiAgICByZXR1cm4gbWF4KG0xLCBtMik7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuOwogICAgRk9SKGksIDEsIG4sIDEpIEZPUihqLCAxLCBuLCAxKSB7CiAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgICAgdmVjW2FbaV1bal1dLnB1Yih7aSwgan0pOwogICAgfQoKICAgIEZPUihpLCAxLCBuLCAxKSBGT1IoaiwgMSwgbiwgMSkgewogICAgICAgIGludCB2YWwgPSBhW2ldW2pdOwogICAgICAgIGludCBubiAgPSB2ZWNbdmFsXS5zaXplKCk7CiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgdmVjdG9yIDxpbnQ+IGRwMShubiArIDIsIDApOwogICAgICAgIHZlY3RvciA8aW50PiBkcDIobm4gKyAyLCAwKTsKICAgICAgICBpbnQgcG9zID0gMDsKCiAgICAgICAgRk9SKGssIDAsIG5uIC0gMSwgMSkgewogICAgICAgICAgICBkcDFba10gPSAxOwogICAgICAgICAgICBpbnQgeSA9IHZlY1t2YWxdW2tdLnNlOwoKICAgICAgICAgICAgaWYgKHZlY1t2YWxdW2tdLmZpID09IGkgJiYgdmVjW3ZhbF1ba10uc2UgPT0gaikgcG9zID0gazsKCiAgICAgICAgICAgIGlmIChrID4gMCkgewogICAgICAgICAgICAgICAgZHAxW2tdID0gbWF4KGRwMVtrXSwgZ2V0KDEsIDEsIDcwNSwgMSwgeSkgKyAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXBkKDEsIDEsIDcwNSwgeSwgZHAxW2tdKTsKICAgICAgICB9CgogICAgICAgIEZPUihrLCAwLCBubiAtIDEsIDEpIHsKICAgICAgICAgICAgaW50IHkgPSB2ZWNbdmFsXVtrXS5zZTsKICAgICAgICAgICAgdXBkKDEsIDEsIDcwNSwgeSwgMCk7CiAgICAgICAgfQoKICAgICAgICBGT0Qoaywgbm4gLSAxLCAwLCAxKSB7CiAgICAgICAgICAgIGRwMltrXSA9IDE7CiAgICAgICAgICAgIGludCB5ID0gdmVjW3ZhbF1ba10uc2U7CiAgICAgICAgICAgIGlmICh2ZWNbdmFsXVtrXS5maSA9PSBpICYmIHZlY1t2YWxdW2tdLnNlID09IGopIHBvcyA9IGs7CgogICAgICAgICAgICBpZiAoayA8IG5uIC0gMSkgewogICAgICAgICAgICAgICAgZHAyW2tdID0gbWF4KGRwMltrXSwgZ2V0KDEsIDEsIDcwNSwgeSwgNzA1KSArIDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1cGQoMSwgMSwgNzA1LCB5LCBkcDJba10pOwogICAgICAgIH0KCiAgICAgICAgRk9EKGssIG5uIC0gMSwgMCwgMSkgewogICAgICAgICAgICBpbnQgeSA9IHZlY1t2YWxdW2tdLnNlOwogICAgICAgICAgICB1cGQoMSwgMSwgNzA1LCB5LCAwKTsKICAgICAgICB9CgogICAgICAgIGFucyA9IGRwMVtwb3NdICsgZHAyW3Bvc10gLSAxOwogICAgICAgIG91dFthbnNdKys7CiAgICB9CiAgICBGT1IoaSwgMSwgMiAqIG4gLSAxLCAxKSB7CiAgICAgICAgY291dCA8PCBvdXRbaV0gPDwgJ1xuJzsKICAgIH0KfQpzaWduZWQgbWFpbigpIHsKICAgICNkZWZpbmUgbmFtZSAiYmFpdGFwIgogICAgaWYgKGlmc3RyZWFtKG5hbWUiLmlucCIpKSB7CiAgICAgICAgZnJlb3BlbihuYW1lIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgc29sdmUoKTsKfQo=