#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<map>
#include<set>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cstring>
#include<string>
using namespace std;

typedef long long LL;

string dp[60][60],s;

void update(string &o,string p){
	if(p.empty())	return;
	if(o.size()>p.size())	return;
	if(p.size()>o.size()){
		o=p;	return;
		}
	if(o<p)
		o=p;
	}

string dfs(int l,int r){
	if(l>r)	return "";
	if(!dp[l][r].empty())	return dp[l][r];
	string &res=dp[l][r];
	bool flag=false;
	for(int i=l;i<=r;i++){
		flag|=(s[i]=='L'||s[i]=='R'||s[i]==','||s[i]=='('||s[i]==')');
		}
	if(!flag&&(s[l]!='0'||l==r)){
		for(int i=l;i<=r;i++){
			if(s[i]=='?'){
				res+='9';
				}
			else{
				res+=s[i];
				}
			}
		return res;
		}
	if(s[l+1]!='('&&s[l+1]!='?')	return res;
	if(s[r]!=')'&&s[r]!='?')	return res;
	for(int i=l+3;i<r-1;i++){
		if(s[i]=='?'||s[i]==','){
			dfs(l+2,i-1);
			dfs(i+1,r-1);
			if(dp[l+2][i-1].empty()||dp[i+1][r-1].empty())
				continue;
			if(s[l]=='L'||s[l]=='?')
				update(res,dp[l+2][i-1]);
			if(s[l]=='R'||s[l]=='?')
				update(res,dp[i+1][r-1]);
			}
		}
	return res;
	}

int main(){
	cin>>s;
	auto len=s.size();
	dfs(0,(int)len-1);
	if(dp[0][len-1].empty()){
		printf("invalid\n");
		}
	else{
		cout<< dp[0][len-1] <<endl;
		}
	return 0;
	}