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 
import java.io.*;
import java.util.*;

public class C {

    class Competitor implements Comparable<Competitor> {
        int id;
        int s, r;

        Competitor next;

        Competitor(int id, int s, int r) {
            this.id = id;
            this.s = s;
            this.r = r;
        }

        public int compareTo(Competitor c) {
            int d = c.s - s;
            if (d == 0) d = c.r - r;
            return d;
        }
    }

    class Fraction implements Comparable<Fraction> {
        long p, q;

        Fraction(long p, long q) {
            this.p = p;
            this.q = q;
        }

        public int compareTo(Fraction f) {
            long d = p * f.q - f.p * q;
            if (d < 0) return -1;
            if (d > 0) return 1;
            return 0;
        }
    }

    Fraction intersect(Competitor a, Competitor b) {
        long p = (long) a.s * b.s * (b.r - a.r);
        long q = a.s * b.r - b.s * a.r;
        if (q < 0) {
            p = -p;
            q = -q;
        }
        return new Fraction(p, q);
    }

    void solve() throws IOException {
        in = new InputReader("__std");
        out = new OutputWriter("__std");

        int n = in.readInt();
        Competitor[] c = new Competitor[n];
        for (int i = 0; i < n; ++i) {
            c[i] = new Competitor(i, in.readInt(), in.readInt());
        }

        Arrays.sort(c);

        int m = 1;
        for (int i = 1; i < n; ++i) {
            if (c[i].s == c[m - 1].s && c[i].r == c[m - 1].r) {
                c[i].next = c[m - 1].next;
                c[m - 1].next = c[i];
            } else {
                c[m++] = c[i];
            }
        }

        int k = 1;
        for (int i = 1; i < m; ++i) {
            if (c[i].r > c[k - 1].r) {
                while (k > 1) {
                    Fraction x1 = intersect(c[i], c[k - 2]);
                    Fraction x2 = intersect(c[k - 1], c[k - 2]);
                    if (x2.compareTo(x1) >= 0) break;
                    --k;
                }
                c[k++] = c[i];
            }
        }

        boolean[] mask = new boolean[n];
        for (int i = 0; i < k; ++i) {
            Competitor cur = c[i];
            while (cur != null) {
                mask[cur.id] = true;
                cur = cur.next;
            }
        }

        for (int i = 0; i < n; ++i) {
            if (mask[i]) out.print((i + 1) + " ");
        }

        exit();
    }

    void exit() {
        //System.err.println((System.currentTimeMillis() - startTime) + " ms");
        out.close();
        System.exit(0);
    }

    InputReader in;
    OutputWriter out;

    //long startTime = System.currentTimeMillis();

    public static void main(String[] args) throws IOException {
        new C().solve();
    }

    class InputReader {

        private InputStream stream;

        private byte[] buffer = new byte[1024];
        private int pos, len;

        private int cur;

        private StringBuilder sb = new StringBuilder(32);

        InputReader(String name) throws IOException {
            if (name.equals("__std")) {
                stream = System.in;
            } else {
                stream = new FileInputStream(name);
            }
            cur = read();
        }

        private int read() throws IOException {
            if (len == -1) {
                throw new EOFException();
            }
            if (pos >= len) {
                pos = 0;
                len = stream.read(buffer);
                if (len == -1) return -1;
            }
            return buffer[pos++];
        }

        private boolean whitespace() {
            return cur == ' ' || cur == '\t' || cur == '\r' || cur == '\n' || cur == -1;
        }

        char readChar() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            char res = (char) cur;
            cur = read();
            return res;
        }

        int readInt() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            while (whitespace()) {
                cur = read();
            }
            if (cur == -1) {
                throw new EOFException();
            }
            int sign = 1;
            if (cur == '-') {
                sign = -1;
                cur = read();
            }
            int res = 0;
            while (!whitespace()) {
                if (cur < '0' || cur > '9') {
                    throw new NumberFormatException();
                }
                res *= 10;
                res += cur - '0';
                cur = read();
            }
            return res * sign;
        }

        long readLong() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            return Long.parseLong(readToken());
        }

        double readDouble() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            return Double.parseDouble(readToken());
        }

        String readLine() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            sb.setLength(0);
            while (cur != -1 && cur != '\r' && cur != '\n') {
                sb.append((char) cur);
                cur = read();
            }
            if (cur == '\r') {
                cur = read();
            }
            if (cur == '\n') {
                cur = read();
            }
            return sb.toString();
        }

        String readToken() throws IOException {
            if (cur == -1) {
                throw new EOFException();
            }
            while (whitespace()) {
                cur = read();
            }
            if (cur == -1) {
                throw new EOFException();
            }
            sb.setLength(0);
            while (!whitespace()) {
                sb.append((char) cur);
                cur = read();
            }
            return sb.toString();
        }

        boolean eof() {
            return cur == -1;
        }
    }

    class OutputWriter {

        private PrintWriter writer;

        OutputWriter(String name) throws IOException {
            if (name.equals("__std")) {
                writer = new PrintWriter(System.out);
            } else {
                writer = new PrintWriter(name);
            }
        }

        void print(String format, Object ... args) {
            writer.print(new Formatter(Locale.US).format(format, args));
        }

        void println(String format, Object ... args) {
            writer.println(new Formatter(Locale.US).format(format, args));
        }

        void print(Object value) {
            writer.print(value);
        }

        void println(Object value) {
            writer.println(value);
        }

        void println() {
            writer.println();
        }

        void close() {
            writer.close();
        }
    }
}
