//题目说的是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;
}