#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;
}