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>
long long cross(long long x0, long long y0, long long x1, long long y1,
                long long x2, long long y2) {
  return (x1 - x0) * (y2 - y0) - (y1 - y0) * (x2 - x0);
}
long long cross_(int x0, int y0, int x1, int y1, int x2, int y2) {
  return cross(x1 * x2, y1 * y2, x0 * x2, y0 * y2, x0 * x1, y0 * y1);
}
int ss[200000], rr[200000];
int compare(const void *a, const void *b) {
  int i = *(int *)a;
  int j = *(int *)b;
  return ss[i] != ss[j]   ? ss[j] - ss[i]
         : rr[i] != rr[j] ? rr[j] - rr[i]
                          : i - j;
}
int main() {
  static int ii[200000], jj[200000], stack[200000];
  static char ok[200000];
  int n, i, i_, j_, cnt, max;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d%d", &ss[i], &rr[i]);
  for (i = 0; i < n; i++) {
    ii[i] = i;
    jj[i] = -1;
  }
  qsort(ii, n, sizeof *ii, compare);
  max = 0;
  for (i = 0; i < n; i++) {
    i_ = ii[i - 1], j_ = ii[i];
    if (i > 0 && ss[i_] == ss[j_] && rr[i_] == rr[j_]) jj[j_] = i_;
    if (max < rr[j_]) {
      max = rr[j_];
      ok[j_] = 1;
    }
  }
  cnt = 0;
  for (i = 0; i < n; i++) {
    i_ = ii[i];
    if (ok[i_]) {
      while (cnt >= 2 &&
             cross_(ss[stack[cnt - 2]], rr[stack[cnt - 2]], ss[stack[cnt - 1]],
                    rr[stack[cnt - 1]], ss[i_], rr[i_]) < 0)
        ok[stack[--cnt]] = 0;
      stack[cnt++] = i_;
    }
  }
  for (i = 0; i < n; i++)
    if (ok[i] || (jj[i] != -1 && ok[jj[i]])) {
      ok[i] = 1;
      printf("%d ", i + 1);
    }
  printf("\n");
  return 0;
}
