#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
 
 
ll N;
char S[111];
 
#define INF (-(1<<20))
 
ll check(ll x){
  if( 0LL <= x && x < (1LL<<10LL) ) return x;   
  return INF;
}
 
 
ll number(ll l,ll r){
  ll ret = 0;
  for(ll i=l;i<=r;i++){
    ret <<= 1;
    ret |= ( S[i] - '0' );
    ret = check(ret);
    if( ret < 0 ) return INF;
  }
  
  return ret;
}
 
 
 
ll check(ll a,ll b,char op){
  if( 0LL <= a && a < (1LL<<10LL) && 0LL <= b && b < (1LL<<10LL)){ 
    ll x;
    if( op == '+' )
      x = a+b;
    if( op == '-' )
      x = a-b;
    if( op == '*' )
      x = a * b;
    if( 0LL <= x && x < (1LL<<10LL) ) return x;   
  }
  return INF;
}
 
bool check_n(ll l,ll r){
  for(ll i=l;i<=r;i++){
    if( !isdigit(S[i]) ) return false;
  }
  return true;
}
bool check_k2(ll l,ll r){
  ll cnt =0;
  for(ll i=r;i>=l;i--){
    if( S[i] == '(' ) cnt++;
    if( S[i] == ')' ) cnt--;
    if( cnt > 0 ) return false;
  }
  if( cnt == 0 ) return true;
  return false;
}
 
bool check_k3(ll l,ll r){
  int cnt = 0;
  for(ll i=r;i>=l;i--){
    if( S[i] == '(' ) cnt ++ ;
    if( S[i] == ')' ) cnt--;
    if( cnt == 0 &&!( S[i] == '(' || S[i] == ')') ) return true; 
  }
  return false;
}
 
 
bool check_k(ll l,ll r){
  ll cnt =0;
  if( l==r ) return false;
  for(ll i=r;i>l;i--){
    if( S[i] == '(' ) cnt++;
    if( S[i] == ')' ) cnt--;
    if( cnt == 0 ) return false;
  }
  return true;
}
 
bool check_m(ll l,ll r){
  ll cnt =0;
  for(ll i=r;i>l;i--){
    if( S[i] == '(' ) cnt++;
    if( S[i] == ')' ) cnt--;
    if( cnt == 0 && S[i] == '*' ) return true;
  }
  return false;
}
 
bool check_w(ll l,ll r){
  ll cnt =0;
  for(ll i=r;i>l;i--){
    if( S[i] == '(' ) cnt++;
    if( S[i] == ')' ) cnt--;
    if( cnt == 0 && (S[i] == '+'||S[i]=='-') ) return true;
  }
  return false;
}
 
 
void view(ll l,ll r){
  for(ll i=l;i<=r;i++) cout << S[i] ;
  cout << endl;
}
 
bool check_h(ll l,ll r){
  if( S[l] == '+' || S[r] == '+' || S[l] == '-' || S[r] == '-' || S[l] == '*' || S[r] == '*' ||  S[l] == ')' || S[r] == '(' ) return true;
  if( l > r ) return true;
  return false;
}
 
ll exp(ll l,ll r){
  //view(l,r);
  if( check_h(l,r) ) return INF;
  if( !check_k2(l,r) ) return INF;
  if( check_k(l,r) ) {
    if( check_n(l+1,r-1) ) return INF;
    if( !check_k3(l+1,r-1) ) return INF;
    return check(exp(l+1,r-1));
  }
  if( check_w(l,r) ) {
    ll cnt = 0;
    for(ll i=r;i>l;i--){
      if( S[i] == '(' ) cnt++;
      if( S[i] == ')' ) cnt--;
      if( cnt == 0 && S[i] == '+' ) return check(exp(l,i-1), exp(i+1,r),'+');
      if( cnt == 0 && S[i] == '-' ) return check(exp(l,i-1), exp(i+1,r),'-');
    }
  }
  if( check_m(l,r) ) {
    ll cnt = 0;
    for(ll i=r;i>l;i--){
      if( S[i] == '(' ) cnt++;
      if( S[i] == ')' ) cnt--;
      if( cnt == 0 && S[i] == '*' ) return check(exp(l,i-1), exp(i+1,r),'*');
    }
  }
  if( check_n(l,r) )
    return check(number(l,r));
  return INF;
}
 
int main(){
  cin >> S;
  N  = strlen(S);
  ll M = 0;
  for(ll i=0;i<N;i++){
    if ( S[i] == '.' ) M++;
  }
  char buf[111];
  strcpy( buf, S );
  ll res = -1;
  ll K=1;
  for(ll i=0;i<M;i++) K*=7;
  for(ll i=0;i<K;i++){
    ll c = i;
    strcpy( S, buf );
    for(ll j=0;j<N;j++){
      if( S[j] == '.' ){
    if( c%7 == 0 ) S[j] = '0';
    if( c%7 == 1 ) S[j] = '1';
    if( c%7 == 2 ) S[j] = '+';
    if( c%7 == 3 ) S[j] = '-';
    if( c%7 == 4 ) S[j] = '*';
    if( c%7 == 5 ) S[j] = '(';
    if( c%7 == 6 ) S[j] = ')';      
    c/=7;
      }    
    }
    
    res = max( res, exp(0,N-1) );
     
  }
  cout << res << endl;
   
}

Measured memory_bytes: 1156