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 mx = 2e5 + 10;
long long int x[mx], y[mx];
int ord[mx];
int hs[mx], h = 0;
vector<int> g[mx];
int ans[mx];
int cross(int a, int o, int b) {
  long long int l = (x[o] - x[a]) * (y[o] - y[b]) * y[a] * x[b];
  long long int r = (y[o] - y[a]) * (x[o] - x[b]) * x[a] * y[b];
  if (l == r) return 0;
  if (l < r) return -1;
  return 1;
}
bool cmp1(int i, int j) {
  if (x[i] != x[j]) return x[i] < x[j];
  if (y[i] != y[j]) return y[i] < y[j];
  return i < j;
}
bool cmp(int i, int j) {
  int c = cross(i, ord[0], j);
  if (c == 0) {
    if (x[j] != x[i]) return x[j] < x[i];
    return i < j;
  }
  return c > 0;
}
inline bool ccw(int a, int o, int b) { return (-cross(a, o, b)) >= 0; }
int main() {
  int n, xi, yi;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &xi, &yi);
    x[i] = xi, y[i] = yi, ord[i] = i;
  }
  sort(ord, ord + n, cmp1);
  int c = 0;
  int il = 0, id = 0;
  for (int i = 0; i < n;) {
    int ii = ord[i];
    int xi = x[ii], yi = y[ii];
    while (i < n && x[ord[i]] == xi && y[ord[i]] == yi) {
      g[ii].push_back(ord[i]);
      i++;
    }
    int j = ord[il];
    if (xi > x[j] || (xi == x[j] && yi > y[j])) il = c;
    j = ord[id];
    if (yi > y[j] || (yi == y[j] && xi > x[j])) id = c;
    ord[c++] = ii;
  }
  int dwn = ord[id];
  swap(ord[0], ord[il]);
  sort(ord + 1, ord + c, cmp);
  for (int i = 0; i < c; i++) {
    while (h >= 2 && !ccw(hs[h - 2], hs[h - 1], ord[i])) h--;
    hs[h++] = ord[i];
    if (ord[i] == dwn) break;
  }
  c = 0;
  for (int i = 0; i < h; i++) {
    int u = hs[i];
    for (int j = 0; j < int(g[u].size()); j++) {
      ans[c++] = 1 + g[u][j];
    }
  }
  sort(ans, ans + c);
  printf("%d", ans[0]);
  for (int i = 1; i < c; i++) printf(" %d", ans[i]);
  printf("\n");
  return 0;
}
