One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got access to the memory of his not less mean sister Hexadecimal. He loaded there a huge amount of n different natural numbers from 1 to n to obtain total control over her energy.

But his plan failed. The reason for this was very simple: Hexadecimal didn't perceive any information, apart from numbers written in binary format. This means that if a number in a decimal representation contained characters apart from 0 and 1, it was not stored in the memory. Now Megabyte wants to know, how many numbers were loaded successfully.

Input

Input data contains the only number n (1 ≤ n ≤ 109).

Output

Output the only number — answer to the problem.

Examples

Input

10


Output

2

Note

For n = 10 the answer includes numbers 1 and 10.
import java.util.*;
import java.math.*;
import java.io.*;
import java.text.*;

public class A{
	
static class Node implements Comparable<Node> {
	int n;
	int cnt;
	public Node(int n,int cnt) {
		this.n=n;
		this.cnt=cnt;
		
		
	}
	public int compareTo(Node c) {
	   return this.n-c.n;
	}
}
//public static PrintWriter pw; 
public static PrintWriter pw=new PrintWriter(System.out);
public static void solve() throws IOException{
//	pw=new PrintWriter(new FileWriter("C:\\Users\\shree\\Downloads\\small_output_in"));
	FastReader sc=new FastReader();
	long n=sc.nextLong();
	PriorityQueue<Integer>q=new PriorityQueue<>();
	q.offer(1);
	HashSet<Integer> h=new HashSet<>();
	PriorityQueue<Long>q2=new PriorityQueue<>();
	h.add(1);
	q2.offer((long)1);
	while(!q.isEmpty()) {
		int t=q.poll();
		if(t>=1<<10)break;
		int d1=t<<1;
		int d2=d1;
		d2^=(1<<0);
		if(!h.contains(d1)) {
			h.add(d1);
			q.offer(d1);
			q2.offer(Long.parseLong(Long.toBinaryString(d1)));
		}
		if(!h.contains(d2)) {
			h.add(d2);
			q.offer(d2);
			q2.offer(Long.parseLong(Long.toBinaryString(d2)));
		}
	}
	int cnt=0;
	while(!q2.isEmpty()) {
		long d=q2.poll();
		
		if(d<=n)cnt++; else break;
	}
	pw.println(cnt);
	pw.close();
	
}

public static void main(String[] args)  {
    new Thread(null ,new Runnable(){
      public void run(){
          try{
          
              solve();
          } catch(Exception e){
              e.printStackTrace();
          }
      }
  },"1",1<<26).start();
 
}
static long modPow(long x,long y,long M){
	if(y==0) return 1;
	if(y%2==0) return modPow((x*x)%M,y/2,M)%M;
	else return (x*modPow((x*x)%M,(y-1)/2,M))%M;
}

static long M=(long)Math.pow(10,9)+7;
 
	static class FastReader {
        BufferedReader br;
        StringTokenizer st;
 
        public FastReader() throws FileNotFoundException{
            //br=new BufferedReader(new FileReader("C:\\Users\\shree\\Downloads\\B-small-practice.in"));	
        	 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;
        }
     }
}