#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll dist(ll x1,ll y1,ll x2,ll y2){
return (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
}
int main(){
ll n,i,j,k,q;
cin>>n;
vector<vector<ll>> c(n,vector<ll>(3));
vector<ll> ans(n+1),nearest(n+1);
set<vector<ll>> st;
for(i=0 ; i<n ; i++) cin>>c[i][0]>>c[i][1]>>c[i][2];
sort(c.begin(),c.end());
for(i=0 ; i<n ; i++){
st.insert({-c[i][2],i,c[i][0],c[i][1]});
ll d=4e18;
for(j=i+1 ; j<n ; j++){
ll dx=c[j][0]-c[i][0];
if(dx*dx>=d) break;
if(dist(c[j][0],c[j][1],c[i][0],c[i][1])<d){
d=dist(c[j][0],c[j][1],c[i][0],c[i][1]);
nearest[i]=j;
}
}
for(j=i-1 ; j>=0 ; j--){
ll dx=c[j][0]-c[i][0];
if(dx*dx>=d) break;
if(dist(c[j][0],c[j][1],c[i][0],c[i][1])<d){
d=dist(c[j][0],c[j][1],c[i][0],c[i][1]);
nearest[i]=j;
}
}
}
while(st.size()){
vector<ll> x=*(st.begin());
ll u=x[1],v=nearest[x[1]];
ans[u+1]=u+1;
st.erase(st.begin());
if(dist(c[u][0],c[u][1],c[v][0],c[v][1])<=c[u][2]+c[v][2]){
ans[v+1]=u+1;
st.erase({-c[v][2],v,c[v][0],c[v][1]});
}
}
for(i=1 ; i<=n ; i++) cout<<ans[i]<<" ";
return 0;
}