#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
    //初始情况下,并不确定输入的skew数的位数
    //由上可知,在skew数位数不确定的情况下,根据所给公式: x[k] = x[k] * (2 ^ (k + 1) - 1) 可知,即使使用long long(2 ^ 63 - 1)亦无法全部表示skew数对应的十进制形式
    //得出结论:处理超大整数要当作字符串来处理
    string skew;
    //c++中string类型的相关内容及用法和函数
    //用while循环来决定skew数的位数
    while (cin >> skew)
    { // cin >> skew 按空格/换行分割输入 getline(cin, skew) 按换行分割输入
        reverse(skew.begin(), skew.end());//反转字符串,使最低位对应索引 i=0。
        int res = 0;
        for (int i = 0; i < skew.size(); i++)
            res += (skew[i] - '0') * ((2 << i) - 1);//2的次方相当于左移
        cout << res << endl;
    }
    
    //输入多组数据,每组数据包含一个skew数
    //怎么判断输入已经结束
}
// 64 位输出请用 printf("%lld")