#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> l_l;
typedef pair<int, int> i_i;
typedef string::iterator state;

#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))
//const ll mod = 1000000007;
string _S, S;
int ans = -1;
string moji = "01+-*()";
bool ok = true;
bool valid(string S) {
    for(int i = 0; i < S.size(); i++) {
        if(S[i] != '(') continue;
        bool nowok = false;
        int nownum = 0;
        for(int j = i + 1; j < S.size(); j++) {
            if(S[j] == '(') {
                nownum++;
                continue;
            }
            if(S[j] == ')') {
                nownum--;
                if(nownum < 0) break;
                continue;
            }
            if(S[j] != '0' && S[j] != '1' && nownum == 0) nowok = true;
        }
        if(!nowok) return false;
    }
    return true;
}
int expression(state &itr);
int factor(state &itr);
int number(state &itr);

int expression (state &itr) {
    //cerr << "e: " << *itr << endl;
    if(!ok) return -1;
    int now = factor(itr);
    if(now < 0 || now >= (1<<10)) ok = false;
    while(ok) {
    //cerr << "E: " << *itr << endl;
        if(now < 0 || now >= (1<<10)) ok = false;
        if(*itr == ')' || *itr == '=') return now;
        if(*itr == '+') {
            itr++;
            now += factor(itr);
            continue;
        }
        if(*itr == '-') {
            itr++;
            now -= factor(itr);
            continue;
        }
        ok = false;
    }
}

int factor (state &itr) {
    if(!ok) return -1;
    int now = number(itr);
    if(now < 0 || now >= (1<<10)) ok = false;
    while(ok) {
        if(now < 0 || now >= (1<<10)) ok = false;
        if(*itr == ')') return now;
        if(*itr == '=') return now;
        if(*itr == '+' || *itr == '-') {
            return now;
        }
        if(*itr == '*') {
            itr++;
            now *= number(itr);
            continue;
        }
        ok = false;
    }
}

int number(state &itr) {
    if(!ok) return -1;
    if(*itr == '+' || *itr == '-' || *itr == '*' || *itr == '=' || *itr == ')') {
        ok = false;
        return -1;
    }
    int now;
    if(*itr == '(') {
        itr++;
        now = expression(itr);
        if(*itr != ')') {
            ok = false;
            return -1;
        }
        itr++;
        if(now < 0 || now >= (1<<10)) ok = false;
        return now;
    }
    now = 0;
    while(*itr == '0' || *itr == '1') {
        now *= 2;
        now += *itr - '0';
        itr++;
    }
    if(now < 0 || now >= (1<<10)) ok = false;
    return now;
}

void g() {
    ok = true;
    state itr = S.begin(); 
    //cerr << S << endl;
    if(!valid(S)) return;
    int val = expression(itr);
    //if(ok) cerr << "result: " << val << endl;
    if(*itr != '=') return;
    if(ok) ans = max(ans, val);
}

void f(int index) {
    if(index == S.size()) {
        g();
        return;
    }
    if(_S[index] != '.') {
        f(index + 1);
        return;
    }
    for(int i = 0; i < moji.size(); i++) {
        S[index] = moji[i];
        f(index + 1);
    }
    return;
}



int main() {
    //cout.precision(10);
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin >> _S;
    _S += "=";
    S = _S;
    f(0);
    cout << ans << endl;
    return 0;
}

