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 long long N = 300005;
long long n;
long long a[N], b[N];
long long p[N];
long long q[N];
double k[N];
inline bool cmp(long long x, long long y) {
  long long x1 = a[y], y1 = b[y];
  long long x2 = a[x], y2 = b[x];
  return (x1 != x2) ? (x1 < x2) : (y1 < y2);
}
long long r = 0;
inline double S(double x, double y, double xx, double yy) {
  return (yy - y) / (xx - x);
}
inline double SS(long long x, long long y) {
  return 1.0 * (1.0 * (b[x] - b[y]) * a[x] * a[y]) /
         (1.0 * (a[x] - a[y]) * b[x] * b[y]);
}
vector<long long> ans;
long long nx[N];
inline long long read() {
  long long f = 0, s = 0;
  char c = getchar();
  while (c > '9' || c < '0') f = (c == '-'), c = getchar();
  while (c >= '0' && c <= '9')
    s = (s << 3) + (s << 1) + (c ^ '0'), c = getchar();
  return f ? -s : s;
}
signed main() {
  n = read();
  for (long long i = 1; i <= n; i++) scanf("%lld%lld", &a[i], &b[i]);
  for (long long i = 1; i <= n; i++) p[i] = i;
  sort(p + 1, p + n + 1, cmp);
  for (long long i = 1; i <= n; i++) {
    if (a[p[i]] == a[p[i - 1]] && b[p[i]] == b[p[i - 1]]) {
      nx[p[i - 1]] = p[i];
      continue;
    }
    while (r >= 2 && k[r] > SS(q[r], p[i])) {
      r--;
    }
    q[++r] = p[i];
    if (r > 1) k[r] = SS(q[r - 1], q[r]);
  }
  long long tmp = q[1];
  while (tmp) {
    ans.push_back(tmp);
    tmp = nx[tmp];
  }
  for (long long i = 1; i < r; i++)
    if (SS(q[i], q[i + 1]) < 0) {
      long long tmp = q[i + 1];
      while (tmp) {
        ans.push_back(tmp);
        tmp = nx[tmp];
      }
    }
  sort(ans.begin(), ans.end());
  for (long long i = 0; i < ans.size(); i++) printf("%lld ", ans[i]);
  return 0;
}
