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 long long N = 200005;
long long n;
struct qq {
  long long x, y, id;
} s[N];
bool cmp(qq x, qq y) { return x.x == y.x ? x.y < y.y : x.x < y.x; }
long long sta[N], top;
bool check(qq a, qq b, qq c) {
  return a.x * (a.y - b.y) * c.y * (c.x - b.x) >
         c.x * (b.y - c.y) * a.y * (b.x - a.x);
}
map<pair<long long, long long>, long long> mp;
bool ok[N];
int main() {
  scanf("%lld", &n);
  for (long long u = 1; u <= n; u++) {
    scanf("%lld%lld", &s[u].x, &s[u].y);
    s[u].id = u;
  }
  sort(s + 1, s + 1 + n, cmp);
  for (long long u = 1; u <= n; u++) {
    while (top >= 1 && s[sta[top]].y <= s[u].y) top--;
    while (top >= 2 && check(s[sta[top - 1]], s[sta[top]], s[u])) top--;
    sta[++top] = u;
  }
  memset(ok, false, sizeof(ok));
  for (int u = 1; u <= top; u++) mp[make_pair(s[sta[u]].x, s[sta[u]].y)] = 1;
  for (long long u = 1; u <= n; u++)
    if (mp[make_pair(s[u].x, s[u].y)]) ok[s[u].id] = true;
  for (long long u = 1; u <= n; u++)
    if (ok[u]) printf("%lld ", u);
  return 0;
}
