#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> div(vector<int> &A,int b,int &r){
    vector<int> C;//存商
    r=0;
    for(int i=A.size()-1;i>=0;i--){
        r=r*10+A[i];
        C.push_back(r/b);//...百十个
        r%=b;
    }
    reverse(C.begin(),C.end());//个十百千万...
    //去除前导零
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
vector<int> mul(vector<int> &A,int b){
    int t=0;//进位
    vector<int> C;
    for(int i=0;i<A.size();i++){
        t+=A[i]*b;
        C.push_back(t%10);//个十百千万...
        t/=10;
    }
    while(t){
        C.push_back(t%10);
        t/=10;
    }
    return C;
}
vector<int> add(vector<int> &A,int b){
    int t=b;
    vector<int> C;
    for(int i=0;i<A.size();i++){
        t+=A[i];
        C.push_back(t%10);//个十百千万...
        t/=10;//进位
    }
    while(t){
        C.push_back(t%10);
        t/=10;
    }
    return C;
}
int main() {
    string a;
    cin>>a;
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//个十百千万...
    int r;//余数
    vector<int> Y;//存余数
    if(a.size()==1&&a[0]=='0') Y.push_back(0);
    while(A.size()>1||A.back()){
        A=div(A,2,r);
        Y.push_back(r);
    }
    vector<int> res={0};
    for(int i=0;i<Y.size();i++){
        res=mul(res,2);
        res=add(res,Y[i]);
    }
    // for(int i=Y.size()-1;i>=0;i--) cout<<Y[i];
    // cout<<endl;
    for(int i=res.size()-1;i>=0;i--) cout<<res[i];
    return 0;
}