Tavas is a cheerleader in the new sports competition named "Pashmaks".

<image>

This competition consists of two part: swimming and then running. People will immediately start running R meters after they finished swimming exactly S meters. A winner is a such person that nobody else finishes running before him/her (there may be more than one winner).

Before the match starts, Tavas knows that there are n competitors registered for the match. Also, he knows that i-th person's swimming speed is si meters per second and his/her running speed is ri meters per second. Unfortunately, he doesn't know the values of R and S, but he knows that they are real numbers greater than 0.

As a cheerleader, Tavas wants to know who to cheer up. So, he wants to know all people that might win. We consider a competitor might win if and only if there are some values of R and S such that with these values, (s)he will be a winner.

Tavas isn't really familiar with programming, so he asked you to help him.

Input

The first line of input contains a single integer n (1 ≤ n ≤ 2 × 105).

The next n lines contain the details of competitors. i-th line contains two integers si and ri (1 ≤ si, ri ≤ 104).

Output

In the first and the only line of output, print a sequence of numbers of possible winners in increasing order.

Examples

Input

3
1 3
2 2
3 1


Output

1 2 3 


Input

3
1 2
1 1
2 1


Output

1 3 
#include <bits/stdc++.h>
using namespace std;
const int N = 200200;
const double eps = 1e-15;
int i, j, k, n, m, ch;
int fg[N];
double ab(double x) {
  if (x < 0) return -x;
  return x;
}
struct point {
  double x, y;
  int id;
  bool operator<(const point &n) const {
    if (ab(x - n.x) < eps) return y + eps < n.y;
    return x + eps < n.x;
  }
} mx, my, A[N], B[N];
void R(int &x) {
  x = 0;
  ch = getchar();
  while (ch < '0' || '9' < ch) ch = getchar();
  while ('0' <= ch && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
}
void W(int x) {
  if (x >= 10) W(x / 10);
  putchar(x % 10 + '0');
}
double Js(point a, point b, point c) {
  double x1 = b.x - a.x, y1 = b.y - a.y;
  double x2 = c.x - b.x, y2 = c.y - b.y;
  return x1 * y2 - x2 * y1;
}
int main() {
  R(n);
  mx.x = my.y = 1e9;
  for (i = 1; i <= n; i++) {
    int x, y;
    R(x);
    R(y);
    A[i].x = 1.0 / (1.0 * x);
    A[i].y = 1.0 / (1.0 * y);
    A[i].id = i;
    B[i] = A[i];
    if (A[i].x + eps < mx.x || (ab(A[i].x - mx.x) < eps && A[i].y + eps < mx.y))
      mx = A[i];
    if (A[i].y + eps < my.y || (ab(A[i].y - my.y) < eps && A[i].x + eps < my.x))
      my = A[i];
  }
  for (i = 1; i <= n; i++) {
    if (!(A[i].x + eps < mx.x) && !(A[i].y + eps < mx.y) &&
        (A[i].x > mx.x + eps || A[i].y > mx.y + eps))
      continue;
    if (!(A[i].x + eps < my.x) && !(A[i].y + eps < my.y) &&
        (A[i].x > my.x + eps || A[i].y > my.y + eps))
      continue;
    A[++m] = A[i];
  }
  sort(A + 1, A + m + 1);
  sort(B + 1, B + n + 1);
  j = 0;
  for (i = 1; i <= m; i++) {
    while (j >= 2 && Js(A[j - 1], A[j], A[i]) <= 0) j--;
    A[++j] = A[i];
  }
  m = j;
  j = 1;
  for (i = 1; i <= n; i++) {
    while (j < m && A[j + 1].x + eps < B[i].x) j++;
    if (j == m) {
      if (ab(B[i].x - A[j].x) < eps && ab(B[i].y - A[j].y) < eps)
        fg[B[i].id] = 1;
      continue;
    }
    if (Js(A[j], B[i], A[j + 1]) == 0) fg[B[i].id] = 1;
  }
  for (i = 1; i <= n; i++)
    if (fg[i]) W(i), putchar(' ');
  puts("");
}
