//题目说的是1000位的数 不是1000以内的数 只能用字符串的形式计算而不能用int long等整型;
#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
using namespace std;
string str;
vector<int>v;
void divide(){//字符串除法;
int remain=0;
for(int i=0;i<str.size();++i){
int temp=remain*10+str[i]-'0';
remain=temp%2;
str[i]=temp/2+'0';
}
while(str[0]=='0')
str.erase(0,1);
}
string multiple(string answer,int x){//字符串answer乘以x
int CF=0;
for(int i=answer.size()-1;i>=0;i--){
char temp=answer[i];
answer[i]=((answer[i]-'0')*x+CF)%10+'0';
CF=((temp-'0')*x+CF)/10;
}
if(CF!=0)//检查最高位是否有进位
answer.insert(0,"1");
return answer;
}
string add(string answer,int x){//字符串加法
int CF=x;
for(int i=answer.size()-1;i>=0;i--){
int temp=answer[i]-'0'+CF;
answer[i]=temp%10+'0';
CF=temp/10;
}
if(CF!=0)//检查最高位是否有进位
answer.insert(0,"1");
return answer;
}
int main(){
cin>>str;
while(!str.empty()){//十进制化为2进制装入容器v中
v.push_back((str.back()-'0')%2);
divide();
}
while(v[0]==0)//得到逆序的2进制 去掉最前面的0
v.erase(v.begin(),v.begin()+1);
string answer="0";
for(int i=0;i<v.size();++i){//二进制化为10进制
answer=multiple(answer,2);
answer=add(answer,v[i]);
}
cout<<answer<<endl;
return 0;
}