#include <bits/stdc++.h>
using namespace std;
int gi() {
  int x = 0, w = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') w = 0, ch = getchar();
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
  return w ? x : -x;
}
const int N = 3e5 + 5;
const long double eps = 1e-18;
struct node {
  int a, b, id;
  bool operator<(const node &x) const { return a == x.a ? b > x.b : a < x.a; }
} p[N];
struct line {
  long double k, b;
  int id;
} q[N], s[N];
int n, tot, top, ans[N], len;
vector<int> v[N];
long double cross(line x, line y) { return (y.b - x.b) / (x.k - y.k); }
int main() {
  n = gi();
  for (int i = 1; i <= n; ++i) p[i] = (node){gi(), gi(), i};
  sort(p + 1, p + n + 1);
  for (int i = 1, j = 1; i <= n; i = j = j + 1) {
    while (j < n && p[j + 1].a == p[i].a) ++j;
    ++tot;
    q[tot] = (line){(long double)1.0 / (long double)p[i].a,
                    (long double)1.0 / (long double)p[i].b, tot};
    for (int k = i; k <= j && p[k].b == p[i].b; ++k) v[tot].push_back(p[k].id);
  }
  for (int i = 1; i <= tot; ++i) {
    while (top > 1 && cross(s[top], s[top - 1]) - cross(q[i], s[top - 1]) > eps)
      --top;
    s[++top] = q[i];
  }
  for (int i = 1; i <= top; ++i)
    if (i == top || cross(s[i], s[i + 1]) > eps) {
      int x = s[i].id;
      for (int i = 0, sz = v[x].size(); i < sz; ++i) ans[++len] = v[x][i];
    }
  sort(ans + 1, ans + len + 1);
  for (int i = 1; i <= len; ++i) printf("%d ", ans[i]);
  puts("");
  return 0;
}
