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