Problem: Nauuo is a girl who loves playing chess.

One day she invented a game by herself which needs n chess pieces to play on a m× m chessboard. The rows and columns are numbered from 1 to m. We denote a cell on the intersection of the r-th row and c-th column as (r,c).

The game's goal is to place n chess pieces numbered from 1 to n on the chessboard, the i-th piece lies on (r_i,\,c_i), while the following rule is satisfied: for all pairs of pieces i and j, |r_i-r_j|+|c_i-c_j|≥|i-j|. Here |x| means the absolute value of x.

However, Nauuo discovered that sometimes she couldn't find a solution because the chessboard was too small.

She wants to find the smallest chessboard on which she can put n pieces according to the rules.

She also wonders how to place the pieces on such a chessboard. Can you help her?

Input

The only line contains a single integer n (1≤ n≤ 1000) — the number of chess pieces for the game.

Output

The first line contains a single integer — the minimum value of m, where m is the length of sides of the suitable chessboard.

The i-th of the next n lines contains two integers r_i and c_i (1≤ r_i,c_i≤ m) — the coordinates of the i-th chess piece.

If there are multiple answers, print any.

Examples

Input


2


Output


2
1 1
1 2

Input


4


Output


3
1 1
1 3
3 1
3 3

Note

In the first example, you can't place the two pieces on a 1×1 chessboard without breaking the rule. But you can place two pieces on a 2×2 chessboard like this:

<image>

In the second example, you can't place four pieces on a 2×2 chessboard without breaking the rule. For example, if you place the pieces like this:

<image>

then |r_1-r_3|+|c_1-c_3|=|1-2|+|1-1|=1, |1-3|=2, 1<2; and |r_1-r_4|+|c_1-c_4|=|1-2|+|1-2|=2, |1-4|=3, 2<3. It doesn't satisfy the rule.

However, on a 3×3 chessboard, you can place four pieces like this:

<image>

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.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();
								int row=1,col=1,rowflag=0,ans=0;
								for(int i=1;i<=n;i++){
									if(i==n){
										ans=Math.max(row, col);
									}
									if(rowflag==0)col++;
									else row++;
									rowflag^=1;
								}
								pr.println(ans+"");
								row=1;col=1;rowflag=0;
								for(int i=1;i<=n;i++){
									pr.println(row+" "+col);
									if(rowflag==0)col++;
									else row++;
									rowflag^=1;
								}
								pr.close();
								
							}
						
							public static class node{
								int a;
								int b;
								public node(int a,int b){
									this.a=a;this.b=b;
								}
							}
							
					}