#include <bits/stdc++.h>
using namespace std;
namespace IO {
const int maxn(1 << 21 | 1);
char ibuf[maxn], *iS, *iT, c;
int f;
inline char Getc() {
  return iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, maxn, stdin),
                     (iS == iT ? EOF : *iS++))
                  : *iS++;
}
template <class Int>
inline void In(Int &x) {
  for (f = 1, c = Getc(); c < '0' || c > '9'; c = Getc()) f = c == '-' ? -1 : 1;
  for (x = 0; c >= '0' && c <= '9'; c = Getc())
    x = (x << 1) + (x << 3) + (c ^ 48);
  x *= f;
}
}  // namespace IO
using IO ::In;
const int maxn(3e5 + 5);
int n, vis[maxn], nxt[maxn], q[maxn], tl;
double k[maxn];
struct Point {
  int a, b, id;
  inline bool operator<(Point x) const { return a == x.a ? b > x.b : a > x.a; }
} p[maxn];
inline double Slope(Point x, Point y) {
  return (double)x.a * y.a * (y.b - x.b) / ((double)x.b * y.b * (y.a - x.a));
}
int main() {
  register int i, j;
  register double mxa = 0, mxb = 0;
  In(n);
  for (i = 1; i <= n; ++i) {
    In(p[i].a), In(p[i].b), p[i].id = i;
    if (mxb < p[i].b || (mxb == p[i].b && mxa < p[i].a))
      mxa = p[i].a, mxb = p[i].b;
  }
  sort(p + 1, p + n + 1), q[tl = 1] = 1;
  for (i = 2; i <= n && mxa <= p[i].a; ++i) {
    if (p[q[tl]].a == p[i].a) {
      if (p[q[tl]].b == p[i].b)
        nxt[p[i].id] = nxt[p[q[tl]].id], nxt[p[q[tl]].id] = p[i].id;
      continue;
    }
    while (tl > 1 && k[tl] > Slope(p[q[tl]], p[i])) --tl;
    q[++tl] = i, k[tl] = Slope(p[q[tl - 1]], p[i]);
  }
  for (; tl; --tl)
    for (i = p[q[tl]].id; i; i = nxt[i]) vis[i] = 1;
  for (i = 1; i <= n; ++i)
    if (vis[i]) printf("%d ", i);
  return puts(""), 0;
}
