#include<bits/stdc++.h>
#define int long long
using namespace std;
int x[300005], y[300005], ra[300005];
int dis(int i, int j)
{
int rex = (x[i] - x[j]), rey = (y[i] - y[j]);
return rex*rex+rey*rey;
}
int ans[300005], l[300005], r[3000005];
bool deleted[300005];
signed main()
{
int n; cin>>n;
for(int i = 1; i <= n; i++) cin>>x[i]>>y[i]>>ra[i];
//Subtask 2
set<pair<int, int>> circle;
set<pair<int, int>> lp, rp;
for(int i = 1; i <= n; i++){
l[i] = x[i] - ra[i];
r[i] = x[i] + ra[i];
lp.insert({l[i], i});
rp.insert({r[i], i});
circle.insert({-ra[i], i});
}
while(circle.size() > 0){
int p = (*circle.begin()).second; circle.erase(circle.begin());
ans[p] = p;
set<pair<int, int>>::iterator it = rp.lower_bound({l[p], -1});
while(it != rp.end() && (*it).first <= r[p]){
int idx = (*it).second;
//cerr<<"A"<<idx<<" "<<r[idx]<<" "<<l[p]<<" "<<r[p]<<endl;
lp.erase({l[idx], idx}); circle.erase({-ra[idx], idx});
ans[idx] = p;
rp.erase(it++);
}
it = lp.lower_bound({l[p], -1});
while(it != lp.end() && (*it).first <= r[p]){
int idx = (*it).second;
ans[idx] = p;
rp.erase({r[idx], idx}); circle.erase({-ra[idx], idx});
lp.erase(it++);
}
}
for(int i = 1; i <= n; i++) cout<<ans[i]<<" ";
}