#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;
typedef pair<int,int>pii;
typedef vector<int> vi;
//typedef complex<double> point;
const int maxn = 1e6 + 100;
map <pii, vi> mp;
const double eps = 1e-22;
struct point{
	int X,Y;
	double x,y;
	point(){
		X = Y = x = y = .0;
	}
	point(double a,double b){
		x = a, y = b;
	}
	inline void init(int a,int b){
		X = a, Y = b;
		x = 1.0 / X;
		y = 1.0 / Y;
	}
	inline double operator * (point p){
		return x * p.y - y * p.x;
	}
	inline point operator - (point p){
		return point(x - p.x, y - p.y);
	}
	inline double dis(point p){
		return sqr(x - p.x) + sqr(y - p.y);
	}
	inline pii PII(){
		return pii(X, 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){
	double cross = ((point)a - o) * ((point)b - o);
	if(fabs(cross) <= eps)
		return o.dis(a) < o.dis(b);
	return cross < eps;
}
vector<point> v;
vector<point> hull;
int n;
int 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 && (hull[hull.size()-1] - hull[hull.size()-2]) * (v[po] - hull[hull.size()-2]) > eps)
			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;
	
}
