#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#define LL __int64
using namespace std;
const double pi=4*atan(1.0);
const int MAXN=1001;
/*typedef struct TNode
{
int have_value;
int v;
struct TNode *left,*right;
}Node;
Node *root;
Node* newnode()
{
Node *u=(Node *)malloc(sizeof(Node));
if(u!=NULL)
{
u->have_value=0;
u->left=u->right=NULL;
}
return u;
}
int failed=0;
void addnode(int v,char *s)
{
// cout<<"hehe"<<endl;
int n=strlen(s);
Node* u=root;
// cout<<s<<endl;
for(int i=0;i<n;i++)
{
if(s[i]=='L')
{
if(u->left==NULL)
u->left=newnode();
u=u->left;
}
else if(s[i]=='R')
{
if(u->right==NULL)
u->right=newnode();
u=u->right;
}
// cout<<"hehe"<<endl;
}
if(u->have_value) failed=1;
u->v=v;
u->have_value=1;
}
char s[maxn+10];
int read_input()
{
failed=0;
root=newnode();
for(;;)
{
if(scanf("%s",s)!=1) return 0;
if(!strcmp(s,"()")) break;
int v;
sscanf(&s[1],"%d",&v);
addnode(v,strchr(s,',')+1);
}
return 1;
}
int n=0,ans[maxn];
int bfs()
{
int front=0,rear=1;
Node *q[maxn];
q[0]=root;
while(front<rear)
{
Node *u=q[front++];
if(!u->have_value) return 0;
ans[n++]=u->v;
if(u->left!=NULL) q[rear++]=u->left;
if(u->right!=NULL) q[rear++]=u->right;
}
return 1;
}
void remove_tree(Node *u)
{
if(u==NULL) return;
remove_tree(u->left);
remove_tree(u->right);
free(u);
}
int main()
{
while(read_input())
{
// cout<<"hehe"<<endl;
if(failed||!bfs())
{
cout<<-1<<endl;
}
else
{
for(int i=0;i<n;i++)
cout<<ans[i]<<' ';
cout<<endl;
}
remove_tree(root);
}
return 0;
}*/
int have_value[MAXN];
int v[MAXN];
int lleft[MAXN],rright[MAXN];
const int root=1;
int cnt;
int failed;
void newtree()
{
lleft[root]=rright[root]=0;cnt=root;
}
int newnode()
{
int u=++cnt;
lleft[u]=rright[u]=0;
return u;
}
void addnode(int t,char *s)
{
int n=strlen(s);
int u=root;
for(int i=0;i<n;i++)
{
if(s[i]=='L')
{
if(!lleft[u])
{
lleft[u]=newnode();
}
u=lleft[u];
}
if(s[i]=='R')
{
if(!rright[u])
{
rright[u]=newnode();
}
u=rright[u];
}
}
if(have_value[u]) failed=1;
v[u]=t;
have_value[u]=1;
}
char s[MAXN];
int read_input()
{
newtree();
memset(have_value,0,sizeof(have_value));
failed=0;
for(;;)
{
if(scanf("%s",s)!=1) return 0;
if(!strcmp(s,"()")) break;
int v;
sscanf(&s[1],"%d",&v);
addnode(v,strchr(s,',')+1);
}
return 1;
}
int n,ans[MAXN];
int bfs()
{
n=0;
int front=0,rear=1;
int q[MAXN];
q[0]=1;
while(front<rear)
{
int u=q[front++];
// cout<<u<<endl;
if(!have_value[u]) return 0;
ans[n++]=v[u];
if(lleft[u]) q[rear++]=lleft[u];
if(rright[u]) q[rear++]=rright[u];
}
return 1;
}
int main()
{
while(read_input())
{
// for(int i=1;i<=cnt;i++)
// cout<<v[i]<<' ';
if(failed||!bfs())
{
cout<<-1<<endl;
}
else
{
for(int i=0;i<n;i++)
cout<<ans[i]<<' ';
cout<<endl;
}
}
return 0;
}