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 = (int)2e5 + 10;
const double eps = 1e-18;
double x[N], y[N];
int n, m, id[N], r[N], s[N], a[N];
inline int Sign(const double &x) { return x < -eps ? -1 : x > eps; }
inline int cmp(const int &i, const int &j) {
  if (r[i] != r[j]) return r[i] < r[j];
  return s[i] < s[j];
}
vector<int> ans;
map<pair<int, int>, int> zz;
int Q[N], t;
int main() {
  scanf("%d", &n);
  for (int i(0); (i) < (int)(n); i++) {
    scanf("%d%d", &r[i], &s[i]);
    id[i] = i;
  }
  sort(id, id + n, cmp);
  m = 0;
  int ms = (int)-1e9;
  int mr = (int)-1e9;
  for (int i = n - 1; i >= 0; i--)
    if (!m || r[id[i]] != r[a[m]] || s[id[i]] != s[a[m]]) {
      if (m && (r[id[i]] <= mr && s[id[i]] <= ms)) continue;
      ms = max(ms, s[id[i]]);
      mr = max(mr, r[id[i]]);
      a[++m] = id[i];
    }
  sort(a + 1, a + 1 + m, cmp);
  reverse(a + 1, a + 1 + m);
  t = 0;
  Q[++t] = a[1];
  if (m >= 2) Q[++t] = a[2];
  for (int i = 3; i <= m; i++) {
    while (t >= 2 && Sign((1.0 / r[a[i]] - 1.0 / r[Q[t - 1]]) *
                              (1.0 / s[Q[t]] - 1.0 / s[Q[t - 1]]) -
                          (1.0 / r[Q[t]] - 1.0 / r[Q[t - 1]]) *
                              (1.0 / s[a[i]] - 1.0 / s[Q[t - 1]])) > 0)
      t--;
    Q[++t] = a[i];
  }
  for (int i = 1; i <= t; i++) {
    zz[make_pair(r[Q[i]], s[Q[i]])] = 1;
  }
  int first = true;
  for (int i(0); (i) < (int)(n); i++)
    if (zz.count(make_pair(r[i], s[i]))) {
      if (!first) putchar(' ');
      printf("%d", i + 1);
      first = false;
    }
  puts("");
  return 0;
}
