#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int maxn = 4e4+10;
struct Point{
double x, y, r;
}point[maxn];
int n;
bool inside(int id1, int id2){
int dx = point[id1].x-point[id2].x;
int dy = point[id1].y-point[id2].y;
return (dx*dx+dy*dy)<=point[id2].r*point[id2].r;
}
void solve(){
vector<pair<double, int> > events;
for(int i=0; i<n; i++){
events.push_back(make_pair(point[i].x-point[i].r, i));
events.push_back(make_pair(point[i].x+point[i].r, i+n));
}
sort(events.begin(), events.end());
set<pair<double, int> > outer;
vector<int> ans;
for(int i=0; i<2*n; i++){
int id = events[i].second%n;
if(events[i].second<n){
pair<double, int> temp = make_pair(point[id].y, id);
set<pair<double, int> >::iterator it
= outer.lower_bound(temp);
if(it!=outer.end() && inside(id, it->second)) continue;
if(it!=outer.begin() && inside(id, (--it)->second)) continue;
outer.insert(temp);
ans.push_back(id);
}
else{
outer.erase(make_pair(point[id].y, id));
}
}
sort(ans.begin(), ans.end());
int len = ans.size();
for(int i=0; i<len-1; i++){
printf("%d ", ans[i]+1);
}
printf("%d\n", ans[len-1]+1);
}
int main()
{
while(~scanf("%d", &n)){
for(int i=0; i<n; i++){
scanf("%lf%lf%lf", &point[i].r, &point[i].x, &point[i].y);
}
solve();
}
return 0;
}