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;
long long gcd(long long a, long long b) {
  long long r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
const int maxn = 200010;
int n;
int s[maxn];
int r[maxn];
vector<pair<int, int> > p, v1, v2;
map<pair<int, int>, bool> mp;
long double intersect(pair<int, int> p1, pair<int, int> p2) {
  return 0.1 * p1.second * p2.second * (p2.first - p1.first) / p1.first /
         p2.first / (p1.second - p2.second);
}
void solve() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", s + i, r + i);
    p.push_back(make_pair(s[i], r[i]));
  }
  sort(p.begin(), p.end());
  for (int i = 0; i < n; i++) {
    while (int((v1).size()) && v1.back().second <= p[i].second) v1.pop_back();
    v1.push_back(p[i]);
  }
  for (int i = 0; i < int((v1).size()); i++) {
    while (int((v2).size()) > 1 &&
           intersect(v2.back(), v1[i]) >
               intersect(v2[int((v2).size()) - 2], v2.back()) + 1e-9)
      v2.pop_back();
    v2.push_back(v1[i]);
  }
  for (int i = 0; i < int((v2).size()); i++) mp[v2[i]] = 1;
  for (int i = 0; i < n; i++)
    if (mp[make_pair(s[i], r[i])]) printf("%d ", i + 1);
}
int main() {
  solve();
  return 0;
}
