#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;
const int maxn=1e6+10;
char a[maxn],b[maxn],temp[maxn];
int step;
void copy(int *aa,int *bb){
for(int i=0;i<maxn;i++)aa[i]=bb[i];
}
void add(int *aa,int *bb){
for(int i=0;i<maxn-1;i++){
int x=aa[i]-'0',y=bb[i]-'0';
x+=y;
aa[i]=x+'0';
}
for(int i=0;i<maxn-1;i++){
int x=aa[i+1]-'0',y=aa[i]-'0';
x+=(y/10);
y%=10;
aa[i+1]=x+'0',aa[i]=y+'0';
}
}
bool check(int *aa){
if(aa[0]=='1'){
for(int i=1;i<maxn-1;i++)if(aa[i]!='0')return 0;
return 1;
}return 0;
}
void times(int *aa,int num){
for(int i=maxn-2;i>=0;i--){
int x=aa[i]-'0';
x*=num;
aa[i]=x+'0';
}
for(int i=0;i<maxn-1;i++){
int x=aa[i+1]-'0',y=aa[i]-'0';
x+=(y/10);
y%=10;
aa[i+1]=x+'0',aa[i]=y+'0';
}
}
void div(int *aa,int *bb,int num){
memset(bb,'0',sizeof(bb));
int x=0;
for(int i=maxn-1;i>=0;i--){
x=x*10+(aa[i]-'0');
bb[i]=(x/num)+'0';
x%=num;
}
}
void Pow(int x){
memset(b,'0',sizeof(b));
b[0]='1';
while(x--)times(b,2);
add(a,b);
}
void print(int *aa){
bool flag=0;
for(int i=maxn-1;i>=0;i--){
if(!flag){
if(aa[i]!='0')flag=1;
else continue;
}cout<<aa[i];
}
}
int main(){
cin>>temp;
for(int i=0;i<strlen(temp);i++){
if(temp[i])Pow(i);
}
print(a);
return 0;
}