Problem: You are given n pairs of integers (a_1, b_1), (a_2, b_2), …, (a_n, b_n). All of the integers in the pairs are distinct and are in the range from 1 to 2 ⋅ n inclusive.

Let's call a sequence of integers x_1, x_2, …, x_{2k} good if either 

  * x_1 < x_2 > x_3 < … < x_{2k-2} > x_{2k-1} < x_{2k}, or 
  * x_1 > x_2 < x_3 > … > x_{2k-2} < x_{2k-1} > x_{2k}. 



You need to choose a subset of distinct indices i_1, i_2, …, i_t and their order in a way that if you write down all numbers from the pairs in a single sequence (the sequence would be a_{i_1}, b_{i_1}, a_{i_2}, b_{i_2}, …, a_{i_t}, b_{i_t}), this sequence is good.

What is the largest subset of indices you can choose? You also need to construct the corresponding index sequence i_1, i_2, …, i_t.

Input

The first line contains single integer n (2 ≤ n ≤ 3 ⋅ 10^5) — the number of pairs.

Each of the next n lines contain two numbers — a_i and b_i (1 ≤ a_i, b_i ≤ 2 ⋅ n) — the elements of the pairs.

It is guaranteed that all integers in the pairs are distinct, that is, every integer from 1 to 2 ⋅ n is mentioned exactly once.

Output

In the first line print a single integer t — the number of pairs in the answer.

Then print t distinct integers i_1, i_2, …, i_t — the indexes of pairs in the corresponding order.

Examples

Input


5
1 7
6 4
2 10
9 8
3 5


Output


3
1 5 3


Input


3
5 4
3 2
6 1


Output


3
3 2 1

Note

The final sequence in the first example is 1 < 7 > 3 < 5 > 2 < 10.

The final sequence in the second example is 6 > 1 < 3 > 2 < 5 > 4.

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer; 
					  
					
					public class temp4 {
						static class FastReader 
					    { 
					        BufferedReader br; 
					        StringTokenizer st; 
					  
					        public FastReader() 
					        { 
					            br = new BufferedReader(new
					                     InputStreamReader(System.in)); 
					        } 
					  
					        String next() 
					        { 
					            while (st == null || !st.hasMoreElements()) 
					            { 
					                try
					                { 
					                    st = new StringTokenizer(br.readLine()); 
					                } 
					                catch (IOException  e) 
					                { 
					                    e.printStackTrace(); 
					                } 
					            } 
					            return st.nextToken(); 
					        } 
					  
					        int nextInt() 
					        { 
					            return Integer.parseInt(next()); 
					        } 
					  
					        long nextLong() 
					        { 
					            return Long.parseLong(next()); 
					        } 
					  
					        double nextDouble() 
					        { 
					            return Double.parseDouble(next()); 
					        } 
					  
					        String nextLine() 
					        { 
					            String str = ""; 
					            try
					            { 
					                str = br.readLine(); 
					            } 
					            catch (IOException e) 
					            { 
					                e.printStackTrace(); 
					            } 
					            return str; 
					        } 
					    } 
						
					/*	static class Reader 
					    { 
					        final private int BUFFER_SIZE = 1 << 16; 
					        private DataInputStream din; 
					        private byte[] buffer; 
					        private int bufferPointer, bytesRead; 
					  
					        public Reader() 
					        { 
					            din = new DataInputStream(System.in); 
					            buffer = new byte[BUFFER_SIZE]; 
					            bufferPointer = bytesRead = 0; 
					        } 
					  
					        public Reader(String file_name) throws IOException 
					        { 
					            din = new DataInputStream(new FileInputStream(file_name)); 
					            buffer = new byte[BUFFER_SIZE]; 
					            bufferPointer = bytesRead = 0; 
					        } 
					  
					        public String readLine() throws IOException 
					        { 
					            byte[] buf = new byte[64]; // line length 
					            int cnt = 0, c; 
					            while ((c = read()) != -1) 
					            { 
					                if (c == '\n') 
					                    break; 
					                buf[cnt++] = (byte) c; 
					            } 
					            return new String(buf, 0, cnt); 
					        } 
					  
					        public int nextInt() throws IOException 
					        { 
					            int ret = 0; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					            do
					            { 
					                ret = ret * 10 + c - '0'; 
					            }  while ((c = read()) >= '0' && c <= '9'); 
					  
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        public long nextLong() throws IOException 
					        { 
					            long ret = 0; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					            do { 
					                ret = ret * 10 + c - '0'; 
					            } 
					            while ((c = read()) >= '0' && c <= '9'); 
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        public double nextDouble() throws IOException 
					        { 
					            double ret = 0, div = 1; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					  
					            do { 
					                ret = ret * 10 + c - '0'; 
					            } 
					            while ((c = read()) >= '0' && c <= '9'); 
					  
					            if (c == '.') 
					            { 
					                while ((c = read()) >= '0' && c <= '9') 
					                { 
					                    ret += (c - '0') / (div *= 10); 
					                } 
					            } 
					  
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        private void fillBuffer() throws IOException 
					        { 
					            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
					            if (bytesRead == -1) 
					                buffer[0] = -1; 
					        } 
					  
					        private byte read() throws IOException 
					        { 
					            if (bufferPointer == bytesRead) 
					                fillBuffer(); 
					            return buffer[bufferPointer++]; 
					        } 
					  
					        public void close() throws IOException 
					        { 
					            if (din == null) 
					                return; 
					            din.close(); 
					        } 
					    } */
						static class Print
					{
						    private final BufferedWriter bw;
						    public Print()
						    {
						        bw=new BufferedWriter(new OutputStreamWriter(System.out));
						    }
					    public void print(String str)throws IOException
						    {
						        bw.append(str);
						    }
						    public void println(String str)throws IOException
						    {
						        print(str);
						        bw.append("\n");
						    }
						    public void close()throws IOException
						    {
						        bw.close();
						    }} 
							
							
							
						
							public static void main(String[] args) throws IOException {			
								FastReader scn=new FastReader();
								Print pr=new Print();
								int n=scn.nextInt(),a=0,b=0;
								ArrayList<node> arr1=new ArrayList<>();
								ArrayList<node> arr2=new ArrayList<>();
								for(int i=0;i<n;i++){
									a=scn.nextInt();b=scn.nextInt();
									if(a<b){
										arr1.add(new node(n-1-a,i+1));
									}
									else{
										arr2.add(new node(a,i+1));
									}
								}
								
								if(arr1.size()>arr2.size()){
									Collections.sort(arr1,new Comparator<node>(){
										public int compare(node one,node two){
											return one.a-two.a;
										}
									});
									pr.println(arr1.size()+"");
									for(node x:arr1){
										pr.print(x.b+" ");
									}
								}
								else{
									Collections.sort(arr2,new Comparator<node>(){
										public int compare(node one,node two){
											return one.a-two.a;
										}
									});
									pr.println(arr2.size()+"");
									for(node x:arr2){
										pr.print(x.b+" ");
									}
								}
								pr.close();
								
							}
						
							public static class node{
								int a;
								int b;
								public node(int a,int b){
									this.a=a;this.b=b;
								}
							}
							
					}