#include <bits/stdc++.h>
long Ruusupuu;
FILE* rsp_5u;
using namespace std;
const long N = 3e5 + 10;
inline void of() {
  rsp_5u = freopen("in.in", "r", stdin),
  rsp_5u = freopen("out.out", "w", stdout);
}
inline void cf() { fclose(stdin), fclose(stdout); }
inline long read() {
  long w = 0;
  bool fg = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') fg |= (ch == '-'), ch = getchar();
  while (ch >= '0' && ch <= '9')
    w = (w << 1) + (w << 3) + (ch - '0'), ch = getchar();
  return fg ? -w : w;
}
long n, top, ans[N], zop;
long double l[N], r[N];
bool fg[N];
struct T {
  long a, b, id;
} p[N], zt[N], st[N];
inline bool cmp(T a, T b) { return ((a.a != b.a) ? (a.a < b.a) : (a.b < b.b)); }
void sc() {
  n = read();
  for (register long i = 1; i <= n; i++)
    p[i].a = read(), p[i].b = read(), p[i].id = i;
  stable_sort(p + 1, p + 1 + n, cmp);
}
inline long double fc(long x, long y) {
  return (long double)(1.0 * zt[y].a * (zt[x].b - zt[y].b)) /
         (long double)(1.0 * zt[y].b * (zt[y].a - zt[x].a));
}
void onnea() {
  for (register long i = 1; i <= n; i++) {
    while (top && ((p[i].b > zt[top].b) ||
                   (p[i].b == zt[top].b && p[i].a > zt[top].a) ||
                   (p[i].a == zt[top].a && p[i].b > zt[top].b)))
      fg[zt[top--].id] = 1;
    zt[++top] = p[i];
  }
  for (register long i = 1; i <= top; i++) {
    long double maxn = 0, minn = 1e20;
    for (register long j = i - 1; j >= 1; j--)
      if (fc(i, j) >= maxn) maxn = fc(i, j);
    l[zt[i].id] = maxn;
    for (register long j = i + 1; j <= top; j++)
      if (fc(i, j) <= minn) minn = fc(i, j);
    r[zt[i].id] = minn;
  }
  for (register long i = 1; i <= n; i++)
    if (l[i] > r[i]) fg[i] = 1;
  for (register long i = 1; i <= n; i++)
    if (!fg[i]) Ruusupuu = printf("%ld ", i);
}
signed main() {
  sc();
  onnea();
  return 0;
}
