// implment 24min #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; static const double EPS = 1e-9; static const double PI = acos(-1.0); #define REP(i, n) for (int i = 0; i < (int)(n); i++) #define FOR(i, s, n) for (int i = (s); i < (int)(n); i++) #define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++) #define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++) #define MEMSET(v, h) memset((v), h, sizeof(v)) int n; string str; string memo[60][60]; string max(const string &lhs, const string &rhs) { if (lhs.size() < rhs.size()) { return rhs; } if (lhs.size() > rhs.size()) { return lhs; } if (lhs < rhs) { return rhs; } return lhs; } string calc(int l, int r) { string &ret = memo[l][r]; if (ret != "-") { return ret; } ret = ""; if (l == r) { return ret; } if (r - l == 1 && str[l] == '0') { return ret = "0"; } // number if (str[l] != '0') { string temp = ""; FOR(i, l, r) { if (str[i] == '?') { temp += "9"; } else if (isdigit(str[i])) { temp += str[i]; } else { temp = ""; break; } } ret = max(ret, temp); } // L or R if ((str[l] == 'L' || str[l] == 'R' || str[l] == '?') && (str[l + 1] == '(' || str[l + 1] == '?') && (str[r - 1] == ')' || str[r - 1] == '?') && r - l > 3) { FOR(m, l + 2, r) { string left = calc(l + 2, m); string right = calc(m + 1, r - 1); if (str[m] != ',' && str[m] != '?') { continue; } if (left == "" || right == "") { continue; } if (str[l] == 'L' || str[l] == '?') { ret = max(ret, left); } if (str[l] == 'R' || str[l] == '?') { ret = max(ret, right); } } } return ret; } int main() { while (cin >> str) { n = str.size(); REP(i, 60) REP(j, 60) { memo[i][j] = "-"; } string ans = calc(0, n); if (ans == "") { cout << "invalid" << endl; } else { cout << ans << endl; } } }