#include <bits/stdc++.h>
using namespace std;
struct point {
  long long x, y;
  int i;
};
const int maxn = 2e5 + 5;
vector<int> ch[maxn];
long long area(const point &a, const point &b, const point &c) {
  return (c.y - b.y) * b.x * c.x * a.y + (a.y - c.y) * a.x * c.x * b.y +
         (b.y - a.y) * a.x * b.x * c.y;
}
bool cmp(const point &a, const point &b) {
  return (a.x == b.x ? a.y > b.y : a.x > b.x);
}
bool eq(const point &a, const point &b) { return a.x == b.x && a.y == b.y; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<point> v(n);
  for (int i = 0; i < n; i++) cin >> v[i].x >> v[i].y, v[i].i = i;
  sort(v.begin(), v.end(), cmp);
  int top = 0;
  ch[top++].push_back(0);
  for (int i = 1; i < n - 1; i++) {
    if (eq(v[ch[top - 1][0]], v[i])) {
      ch[top - 1].push_back(i);
      continue;
    }
    if (area(v[0], v[i], v[n - 1]) < 0) continue;
    if (area(v[ch[top - 1][0]], v[i], v[n - 1]) < 0) continue;
    while (top > 1 && area(v[ch[top - 2][0]], v[ch[top - 1][0]], v[i]) < 0)
      ch[--top].clear();
    ch[top++].push_back(i);
  }
  ch[top++].push_back(n - 1);
  set<int> ans;
  for (int i : ch[0]) ans.insert(v[i].i);
  for (int i = 1; i < top; i++) {
    if (v[ch[i][0]].y <= v[ch[i - 1][0]].y && !eq(v[ch[i][0]], v[ch[i - 1][0]]))
      break;
    for (int j : ch[i]) ans.insert(v[j].i);
  }
  for (int i : ans) cout << i + 1 << " ";
  cout << "\n";
  return 0;
}
