#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<bitset>
#include<stack>
#include<unordered_map>
#include<utility>
#include<cassert>
#include<complex>
using namespace std;

//#define int long long
typedef long long ll;

typedef unsigned long long ul;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = mod * mod;
typedef pair<int, int>P;
typedef pair<int, bool> sP;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef pair<ll, ll> LP;
typedef vector<ll> vec;
typedef long double ld;
typedef pair<ld, ld> LDP;
const ld eps = 1e-5;
const ld pi = acos(-1.0);
typedef vector<vector<ll>> mat;
typedef vector<ll> vec;

string s;
string u = "01+-*()";
bool isnum(char t) {
	return '0' <= t && t <= '9';
}

vector<int> v;


ll ans = -INF;

stack<int> st; int tmp;
ll expr(string &s, int &i);
ll term(string &s, int &i);
ll factor(string &s, int &i);
ll number(string &s, int &i);

bool  valid = true;
ll expr(string &s, int &i) {
	ll x = term(s, i);
	while (i < s.size()&&(s[i]=='+'||s[i]=='-')) {
		tmp++;
		char ope = s[i];
		i++;
		ll x2 = term(s, i);
		if (ope == '-')x -= x2;
		else x += x2;
		if (x < 0 || x >= 1024)valid = false;
	}
	return x;
}
ll term(string &s, int &i) {
	ll x = factor(s, i);
	while (i < s.size() && s[i] == '*') {
		tmp++;
		i++;
		ll x2 = factor(s, i);
		x *= x2;
		if (x < 0 || x >= 1024)valid = false;
	}
	return x;
}
ll factor(string &s, int &i) {
	if (i == s.size()) {
		valid = false; return 0;
	}
	if (isnum(s[i])) {
		return number(s, i);
	}
	else if (s[i] == '(') {
		st.push(tmp); tmp = 0;
		i++;
		ll x = expr(s, i);
		if (i == s.size() || s[i] != ')') {
			valid = false; return 0;
		}
		i++;
		if (tmp == 0) {
			valid = false; return 0;
		}
		tmp = st.top(); st.pop();
		return x;
	}
	else {
		valid = false; return 0;
	}
}
ll number(string &s, int &i) {
	int res = s[i] - '0';
	i++;
	while (i < s.size() && isnum(s[i])) {
		res = 2 * res + (s[i] - '0'); i++;
		if (res < 0 || res >= 1024)valid = false;
	}
	return res;
}
void calc() {
	int i = 0; valid = true;
	ll num = expr(s, i);
	if (i != s.size())valid = false;
	if (num < 0 || num >= 1024)valid = false;
	if (valid) {
		ans = max(ans, num);
	}
}
void dfs(int id) {
	if (id == v.size()) {
		calc(); return;
	}
	rep(j, 7) {
		s[v[id]] = u[j];
		dfs(id + 1);
	}
}

void solve() {
	cin >> s;
	rep(i, s.size()) {
		if (s[i] == '.')v.push_back(i);
	}
	dfs(0);
	if (ans == -INF)ans = -1;
	cout << ans << endl;
}


signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	//init();
	solve();
	//stop
	return 0;
}


