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