#include <cstdio>
#include <stack>
using namespace std;
#define MAX 40
struct node{
int data;
int lchild;
int rchild;
}tree[MAX];
struct aa{
int ac;
int da;
}act[2*MAX];
int n;
int index=0;
int cnt=0;
void post(int x){
if(x==-1){
return;
}
post(tree[x].lchild);
post(tree[x].rchild);
cnt++;
if(cnt==n){
printf("%d\n",tree[x].data);
}else{
printf("%d ",tree[x].data);
}
}
int newNode(){
tree[index].lchild=-1;
tree[index].rchild=-1;
return index++;
}
int main(){
freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=0;i<2*n;i++){
char c[5];
int x;
scanf("%s %d",c,&x);
if(c[1]=='o'){
act[i].ac=0;
act[i].da=-1;
}else{
act[i].ac=1;
act[i].da=x;
}
}
stack <int> s;
int root=newNode();
tree[root].data=act[0].da;
s.push(root);
int cur=root;
for(int i=0;i<2*n-1;i++){
int p=act[i].ac;
int q=act[i+1].ac;
if(p==0 && q==0 || p==1 && q==0){
cur=s.top();
s.pop();
}else if(p==0 && q==1){
int ne=newNode();
tree[ne].data=act[i+1].da;
tree[cur].rchild=ne;
s.push(ne);
cur=s.top();
}else if(p==1 && q==1){
int ne=newNode();
tree[ne].data=act[i+1].da;
tree[cur].lchild=ne;
s.push(ne);
cur=s.top();
}
}
post(root);
return 0;
}