#include <bits/stdc++.h>
long long cross(long long x0, long long y0, long long x1, long long y1,
                long long x2, long long y2) {
  return (x1 - x0) * (y2 - y0) - (y1 - y0) * (x2 - x0);
}
long long cross_(int x0, int y0, int x1, int y1, int x2, int y2) {
  return cross(x1 * x2, y1 * y2, x0 * x2, y0 * y2, x0 * x1, y0 * y1);
}
int ss[200000], rr[200000];
int compare(const void *a, const void *b) {
  int i = *(int *)a;
  int j = *(int *)b;
  return ss[i] != ss[j]   ? ss[j] - ss[i]
         : rr[i] != rr[j] ? rr[j] - rr[i]
                          : i - j;
}
int main() {
  static int ii[200000], jj[200000], stack[200000];
  static char ok[200000];
  int n, i, i_, j_, cnt, max;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d%d", &ss[i], &rr[i]);
  for (i = 0; i < n; i++) {
    ii[i] = i;
    jj[i] = -1;
  }
  qsort(ii, n, sizeof *ii, compare);
  max = 0;
  for (i = 0; i < n; i++) {
    i_ = ii[i - 1], j_ = ii[i];
    if (i > 0 && ss[i_] == ss[j_] && rr[i_] == rr[j_]) jj[j_] = i_;
    if (max < rr[j_]) {
      max = rr[j_];
      ok[j_] = 1;
    }
  }
  cnt = 0;
  for (i = 0; i < n; i++) {
    i_ = ii[i];
    if (ok[i_]) {
      while (cnt >= 2 &&
             cross_(ss[stack[cnt - 2]], rr[stack[cnt - 2]], ss[stack[cnt - 1]],
                    rr[stack[cnt - 1]], ss[i_], rr[i_]) < 0)
        ok[stack[--cnt]] = 0;
      stack[cnt++] = i_;
    }
  }
  for (i = 0; i < n; i++)
    if (ok[i] || (jj[i] != -1 && ok[jj[i]])) {
      ok[i] = 1;
      printf("%d ", i + 1);
    }
  printf("\n");
  return 0;
}
