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;
int n, tot = 1;
struct data {
  int x, y, num;
} a[200005], b[200005];
int s[200005];
int ans[200005];
bool cmp(data p, data q) {
  if (p.x == q.x) return p.y < q.y;
  return p.x < q.x;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    a[i].num = i;
    scanf("%d%d", &a[i].x, &a[i].y);
  }
  sort(a + 1, a + n + 1, cmp);
  int xk = a[n].x, yk = a[n].y;
  b[1] = a[n];
  for (int i = n - 1; i >= 1; i--) {
    if (a[i].y < yk) continue;
    if (a[i].y == yk && a[i].x != xk) continue;
    yk = a[i].y;
    xk = a[i].x;
    tot++;
    b[tot] = a[i];
  }
  bool judge = 1;
  for (int i = 2; i <= tot; i++)
    if (b[i].x != b[i - 1].x) {
      judge = 0;
      break;
    }
  if (judge) {
    for (int i = 1; i <= tot; i++) ans[i] = b[i].num;
    sort(ans + 1, ans + tot + 1);
    for (int i = 1; i <= tot; i++) printf("%d ", ans[i]);
    return 0;
  }
  int head = 0;
  for (int i = 1; i <= tot; i++) {
    if (b[i].x == b[i - 1].x) continue;
    if (head < 2) {
      head++;
      s[head] = i;
      continue;
    }
    while (1) {
      if (head == 1) break;
      int x = b[i].x, y = b[i].y, x1 = b[s[head]].x, y1 = b[s[head]].y;
      int x2 = b[s[head - 1]].x, y2 = b[s[head - 1]].y;
      long long now1 = x1 * y1 - x1 * y2 - x * y1 + x * y2;
      now1 *= x2 * y;
      long long now2 = x2 * y - x1 * y - x2 * y1 + x1 * y1;
      now2 *= x * y2;
      if (now1 >= now2) break;
      head--;
    }
    head++;
    s[head] = i;
  }
  int totans = 0;
  for (int i = 1; i <= head; i++) {
    int j = s[i];
    while (b[j].x == b[s[i]].x) {
      ans[++totans] = b[j].num;
      j++;
    }
  }
  sort(ans + 1, ans + totans + 1);
  for (int i = 1; i <= totans; i++) printf("%d ", ans[i]);
  return 0;
}
