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, t, tot;
struct node {
  int s, r, id;
};
node a[200005], st[200005];
map<pair<int, int>, int> mp;
vector<int> save[200005];
bool cmp(node x, node y) {
  if (x.s == y.s) return x.r < y.r;
  return x.s > y.s;
}
void add(int i) {
  node tmp = a[i];
  while (t > 1) {
    int r1 = st[t - 2].r, r2 = st[t - 1].r, r3 = tmp.r;
    int s1 = st[t - 2].s, s2 = st[t - 1].s, s3 = tmp.s;
    if (1LL * (r1 * r2 - r2 * r3) * (s2 * s3 - s1 * s3) >
        1LL * (r1 * r3 - r2 * r3) * (s2 * s3 - s1 * s2))
      t--;
    else
      break;
  }
  st[t++] = tmp;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int s, r;
    scanf("%d%d", &s, &r);
    if (mp.find(pair<int, int>(s, r)) == mp.end()) {
      tot++;
      mp[pair<int, int>(s, r)] = tot;
      a[tot].s = s;
      a[tot].r = r;
      a[tot].id = tot;
      save[tot].push_back(i);
    } else
      save[mp[pair<int, int>(s, r)]].push_back(i);
  }
  n = tot;
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; i++) add(i);
  int l = -1, r = -1, val = -1000000000;
  for (int i = 0; i < t; i++) {
    if (st[i].s >= val) {
      val = st[i].s;
      l = i;
    }
  }
  val = -1000000000;
  for (int i = 0; i < t; i++) {
    if (st[i].r > val) {
      val = st[i].r;
      r = i;
    }
  }
  if (l > r) swap(l, r);
  vector<int> ans;
  for (int j = l; j <= r; j++)
    for (auto x : save[st[j].id]) ans.push_back(x);
  sort(ans.begin(), ans.end());
  for (auto x : ans) printf("%d ", x);
  return 0;
}
