You have n coins, each of the same value of 1.

Distribute them into packets such that any amount x (1 ≤ x ≤ n) can be formed using some (possibly one or all) number of these packets.

Each packet may only be used entirely or not used at all. No packet may be used more than once in the formation of the single x, however it may be reused for the formation of other x's.

Find the minimum number of packets in such a distribution.

Input

The only line contains a single integer n (1 ≤ n ≤ 10^9) — the number of coins you have.

Output

Output a single integer — the minimum possible number of packets, satisfying the condition above.

Examples

Input

6


Output

3

Input

2


Output

2

Note

In the first example, three packets with 1, 2 and 3 coins can be made to get any amount x (1≤ x≤ 6).

  * To get 1 use the packet with 1 coin. 
  * To get 2 use the packet with 2 coins. 
  * To get 3 use the packet with 3 coins. 
  * To get 4 use packets with 1 and 3 coins. 
  * To get 5 use packets with 2 and 3 coins 
  * To get 6 use all packets. 



In the second example, two packets with 1 and 1 coins can be made to get any amount x (1≤ x≤ 2).
					import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.InputMismatchException;
						public class Main implements Runnable
						{
							static final long MOD = 1000000007L;
							static final long MOD2 = 1000000009L;
							static class InputReader
							{
								private InputStream stream;
								private byte[] buf = new byte[1024];
								private int curChar;
								private int numChars;
								private SpaceCharFilter filter;
								private BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
						 
								public InputReader(InputStream stream)
								{
									this.stream = stream;
								}
								
								public int read()
								{
									if (numChars==-1) 
										throw new InputMismatchException();
									
									if (curChar >= numChars)
									{
										curChar = 0;
										try 
										{
											numChars = stream.read(buf);
										}
										catch (IOException e)
										{
											throw new InputMismatchException();
										}
										
										if(numChars <= 0)				
											return -1;
									}
									return buf[curChar++];
								}
							 
								public String nextLine()
								{
									String str = "";
						            try
						            {
						                str = br.readLine();
						            }
						            catch (IOException e)
						            {
						                e.printStackTrace();
						            }
						            return str;
								}
								public int nextInt()
								{
									int c = read();
									
									while(isSpaceChar(c)) 
										c = read();
									
									int sgn = 1;
									
									if (c == '-') 
									{
										sgn = -1;
										c = read();
									}
									
									int res = 0;
									do 
									{
										if(c<'0'||c>'9') 
											throw new InputMismatchException();
										res *= 10;
										res += c - '0';
										c = read();
									}
									while (!isSpaceChar(c)); 
									
									return res * sgn;
								}
								
								public long nextLong() 
								{
									int c = read();
									while (isSpaceChar(c))
										c = read();
									int sgn = 1;
									if (c == '-') 
									{
										sgn = -1;
										c = read();
									}
									long res = 0;
									
									do 
									{
										if (c < '0' || c > '9')
											throw new InputMismatchException();
										res *= 10;
										res += c - '0';
										c = read();
									}
									while (!isSpaceChar(c));
										return res * sgn;
								}
								
								public double nextDouble() 
								{
									int c = read();
									while (isSpaceChar(c))
										c = read();
									int sgn = 1;
									if (c == '-') 
									{
										sgn = -1;
										c = read();
									}
									double res = 0;
									while (!isSpaceChar(c) && c != '.') 
									{
										if (c == 'e' || c == 'E')
											return res * Math.pow(10, nextInt());
										if (c < '0' || c > '9')
											throw new InputMismatchException();
										res *= 10;
										res += c - '0';
										c = read();
									}
									if (c == '.') 
									{
										c = read();
										double m = 1;
										while (!isSpaceChar(c)) 
										{
											if (c == 'e' || c == 'E')
												return res * Math.pow(10, nextInt());
											if (c < '0' || c > '9')
												throw new InputMismatchException();
											m /= 10;
											res += (c - '0') * m;
											c = read();
										}
									}
									return res * sgn;
								}
								
								public String readString() 
								{
									int c = read();
									while (isSpaceChar(c))
										c = read();
									StringBuilder res = new StringBuilder();
									do 
									{
										res.appendCodePoint(c);
										c = read();
									} 
									while (!isSpaceChar(c));
									
									return res.toString();
								}
							 
								public boolean isSpaceChar(int c) 
								{
									if (filter != null)
										return filter.isSpaceChar(c);
									return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
								}
							 
								public String next() 
								{
									return readString();
								}
								
								public interface SpaceCharFilter 
								{
									public boolean isSpaceChar(int ch);
								}
							}
						 	
							public static void main(String args[]) throws Exception
							{
								new Thread(null, new Main(),"Main",1<<26).start();
							}
							int MAXN = 1000001;
							ArrayList<Integer> adj[];
							ArrayList<Temp> adj2[];
							
							int[] dx = {1,-1,0,0};
							int[] dy = {0,0,1,-1};
							public void run() 
							{
								try {
									//InputReader sc= new InputReader(new FileInputStream("input.txt"));
									//PrintWriter w= new PrintWriter(new FileWriter("output.txt"));
									InputReader sc = new InputReader(System.in);
                                    PrintWriter w = new PrintWriter(System.out);
                                    int n = sc.nextInt();
                                    if(n == 1) {
                                    	w.println("1");
                                    	w.close();
                                    }
                                    long ans=  0;
                                    long cnt = 1;
                                    long sum = 1;
                                    long i = 2;
                                    while(true) {
                                    	
                                    	cnt++;
                                    	sum += i;
                                    	i = sum+1;
                                    	if(i > n) {
                                    		break;
                                    	}
                                    }
                                    w.println(cnt);
									w.close();							
								}
								catch(Exception e) {
									
								}
							}
							static class Temp implements Comparable<Temp>{
								int a;
								int b;
								long c;
								Temp(int a,int b,long c){
									this.a = a;
									this.b = b;
									this.c = c;
								}
								@Override
								public int compareTo(Temp o) {
									// TODO Auto-generated method stub
									return Long.compare(o.c, this.c);
								}
							}
							
							boolean[] prime;
							void sieve() {
								prime = new boolean[MAXN];
								Arrays.fill(prime, true);
								prime[1] = false;
								for(int i = 2;i < MAXN;i++) {
									if(prime[i]) {
										for(int j = 2*i;j < MAXN;j += i) {
											prime[j] = false;
										}
									}
								}
							}
							int[] spf;
							
							long power(long a,long b,long mod) {
								long res = 1;
								a = a % mod;
								while(b > 0) {
									if(b % 2 == 1) {
										res = (res * a) % mod;
									}
									a = (a * a) % mod;
									b = b/2;
								}
								return res;
							}
							int[] ar;
							int root(int a) {
								while(ar[a] !=a) {
									ar[a] = ar[ar[a]];
									a = ar[a];
								}
								return a;
							}
							void union(int a,int b) {
								int root_a = root(a);
								int root_b = root(b);
								ar[root_a] = root_b;
							}
							boolean find(int a,int b) {
								int root_a = root(a);
								int root_b = root(b);
								return (root_a == root_b);
							}
							static class Pair implements Comparable<Pair>{
								int a;
								int b;
								
								Pair(int a,int b){
									this.a = a;
									this.b = b;
								
								}
								@Override
								public int compareTo(Pair o) {
									// TODO Auto-generated method stub
									return Long.compare(this.b,o.b);
								}
								public boolean equals(Object o) {
									Pair p = (Pair)o;
									return this.a == p.a && this.b == p.b;
								}
								public int hashCode(){
									return Long.hashCode(a)*27 + Long.hashCode(b)* 31;
								}
							}
							
						}