#include <bits/stdc++.h>
using namespace std;
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) > (b); --(i))
#define rep(i, c)  for(auto &(i) : (c))
#define x     first
#define y     second
#define pb  push_back
#define PB  pop_back()
#define iOS  ios_base::sync_with_stdio(false)
#define sqr(a)  (((a) * (a)))
#define all(a)  a.begin() , a.end()
#define error(x) cerr << #x << " = " << (x) <<endl
#define Error(a,b) cerr<<"( "<<#a<<" , "<<#b<<" ) = ( "<<(a)<<" , "<<(b)<<" )\n";
#define errop(a) cerr<<#a<<" = ( "<<((a).x)<<" , "<<((a).y)<<" )\n";
#define coud(a,b) cout<<fixed << setprecision((b)) << (a)
#define L(x)  ((x)<<1)
#define R(x)  (((x)<<1)+1)
#define umap  unordered_map
//#define max(x,y)  ((x) > (y) ? (x) : (y))
//#define double long double
typedef long long ll;
#define int ll
typedef pair<ll,ll>pii;
typedef vector<int> vi;
//typedef complex<double> point;
const int maxn = 1e6 + 100;
map <pii, vi> mp;
struct point{
	ll x,y;
	point(){
	 	x = y = 0;
	}
	point(ll a,ll b){
		x = a, y = b;
	}
	inline void init(ll a,ll b){
		x = a, y = b;
	}
	inline point operator - (point p){
		return point(x - p.x, y - p.y);
	}
	inline ll dis(point p){
		return sqr(x - p.x) + sqr(y - p.y);
	}
	inline pii PII(){
		return pii(x, y);
	}
};
inline ll CROSS(point o, point a,point b){
	return (a.y * b.x * o.x * o.y - a.y * o.x * b.x * b.y - o.y * b.x * a.x * a.y + a.x * b.x * a.y * b.y) - 
		(a.x * b.y * o.x * o.y - a.x * o.y * b.x * b.y - o.x * b.y * a.x * a.y + a.x * b.x * a.y * b.y);
}
point o;
point l;
inline bool ocmp(const point &a, const point &b){
	return make_pair(a.y, a.x) > make_pair(b.y, b.x);
}
inline bool lcmp(const point &a, const point &b){
	return make_pair(a.x, a.y) > make_pair(b.x, b.y);
}
inline bool scmp(const point &a,const point &b){
	ll cross = CROSS(o, a, b);
	if(!cross)
		return o.dis(a) < o.dis(b);
	return cross < 0;
}
vector<point> v;
vector<point> hull;
int n;
main(){
    iOS;
	cin >> n;
	For(i,0,n){
		int a,b;
		cin >> a >> b;
		mp[{a, b}].pb(i + 1);
	}
	if(mp.size() == 1){
		For(i,1,n+1)
			cout << i << ' ';
		cout << endl;
		return 0;
	}
	Foreach(q, mp){
		pii p = q->x;
		int x = p.x, y = p.y;
		point P;
		P.init(x, y);
		v.pb(P);
	}
	o = *min_element(all(v), ocmp);
	l = *min_element(all(v), lcmp);
	if(o.PII() == l.PII()){
		rep(a, mp[o.PII()])
			cout << a << ' ';
		cout << endl;
		return 0;
	}
	sort(all(v), scmp);
	int po = 2;
	For(i,0,2)
		hull.pb(v[i]);
	vi ans;
	while(po < v.size() && hull.back().PII() != l.PII()){
		while(hull.size() > 1 && CROSS(hull[hull.size()-2], hull[hull.size()-1], v[po]) > 0LL)
			hull.PB;
		hull.pb(v[po++]);
	}
	rep(p, hull)
		rep(a, mp[p.PII()])
			ans.pb(a);
	sort(all(ans));
	rep(a, ans)
		cout << a << ' ';
	cout << endl;
	
}
