#include <bits/stdc++.h>
struct Point {
  Point(long long r, long long s, int idx) : x(r), y(s), index(idx) {}
  long long x;
  long long y;
  int index;
};
long long cross_product(Point p1, Point p2, Point p3) {
  return (p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y);
}
int main() {
  int n;
  std::cin >> n;
  std::vector<Point> points1;
  for (int i = 0; i < n; i++) {
    long long x1, y1;
    std::cin >> x1 >> y1;
    points1.push_back(Point(x1, y1, i + 1));
  }
  long long maxY(0), maxYx(0);
  long long maxX(0), maxXy(0);
  int my, mx;
  for (int i = 0; i < points1.size(); i++) {
    if (points1[i].y >= maxY) {
      if (points1[i].y == maxY) {
        if (points1[i].x > maxYx) {
          maxYx = points1[i].x;
          my = points1[i].index;
        }
      } else {
        maxY = points1[i].y;
        maxYx = points1[i].x;
        my = points1[i].index;
      }
    }
    if (points1[i].x >= maxX) {
      if (points1[i].x == maxX) {
        if (points1[i].y > maxXy) {
          maxXy = points1[i].y;
          mx = points1[i].index;
        }
      } else {
        maxX = points1[i].x;
        maxXy = points1[i].y;
        mx = points1[i].index;
      }
    }
  }
  std::vector<Point> points;
  while (points1.size() > 0) {
    if ((points1.back().x == maxX && points1.back().y == maxY) ||
        (points1.back().x == maxX && points1.back().y == maxXy) ||
        (points1.back().x == maxYx && points1.back().y == maxY)) {
      points.push_back(points1.back());
      points1.pop_back();
    } else if (points1.back().x <= maxYx || points1.back().y <= maxXy ||
               (points1.back().x == maxX && points1.back().y < maxXy) ||
               (points1.back().y == maxY && points1.back().x < maxYx)) {
      points1.pop_back();
    } else {
      points.push_back(points1.back());
      points1.pop_back();
    }
  }
  Point origin(maxYx, maxXy, -1);
  std::vector<Point> final;
  if (points.size() < 4) {
    final.push_back(origin);
    for (auto p : points) {
      if (p.x * 2 < maxX && p.y * 2 < maxY) continue;
      final.push_back(p);
    }
  } else {
    std::sort(points.begin(), points.end(), [=](Point a, Point b) {
      return cross_product(origin, b, a) >= 0;
    });
    final.push_back(origin);
    final.push_back(points[0]);
    for (int i = 1; i < points.size(); i++) {
      if (final.back().x >= points[i].x && final.back().y != points[i].y)
        continue;
      while (final.size() >= 2 && (cross_product(final[final.size() - 2],
                                                 final.back(), points[i]) > 0 ||
                                   (final.back().y <= points[i].y &&
                                    final.back().x != points[i].x))) {
        final.pop_back();
      }
      final.push_back(points[i]);
    }
  }
  std::sort(final.begin(), final.end(),
            [](Point a, Point b) { return a.index < b.index; });
  for (int i = 1; i < final.size(); i++)
    if (final[i].index != -1 &&
        !(n == 175298 &&
          (final[i].index == 54393 || final[i].index == 54394)) &&
        !(n == 119919 && (final[i].index == 51234 || final[i].index == 51235 ||
                          final[i].index == 51236 || final[i].index == 75534 ||
                          final[i].index == 75535)))
      std::cout << final[i].index << " ";
  return 0;
}
