#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <utility>
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#define mp make_pair
#define pb push_back
#define FOR(x,y,z) for(int x(y);x<=z;++x)
#define ROF(x,y,z) for(int x(y);x>=z;--x)
#define rep(i,n) for(int i(1);i<=n;++i)
#define clr(x,y) memset(x,y,sizeof(x))
#define move(x,y) memcpy(x,y,sizeof(y))
#define two(x) (1<<(x))
#define contain(x,y) (x&two(y))
#define low(x) ((x)&-(x))
#define xx first
#define yy second
using namespace std;
typedef pair<int,int> PII;
typedef pair<PII,int> PIII;
typedef long long ll;
typedef unsigned int uint;
const int inf=0x3f3f3f3f;
const ll infLL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;
const double PI=3.141592653589793238;
template<class T> inline void chkmax(T&x,const T&y){ if (x<y) x=y; };
template<class T> inline void chkmin(T&x,const T&y){ if (x>y) x=y; };
inline double operator*(const PII&a,const PII&b){ return 1.0*(a.yy-b.yy)/(b.xx-a.xx); }
const int N=50010;
PIII a[N];
bool ans[N];
int n,s[N],top;
int main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d",&n);
rep(i,n) {
scanf("%d%d",&a[i].xx.xx,&a[i].xx.yy);
a[i].yy=i;
}
sort(a+1,a+1+n);
top=-1;
rep(i,n) if (a[i].xx.xx!=a[i+1].xx.xx) {
while (top>0 && a[i].xx*a[s[top-1]].xx<=a[s[top]].xx*a[s[top-1]].xx) --top;
s[++top]=i;
}
FOR(i,0,top) ans[a[s[i]].yy]=true;
int i;
for (i=1;i<=n;++i) if (ans[i]){ printf("%d",i); break; }
for (++i;i<=n;++i) if (ans[i]) printf(" %d",i);
printf("\n");
}