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 const N = 1e4 + 6;
double const eps = 1e-25;
double const INF = LLONG_MAX * 1.0 / 3.0;
vector<pair<int, int>> a;
vector<int> answer;
int ok[N], maxi[N], n;
double f(int si, int sj, int ri, int rj) {
  double a = 1.0 * (sj - si) * rj * ri;
  double b = 1.0 * (ri - rj) * sj * si;
  return a / b;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int f, s;
    cin >> f >> s;
    a.push_back(make_pair(f, s));
    maxi[f] = max(maxi[f], s);
  }
  for (int i = N - 1; i > 0; i--) {
    if (!maxi[i]) continue;
    bool curAns = 1;
    double rig = 0.0;
    double lef = INF;
    for (int j = i - 1; j > 0; j--) {
      if (maxi[j] <= maxi[i]) continue;
      rig = max(rig, f(maxi[i], maxi[j], i, j));
    }
    for (int j = i + 1; j < N; j++) {
      if (maxi[i] <= maxi[j]) {
        curAns = 0;
        break;
      }
      lef = min(lef, f(maxi[j], maxi[i], j, i));
    }
    if (rig - lef > eps) curAns = 0;
    ok[i] = curAns;
  }
  for (int i = 0; i < a.size(); i++) {
    if (maxi[a[i].first] == a[i].second && ok[a[i].first]) answer.push_back(i);
  }
  for (int i = 0; i < answer.size(); i++) cout << answer[i] + 1 << " ";
  return 0;
}
