#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct node{
	unsigned int key;	//キーの値
	struct node *next;	//前のキーのポインタ
	struct node *prev;	//後ろのキーのポインタ
};

typedef struct node * NodePointer;

NodePointer nil;

NodePointer listSearch(int key){
	NodePointer t;
	//リストの先頭から走査
	for(t = nil->next;t != nil;t = t->next){
		//目的のキーが見つかれば返す
		if(t->key == key){
			return t;
		}
	}
	return nil;
}

//最初の要素の領域を確保
void init(){
	nil = malloc(sizeof(struct node));
	nil->next = nil;	//リストの先頭
	nil->prev = nil;	//リストの末尾
}

//出力
void printList(){
	NodePointer cur = nil->next;
	int isf = 1;
	while(1){
		if ( cur == nil ) break;
		//最初の要素以外は前に空白を付ける
		if ( isf == 0)  printf(" ");
		printf("%d", cur->key);
		cur = cur->next;
		isf = 0;
	}
  printf("\n");
}

//指定された要素を削除
void deleteNode(NodePointer t){
	/*
	削除する要素の前と後ろの要素を
	変数に入れる
	*/
	NodePointer a_del = t->next,b_del = t->prev;
	
	if(a_del == nil){
		nil->prev = b_del;
		b_del->next = nil;
	}
	else if(b_del == nil){
		nil->next = a_del;
		a_del->prev = nil;
	}
	else{
		a_del->prev = b_del;
		b_del->next = a_del;
	}
	/*
	削除された要素の
	メモリ領域を解放
	*/
	free(t);
}

//先頭の要素を削除
void deleteFirst(){
	NodePointer t = nil->next;
	if ( t == nil ) return;
	deleteNode(t);
}

//末尾の要素を削除
void deleteLast(){
	NodePointer t = nil->prev;
	if ( t == nil ) return;
	deleteNode(t);
}

//指定されたキーを持つ要素を削除
void delete(int key){
	NodePointer t = listSearch(key);
	if(t == nil)return;
	deleteNode(t);
}

//先頭への継ぎ足し
void insert(int key){
	NodePointer x;
	x = malloc(sizeof(struct node));
	x->key = key;
	
	//リストの末尾がNULLのとき
	if(nil->prev == NULL){
		//リストの暫定末尾に
		nil->prev = x;
	}
	//リストの先頭がNULLのとき
	if(nil->next == NULL){
		nil->next = x;
		x->prev = nil;
		x->next = nil;
	}
	//２回目以降の挿入
	else{
		nil->next->prev = x;
		x->next = nil->next;
		x->prev = nil;
		nil->next = x;
	}
}

int main(){
	int key, n, i;
	int size = 0;	//要素数
	char com[20];	//命令用文字列
	int np = 0, nd = 0;	//挿入と削除の回数
	
	scanf("%d", &n);
	
	init();
	
	for ( i = 0; i < n; i++ ){
		//入力
		scanf("%s%d",com,&key);
		//insertのとき
		if ( com[0] == 'i' ) {
			insert(key);
			np++;
			size++;
		}
		//それ以外(delete)
		else if ( com[0] == 'd' ) {
			if (strlen(com) > 6){
				if ( com[6] == 'F' ){
					deleteFirst();
				}
				else if ( com[6] == 'L' ){
					deleteLast();
				}
			}
			else{
				delete(key);
				nd++; 
			}
			size--;
		}
	}
	
	printList();
	return 0;
}

