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;
inline int read() {
  int x = 0;
  bool t = false;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') t = true, ch = getchar();
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - 48, ch = getchar();
  return t ? -x : x;
}
map<pair<int, int>, int> M;
int n, top;
struct Node {
  int x, y, id;
  long double xx, yy;
} p[300300], S[300300];
bool operator<(Node a, Node b) {
  if (a.y != b.y) return a.y < b.y;
  return a.x > b.x;
}
bool cmp(Node a, Node b) { return a.id < b.id; }
long double K(Node a, Node b) { return (a.xx - b.xx) / (a.yy - b.yy); }
bool vis[300300];
int main() {
  n = read();
  for (int i = 1; i <= n; ++i) p[i].x = read(), p[i].y = read(), p[i].id = i;
  for (int i = 1; i <= n; ++i) p[i].xx = 1e9 / p[i].x;
  for (int i = 1; i <= n; ++i) p[i].yy = 1e9 / p[i].y;
  sort(&p[1], &p[n + 1]);
  S[top = 1] = (Node){0, 0, 0, 0, 1e18};
  for (int i = 1; i <= n; ++i) {
    if (p[i].y == p[i - 1].y) continue;
    while (top > 1 && K(p[i], S[top]) > K(S[top], S[top - 1]) + 1e-15) --top;
    S[++top] = p[i];
  }
  sort(&p[1], &p[n + 1], cmp);
  for (int i = 1; i <= top; ++i) M[make_pair(S[i].x, S[i].y)] = 1;
  for (int i = 1; i <= n; ++i)
    if (M.find(make_pair(p[i].x, p[i].y)) != M.end()) printf("%d ", i);
  return 0;
}
