link
#include<bits/stdc++.h>
#define ll long long
const ll mod = 1e9 + 7;
const ll inf = 1e16;
using namespace std;
void read(ll &x) {
x = 0;
char c = getchar();
ll f = 0;
for (; !isdigit(c); c = getchar())
f |= c == '-';
for (; isdigit(c); c = getchar())
x = x * 10 + (c ^ '0');
if (f) x = -x;
}
struct node {
ll id, vel;
};
ll n;
node g[200100], s[200100], b[200100];
ll ans[200100];
bool cmd(node a, node b) {
return a.vel > b.vel;
}
int main() {
read(n);
for (ll i = 1; i <= n; i++) {
read(g[i].vel); read(s[i].vel); read(b[i].vel);
g[i].id = i;
s[i].id = i;
b[i].id = i;
ans[i] = inf;
}
sort(g+1, g+n+1, cmd);
sort(s+1, s+n+1, cmd);
sort(b+1, b+n+1, cmd);
ll kl;
for (ll i = 1; i <= n; i += kl) {
kl = 1;
ans[g[i].id] = min(i, ans[g[i].id]);
while (1) {
if (g[i].vel == g[i+kl].vel) {
ans[g[i+kl].id] = min(i, ans[g[i+kl].id]);
} else break;
kl ++;
}
}
for (ll i = 1; i <= n; i += kl) {
kl = 1;
ans[s[i].id] = min(i, ans[s[i].id]);
while (1) {
if (s[i].vel == s[i+kl].vel) {
ans[s[i+kl].id] = min(i, ans[s[i+kl].id]);
} else break;
kl ++;
}
}
for (ll i = 1; i <= n; i += kl) {
kl = 1;
ans[b[i].id] = min(i, ans[b[i].id]);
while (1) {
if (b[i].vel == b[i+kl].vel) {
ans[b[i+kl].id] = min(i, ans[b[i+kl].id]);
} else break;
kl ++;
}
}
for (int i = 1; i <= n; i++) {
printf("%lld\n", ans[i]);
}
return 0;
}