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.
#include <bits/stdc++.h>
using namespace std;
int number;
vector<int> vec;
int n;
int dp[11][2][2];
int f(int next, int one, int less) {
  if (dp[next][one][less] != -1) {
    return dp[next][one][less];
  }
  if (next >= n) {
    if (!one) {
      dp[next][one][less] = 0;
      return 0;
    } else {
      dp[next][one][less] = 1;
      return 1;
    }
  }
  int ret = 0;
  for (int dig = 0; dig <= 1; ++dig) {
    if (dig <= vec[next] || less) {
      int nextone = one;
      if (dig == 1) nextone = 1;
      int nextless = less;
      if (dig < vec[next]) nextless = 1;
      ret += f(next + 1, nextone, nextless);
    }
  }
  dp[next][one][less] = ret;
  return ret;
}
int main() {
  cin >> number;
  while (number > 0) {
    vec.push_back(number % 10);
    number /= 10;
  }
  reverse(vec.begin(), vec.end());
  n = (int)vec.size();
  memset(dp, -1, sizeof dp);
  int ret = f(0, 0, 0);
  cout << ret << endl;
  return 0;
}
