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

string divide(string s,int k)//字符串除法
{
	int remainder=0;//保留余数
	for(int i=0;i<s.size();i++)
	{
		int current = remainder*10 + s[i]-'0';
		s[i] = current/2 + '0';
		remainder = current%2;
	}
	int p=0;//////////
	while(s[p]=='0')
	{
		p++;
	}
	return s.substr(p);
}

string multiple(string s,int k )//字符串乘法,s代表的数乘k
{
	int carry=0;//保存进位
	for(int i=s.size()-1;i>=0;i--)//从低位到高位////////////////////////别忘了-1!!!!
	{
		int sum = k*(s[i]-'0') + carry;
		s[i] = sum%10+'0';
		carry = sum/10;
	}
	if(carry!=0)
	{
		s = "1"+s;
	}
	return s;
}

string add(string s,int k)//字符串加法,s代表的数加k
{
	int carry = k;//直接把进位赋值为需要加的数
	for(int i=s.size()-1;i>=0;i--)
	{
		int sum = s[i]-'0' + carry;
		s[i] = sum%10 + '0';
		carry = sum/10;
	}
	if(carry!=0)
	{
		s = "1"+s;
	}
	return s;
}


int main()
{
	string s;
	cin>>s;
	vector<int> ch;
	while(s.size()!=0)////////////
	{
       int c = (s[s.size()-1]-'0')%2;
	   ch.push_back(c);
	   s = divide(s,2);
	}

	//现在已将十进制转换为二进制,ch存储的就是逆序二进制形式
	string ans="0";
	for(int i=0;i<ch.size();i++)//从高位到低位
	{
		ans = multiple(ans,2);//初始值为0,乘2(左移一位),加上当前位,
		ans = add(ans,ch[i]);//如101
	}
	cout<<ans<<endl;
	return 0;
}