#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool check(ll x1,ll y1,ll r1,ll x2,ll y2,ll r2){
ll dist=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
if(dist<=(r2+r1)*(r2+r1)) return true;
return false;
}
int main(){
ll n,i,j,k,q;
cin>>n;
vector<vector<ll>> c(n,vector<ll>(3));
vector<ll> ans(n+1);
set<vector<ll>> st;
set<ll> st1;
for(i=0 ; i<n ; i++){
cin>>c[i][0]>>c[i][1]>>c[i][2];
c[i][0]+=1e9;
c[i][1]+=1e9;
st.insert({-c[i][2],i});
st1.insert(i);
}
ll L=1e18;
map<pair<ll,ll>,set<ll>> mp;
while(st.size()){
ll R=-(*st.begin())[0];
ll ind=(*st.begin())[1];
if(R*2<=L){
while(R*2<=L)
L/=2;
mp.clear();
for(auto v:st1){
mp[{c[v][0]/L,c[v][1]/L}].insert(v);
}
}
ll x=c[ind][0]/L;
ll y=c[ind][1]/L;
for(i=x-2 ; i<=x+2 ; i++){
for(j=y-2 ; j<=y+2 ; j++){
if(mp.find({i,j})==mp.end()) continue;
vector<ll> a;
for(auto v:mp[{i,j}]){
if(check(c[ind][0],c[ind][1],c[ind][2],c[v][0],c[v][1],c[v][2])){
a.push_back(v);
}
}
for(auto v:a){
mp[{i,j}].erase(v);
ans[v+1]=ind+1;
st.erase({-c[v][2],v});
st1.erase(v);
}
}
}
}
for(i=1 ; i<=n ; i++) cout<<ans[i]<<" ";
return 0;
}