#include <bits/stdc++.h>
using namespace std;
inline long long mod(long long n) { return (n % 1000000007); }
pair<long long, long long> operator-(const pair<long long, long long>& a,
                                     const pair<long long, long long>& b) {
  pair<long long, long long> ans(a.first - b.first, a.second - b.second);
  return ans;
}
map<pair<long long, long long>, vector<long long> > m;
long long cut(pair<long long, long long> o, pair<long long, long long> b,
              pair<long long, long long> a) {
  return (a.second * b.first * o.first * o.second -
          a.second * o.first * b.first * b.second -
          o.second * b.first * a.first * a.second +
          a.first * b.first * a.second * b.second) -
         (a.first * b.second * o.first * o.second -
          a.first * o.second * b.first * b.second -
          o.first * b.second * a.first * a.second +
          a.first * b.first * a.second * b.second);
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  set<pair<long long, long long> > s;
  for (long long i = 0; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    m[pair<long long, long long>(x, y)].push_back(i + 1);
    s.insert(pair<long long, long long>(x, y));
  }
  vector<pair<long long, long long> > v;
  for (pair<long long, long long> x : s) v.push_back(x);
  sort(v.begin(), v.end(),
       [](const pair<long long, long long>& a,
          const pair<long long, long long>& b) {
         return 1. / a.first < 1. / b.first ||
                (1. / a.first == 1. / b.first && 1. / a.second < 1. / b.second);
       });
  pair<long long, long long> ho = *min_element(
      v.begin(), v.end(),
      [](const pair<long long, long long>& a,
         const pair<long long, long long>& b) {
        return 1. / a.first < 1. / b.first ||
               (1. / a.first == 1. / b.first && 1. / a.second < 1. / b.second);
      });
  pair<long long, long long> ve = *min_element(
      v.begin(), v.end(),
      [](const pair<long long, long long>& a,
         const pair<long long, long long>& b) {
        return 1. / a.second < 1. / b.second ||
               (1. / a.second == 1. / b.second && 1. / a.first < 1. / b.first);
      });
  vector<pair<long long, long long> > hull;
  for (pair<long long, long long> p : v) {
    if (!hull.empty() && hull.back() == ve) break;
    while (hull.size() >= 2 && cut(hull[hull.size() - 2], hull.back(), p) > 0) {
      hull.pop_back();
    }
    hull.push_back(p);
  }
  set<long long> ans;
  for (pair<long long, long long> p : hull) {
    for (auto k : m[p]) {
      ans.insert(k);
    }
  }
  for (long long x : ans) cout << x << " ";
  cout << '\n';
}
