#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)

string s;

string op[2] = {"+-", "*"};

int parse(int& i, int d)
{
	if (d == 2)
	{
		if (s[i] == '(')
		{
			i++;
			int ret = parse(i, 0);
			i++;
			if (ret < 0) return -1;
			if (1024 <= ret) return -1;
			return ret;
		}

		if ('0' <= s[i] && s[i] <= '1')
		{
			int ret = 0;
			while ('0' <= s[i] && s[i] <= '1')
			{
				ret = ret * 2 + s[i] - '0';
				i++;
			}
			if (1024 <= ret) return -1;
			return ret;
		}
	}
	else
	{
		int ret = parse(i, d + 1);
		if (ret < 0) return -1;

		while (op[d].find(s[i]) != string::npos)
		{
			char c = s[i];

			i++;
			int _ret = parse(i, d + 1);
			if (_ret < 0) return -1;

			switch (c)
			{
			case '+': ret += _ret; break;
			case '*': ret *= _ret; break;
			case '-': ret -= _ret; break;
			}

			if (1024 <= ret) return -1;
			if (ret < 0) return -1;
		}

		return ret;
	}
}

bool isvalid()
{
	int cnt = 0;
	int flag[101010];
	flag[0] = 0;
	rep(j, 0, s.length())
	{
		if (s[j] == '(')
		{
			cnt++;
			flag[cnt] = 1;
		}
		else if (s[j] == ')')
		{
			if (cnt == 0) return false;
			if (flag[cnt] == 1) return false;
			cnt--;
		}
		else if (s[j] == '0' || s[j] == '1')
		{

		}
		else
		{
			flag[cnt] = 0;
		}
	}
	if (cnt != 0) return false;

	rep(j, 0, s.length() - 1)
	{
		if (s[j] == '+' && s[j + 1] == '*') return false;
		if (s[j] == '+' && s[j + 1] == '-') return false;
		if (s[j] == '-' && s[j + 1] == '+') return false;
		if (s[j] == '-' && s[j + 1] == '*') return false;
		if (s[j] == '*' && s[j + 1] == '+') return false;
		if (s[j] == '*' && s[j + 1] == '-') return false;
		if (s[j] == '(' && s[j + 1] == '+') return false;
		if (s[j] == '(' && s[j + 1] == '-') return false;
		if (s[j] == '(' && s[j + 1] == '*') return false;

		if (s[j] == '+' && s[j + 1] == '+') return false;
		if (s[j] == '-' && s[j + 1] == '-') return false;
		if (s[j] == '*' && s[j + 1] == '*') return false;

		if (s[j] == '+' && s[j + 1] == ')') return false;
		if (s[j] == '-' && s[j + 1] == ')') return false;
		if (s[j] == '*' && s[j + 1] == ')') return false;

		if (s[j] == ')' && s[j + 1] == '(') return false;

		if (s[j] == '0' && s[j + 1] == '(') return false;
		if (s[j] == '1' && s[j + 1] == '(') return false;

		if (s[j] == ')' && s[j + 1] == '0') return false;
		if (s[j] == ')' && s[j + 1] == '1') return false;
		
	}

	if (s[0] == '+') return false;
	if (s[0] == '-') return false;
	if (s[0] == '*') return false;

	if (s[s.length() - 2] == '+') return false;
	if (s[s.length() - 2] == '-') return false;
	if (s[s.length() - 2] == '*') return false;

	return true;
}

int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);

	/*
	s = "((1+1)+(1+1)+(1+1))=";
	if (isvalid())
		cout << "valid" << endl;
	else
		cout << "invalid" << endl;

	int i = 0;
	cout << parse(i, 0) << endl;

	return 0;
	*/

	cin >> s; s += "=";

	vector<int> dots;
	rep(j, 0, s.length()) if (s[j] == '.') dots.push_back(j);

	int nums[5];
	string opes = "01+-*()";
	int ans = -1;
	rep(j, 0, 100000)
	{
		int jj = j;
		rep(k, 0, 5)
		{
			nums[k] = jj % 10;
			jj /= 10;
		}
		bool ok = false;
		rep(k, 0, dots.size()) if (7 <= nums[k]) ok = true;
		if (ok) continue;

		rep(k, 0, dots.size()) s[dots[k]] = opes[nums[k]];

		if (!isvalid()) continue;

		int i = 0;
		int ret = parse(i, 0);
		if (ans < ret)
		{
			ans = ret;
			//cout << s << ret << endl;
		}
	}
	cout << ans << endl;
}

Measured memory_bytes: 3216