#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std;
const int maxn = 256 + 10;
char s[maxn];
struct node {
int d;
bool has_v;
node *left, *right;
node() : d(0), left(NULL), right(NULL), has_v(false) {}
};
node *root;
vector<int> ans;
bool bfs() {
queue<node*> Q;
Q.push(root);
while (!Q.empty()) {
node* tn = Q.front(); Q.pop();
if (!tn->has_v) return false; //发现树上有断点
ans.push_back(tn->d);
if (tn->left != NULL) Q.push(tn->left);
if (tn->right != NULL) Q.push(tn->right);
}
return true;
}
bool addnode(int v, char *s) {
node *u = root;
while (*s != ')') {
if (*s == 'L') {
if (u->left == NULL) u->left = new node();
u = u->left;
}
else if (*s == 'R') {
if (u->right == NULL) u->right = new node();
u = u->right;
}
s++;
}
if (u->has_v) return false;
u->has_v = true;
u->d = v;
return true;
}
void Del_tree(node *root) {
if (root == NULL) return;
Del_tree(root->left);
Del_tree(root->right);
delete root;
}
int main()
{
int v;
bool flag = true;
root = new node();
ans.clear();
while (~scanf("%s", s)) {
if (strcmp(s, "()")) {
sscanf(&s[1], "%d", &v); //解析输入数字到v
if (flag) //如果上次addnode有问题那么以后就没必要做了
flag = addnode(v, strchr(s, ',') + 1);
}
else {
if (!flag || !bfs()) {
printf("not complete\n");
}
else { //此时flag == true && bfs() == true
int cnt = 0;
for (vector<int>::iterator i = ans.begin(); i != ans.end(); i++) {
if (!cnt)
printf("%d", *i);
else
printf(" %d", *i);
cnt++;
}
puts("");
}
Del_tree(root); //将树删除
//为下次的新树初始化
flag = true;
ans.clear();
root = new node();
}
}
delete root;
return 0;
}