#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int>bin; //保存逆序二进制数
string s;//输入
string reverse;//输出结果
void getdiv(string &s,int x){//字符串除法
int k=0;
for(int i=0;i<s.size();i++){
int cur=s[i]-'0'+k*10;//被除数
s[i]=cur/x+'0';//商
k=cur%x;//余数
}
int pos=0;
while(s[pos]=='0')pos++;//删掉前面多余0
s=s.substr(pos);
}
void getmul(string &s,int x){//字符串乘法
int cur=0;
for(int i=s.size()-1;i>=0;i--){
cur=cur+x*(s[i]-'0');//乘积
s[i]=cur%10+'0';//乘积最低位
cur=cur/10;//进位
}
while(cur!=0){//乘法计算完仍有进位
char c=cur%10+'0';
s.insert(0,1,c); //按位依次插入到最前面
cur=cur/10;
}
}
void getadd(string &s,int x){//字符串加法
int cur=x;
for(int i=s.size()-1;i>=0;i--){
cur=cur+s[i]-'0';//和
s[i]=cur%10+'0';//和的最低位
cur=cur/10;//进位
}
while(cur!=0){//加法计算完仍有进位
char c=cur%10+'0';
s.insert(0,1,c);
cur=cur/10;
}
}
int main(){
int t;
reverse="0";
while(cin>>s){
while(s.size()!=0){//十进制转逆序二进制
int m=(s[s.size()-1]-'0')%2;
bin.push_back(m);
getdiv(s,2);
}
for(int i=0;i<bin.size();i++){//二进制转十进制
getmul(reverse,2);
getadd(reverse,bin[i]);
}
cout<<reverse<<endl;
}
return 0;
}