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.Scanner;

public class Main {
    private static int[][] dp;
    private static int top;
    private static int[] s;

    public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);
    dp = new int[15][2];
    s = new int[15];
    int n = cin.nextInt();
    top = 0;
    dfs(n);
    for (int i = 0; i <= top; i++) {
        dp[i][0] = dp[i][1] = -1;
    }
    System.out.println(dfs(0, 0) - 1);
    }

    private static int dfs(int k, int u) {
    // TODO Auto-generated method stub
    if (dp[k][u] != -1)
        return dp[k][u];
    if (k == top) {
        return dp[k][u] = 1;
    }
    dp[k][u] = 0;
    int ed;
    if (u == 0)
        ed = Math.min(1, s[k]);
    else
        ed = 1;
    for (int i = 0; i <= ed; i++) {
        int nu;
        if (u == 1 || i < s[k])
        nu = 1;
        else
        nu = 0;
        dp[k][u] += dfs(k + 1, nu);
    }
    return dp[k][u];
    }

    private static void dfs(int n) {
    // TODO Auto-generated method stub
    if (n < 10) {
        s[top++] = n;
        return;
    }
    dfs(n / 10);
    s[top++] = n % 10;
    }
}