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

string add(string A, string B) { //A, B为逆序
    string C;
    int t = 0;
    for(int i = 0; i < A.size() || i < B.size(); i++) {
        if(i < A.size()) t += A[i] - '0';
        if(i < B.size()) t += B[i] - '0';
        C += t % 10 + '0';
        t /= 10;
    }
    if(t) C += t + '0';
    return C;
}

string mul2(string A) { //输入输出均为逆序
    string C;
    int t = 0;
    for(int i = 0; i < A.size(); i++) {
        t += (A[i] - '0') * 2;
        C += t % 10 + '0';
        t /= 10;
    }
    while(t) {
        C += t % 10 + '0';
        t /= 10;
    }
    while(C.size() > 1 && C.back() == '0') C.pop_back();
    return C;
}

string div2(string A, int& r) {
    string C;
    r = 0;
    for (int i = 0; i < A.size(); i++) {
        r = r * 10 + A[i] - '0';
        C += r / 2 + '0';
        r %= 2;
    }
    while (C.size() > 1 && C[0] == '0') C.erase(0, 1);
    return C;
}

int main() {
    string A, bin;  //bin为逆序
    cin >> A;
    while (A != "0") {
        int r = 0;
        A = div2(A, r);
        bin += r + '0';
    }
    // for (int i = bin.size() - 1; i >= 0; i--) cout << bin[i];
    string base = "1", res = "0";
    for(int i = bin.size() - 1; i >= 0; i--) {  //将bin逆序排列进行转换
        if(bin[i] == '1') res = add(res, base);
        base = mul2(base);
    }
    for(int i = res.size() - 1; i >= 0; i--) cout << res[i];

    return 0;
}