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 conversion(string p) {
  int o;
  o = atoi(p.c_str());
  return o;
}
string toString(long long h) {
  stringstream ss;
  ss << h;
  return ss.str();
}
long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a % b)); }
long long lcm(long long a, long long b) { return (a * (b / gcd(a, b))); }
long long toi(string p) {
  long long x;
  istringstream in(p);
  in >> x;
  return x;
}
int main() {
  long long a, ans = 1;
  cin >> a;
  if (a <= 9) {
    cout << 1 << endl;
    return 0;
  }
  map<string, int> M;
  queue<string> Q;
  Q.push("1");
  while (!Q.empty()) {
    string x = Q.front();
    Q.pop();
    if (M[x + "0"] == 0 && toi(x + "0") <= a) {
      ans += 1LL;
      M[x + "0"] = 1;
      Q.push(x + "0");
    }
    if (M[x + "1"] == 0 && toi(x + "1") <= a) {
      ans += 1LL;
      M[x + "1"] = 1;
      Q.push(x + "1");
    }
  }
  cout << ans << endl;
}
