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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.*;


public class C 
{
    private static Comparator<int[]> cmp = new Comparator<int[]>() {
        
        @Override
        public int compare(int[] a, int[] b) {
            if(a[0] != b[0])
                return Integer.compare(a[0], b[0]);
            else
                return Integer.compare(a[1], b[1]);
        }
    };
    public static void main(String [] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter writer = new PrintWriter(System.out);
        
        int n = Integer.parseInt(reader.readLine());
        int [][] competitors = new int[n][];
        int [] maxXY = new int[10000+13];
        for(int i = 0 ; i < n ; i++)
        {
            StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
            int s = Integer.parseInt(tokenizer.nextToken());
            int r = Integer.parseInt(tokenizer.nextToken());
            
            maxXY[s] = Math.max(maxXY[s], r);
            
            competitors[i] = new int[]{s, r};
        }
        
        
        int best = 0;
        int [][] convex = new int[n][];
        int sz = 0;
        for(int i = 10000 ; i >= 1 ; i--)
            if(maxXY[i] > best)
            {
                best = maxXY[i];
                while(sz > 1 && ccw(convex[sz-2], convex[sz-1], new int[] {i, maxXY[i]}) < 0)
                    sz--;
                convex[sz++] = new int[] {i, maxXY[i]};
            }
        
        Arrays.sort(convex, 0, sz, cmp);
        
        boolean [] good = new boolean[n];
        for(int i = 0 ; i < n ; i++)
            if(Arrays.binarySearch(convex, 0, sz, competitors[i], cmp) >= 0)
                good[i] = true;
        
        for(int i = 0 ; i < n ; i++)
            if(good[i])
                writer.print((i+1)+" ");
        writer.println();
        
        writer.flush();
        writer.close();
        
    }
    
    private static long ccw(int[] a, int[] b,int[] c)
    {
        long u1 = (a[0]-b[0])*1L*(a[1]-c[1]);
        
        long u2 = (a[1]-b[1])*1L*(a[0]-c[0]);
    
        return Long.compare(u1*b[1]*1L*c[0], u2*b[0]*1L*c[1]);  
    }
    
}
