#include<iostream>
#include<vector>
#include<string>

using namespace std;
#define int long long 

int expr(int& pos);
int term(int& pos);
int factor(int& pos);
int number(int& pos);

string s;
bool ppppp=0;
int expr(int& pos){
    int res = term(pos);
    while(s[pos] == '+' || s[pos] == '-'){
        if(s[pos] == '+'){
            res += term(++pos);
            if(res<0||res>=1024){
                ppppp = 1;
            }
        }else{
            res -= term(++pos);
            if(res<0||res>=1024){
                ppppp = 1;
            }
        }
    }
    if(res<0||res>=1024){
        ppppp = 1;
    }
    return res;
}

int term(int& pos){
    int res = factor(pos);
    while(s[pos] == '*' || s[pos] == '/'){
        if(s[pos] == '*'){
            res *= factor(++pos);
            if(res<0||res>=1024){
                ppppp = 1;
            }
        }else{
            res /= factor(++pos);
        }
    }
    return res;
}

int factor(int& pos){
    if(isdigit(s[pos])) return number(pos);
    pos++;  //'('をとばす
    int res = expr(pos);
    pos++;  //')'をとばす
    return res;
}

int number(int& pos){
    int ans = 0;
    while(isdigit(s[pos])){
        ans *=2;
        ans += (s[pos]-'0');
        pos++;
    }
    if(ans<0||ans>=1024){
        ppppp = 1;
    }
    return ans;
}
char ch[]={'0','1','+','-','*','(',')'};


int ans = -1;

bool check(int a,int b,bool c){
    if(a>b)return 0;
    if(s[a]=='-'||s[a]=='+'||s[a]=='*'||s[b]=='-'||s[b]=='+'||s[b]=='*'){
        return 0;
    }
    if(s[a]=='0'||s[a]=='1'){
        for(int i=a;i<=b;i++){
            if(s[i]!='0'&&s[i]!='1'){
                if(s[i]=='('||s[i]==')'){
                    return 0;
                }else{
                    return check(i+1,b,0);
                }
            }
        }
        if(c==0)return 1;
        return 0;
    }
    int tmp =-1;
    int tmp2 = -1;
    int dep = 0;
    bool flag = 0;
    for(int i=a;i<=b;i++){
        if(s[i]==')'&&tmp==-1){
            flag = 1;
            break;
        }else if(s[i]=='('&&tmp==-1){
            tmp = i;
            dep++;
        }else if(s[i]=='('){
            dep++;
        }else if(s[i]==')'){
            dep--;
            if(dep==0){
                tmp2 = i;
                break;
            }
            
        }
    }
    if(flag||tmp2==-1){
        return 0;
    }
    if(tmp2==b){
        if(c==1)return 0;
        return check(a+1,b-1,1);
    }else{
        if(s[tmp2+1]=='+'||s[tmp2+1]=='-'||s[tmp2+1]=='*'){
            return check(a+1,tmp2-1,1)&check(tmp2+2,b,0);
        }
        return false;
    }
   
}

void dfs(vector<int> &v,int k){
    if(k==v.size()){
        if(!check(0,(int)s.size()-1,0)){
            return;
        }else{
            int pos = 0;
            int xxx = expr(pos);
            
            if(ppppp){
                xxx = -1;
                ppppp = 0;
            }
            ans = max(ans,xxx);
        }
    }else{
        for(int i=0;i<7;i++){
            s[v[k]] = ch[i];
            dfs(v,k+1);
        }
    }
}


signed main(){
    cin >> s;
    vector<int> v;
    for(int i=0;i<s.size();i++){
        if(s[i]=='.')v.push_back(i);
    }
    if(v.size()==0){
        int pos = 0;
        if(check(0,(int)s.size()-1,0)){
            pos = 0;
            int xxx = expr(pos);
            if(ppppp){
                cout << -1<< endl;
            }else{
                cout << xxx << endl;
            }
        }else{
            cout << -1 << endl;
        }
    }else{
        dfs(v,0);
        cout << ans << endl;
    }
    return 0;
}


Measured memory_bytes: 3224