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 = 200000;
long long x[N], y[N];
vector<int> ids[N];
int order[N];
long long cross(int a, int b, int c) {
  return x[c] * y[c] * (x[b] * y[a] - x[a] * y[b]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> x[i] >> y[i];
  }
  iota(order, order + n, 0);
  sort(order, order + n,
       [&](int a, int b) { return x[a] == x[b] ? y[a] > y[b] : x[a] > x[b]; });
  vector<int> hull;
  for (int i = 0, j = 0; i < n; i = j) {
    int a = order[i];
    while (hull.size() >= 2) {
      int b = hull[hull.size() - 1], c = hull[hull.size() - 2];
      if (cross(a, c, b) + cross(b, a, c) + cross(c, b, a) >= 0) {
        break;
      }
      hull.pop_back();
    }
    hull.push_back(a);
    while (j < n && x[order[j]] == x[a] && y[order[j]] == y[a]) {
      ids[a].push_back(order[j++]);
    }
  }
  while (hull.size() >= 2) {
    int a = hull[hull.size() - 1], b = hull[hull.size() - 2];
    if (y[b] < y[a]) {
      break;
    }
    hull.pop_back();
  }
  vector<int> ans;
  for (auto i : hull) {
    ans.insert(ans.begin(), ids[i].begin(), ids[i].end());
  }
  sort(ans.begin(), ans.end());
  for (auto i : ans) {
    cout << i + 1 << " ";
  }
  cout << "\n";
}
