#include<iostream>
using namespace std;
const int N =100010;
int l[N],r[N],e[N],idx;
void init(){ //0和1相当于是起始和终止符,没有数据
r[0]=1;
l[1]=0;
idx = 2;
}
//都是向右边插入,如何要向左插入,则是在l[k]的右边插入
void add(int k,int x){
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
l[r[k]]= idx;
r[k] = idx;
idx++;
}
void remove(int k){
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main(){
init();
int M;
cin>>M;
string op;
int k,x;
while(M--){
cin>>op;
if(op=="L"){
cin>>x;
add(0,x);
}
else if(op =="R"){
cin>>x;
add(l[1],x);
}
else if(op=="D"){
cin>>k;
remove(k+1);
}
else if(op=="IL"){
cin>>k>>x;
add(l[k+1],x);
}
else {
cin>>k>>x;
add(k+1,x);
}
}
for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<' ';
cout<<endl;
return 0;
}
双链表起始为2,所以操作数的下标为k-1+2=k+1,
0和1只代表边界,不存在真正的数据,因此都是在0的右边和1的左边进行边界操作