# Original solution
class Node:
    def __init__(self, key, prev, next):
        self.key = key
        self.prev = prev
        self.next = next
    

class MyDLL:
    def __init__(self):
        self.linkedlist = []
        self.length = 0
    
    def insert(self, x):
        # 連結リストの先頭にキー x を持つ要素を継ぎ足す。
        if self.length==0:
            # 連結リストが空の時
            new = Node(x, None, None)            
        else:
            # 連結リストが空ではない時
            old = self.linkedlist[0] # 今まで先頭にいたノード
            new = Node(x, None, old) # 新しく先頭になるノード
            old.prev = new           # 今まで先頭にいたノードの前に新しいノードを登録
        self.linkedlist.insert(0, new)
        self.length += 1 # 連結リストの長さを更新

    def delete(self, x):
        # キー x を持つ最初の要素を連結リストから削除する。そのような要素が存在しない場合は何もしない。
        for node in self.linkedlist:
            if node.key==x:# キー x を持つ最初の要素    
                if node.prev is None:# 先頭だった時
                    node.next.prev = None # 次の要素の前の要素をNoneにする
                elif node.next is None:# 最後尾だった時
                    node.prev.next = None
                else:# 途中だった時
                    prev_node = node.prev
                    next_node = node.next
                    prev_node.next = next_node
                    next_node.prev = prev_node
                self.linkedlist.remove(node)# listから削除 
                self.length -= 1     
                break # キーxを持つ最初だけで良いのでbreak
        
    def deleteFirst(self):
        # リストの先頭の要素を削除する。
        if not self.length==0:
            first = self.linkedlist.pop(0)
            if self.length>1:
                first.next.prev = None
            self.length -= 1 
        else:
            print("List is empty")
        
    def deleteLast(self):
        # リストの末尾の要素を削除する。        
        if not self.length==0:
            last = self.linkedlist.pop()
            if self.length>1:
                last.prev.next = None
            self.length -= 1 
        else:
            print("List is empty")
        
    def print(self):
        if not self.length==0:
            print(' '.join([node.key for node in self.linkedlist]))
        else:
            print('')

def main():
    n = int(input())
    commands = (input() for i in range(n)) # generator式リスト内包表記
    dll = MyDLL()
    for c in commands:
        if 'insert' in c:
            dll.insert(c.split()[1])
        elif 'First' in c:
            dll.deleteFirst()
        elif 'Last' in c:
            dll.deleteLast()
        elif 'delete' in c:
            dll.delete(c.split()[1])
        else:
            print("the command dont't exist")
            print(c)
    dll.print()
main()


# Optimized solution
class Node:
    def __init__(self, key):
        self.key = key
        self.prev = None
        self.next = None
    

class MyDLL:
    def __init__(self):
        # 番兵：仮想的な先頭
        self.sentinel = Node(None)
        self.sentinel.prev = self.sentinel
        self.sentinel.next = self.sentinel
    
    def insert(self, x):
        # 連結リストの先頭にキー x を持つ要素を継ぎ足す。
        new = Node(x)
        new.next = self.sentinel.next # 新しく先頭.next = 番兵.next = 今まで先頭
        self.sentinel.next.prev = new # 番兵.next.prev = 今まで先頭.prev = 新しく先頭
        self.sentinel.next = new      # 番兵.next = 新しく先頭
        new.prev = self.sentinel      # 新しく先頭.prev = 番兵

    def listSearch(self, x):
        cursor = self.sentinel.next # 番兵の次の要素から巡る
        while (cursor != self.sentinel) & (cursor.key != x):
            cursor = cursor.next
        return cursor
    
    def deleteNode(self, node):
        # あるノードを削除するとき
        # 例 A - B - C でBを削除
        if node!=self.sentinel: # Bは番兵ではないことを確認
            node.prev.next = node.next # B.prev.next = A.next = B.next = C
            node.next.prev = node.prev # B.next.prev = C.prev = B.prev = A

    def deleteKey(self, x):
        self.deleteNode(self.listSearch(x))
        
    def deleteFirst(self):
        # リストの先頭の要素を削除する。
        self.deleteNode(self.sentinel.next)
        
    def deleteLast(self):
        # リストの末尾の要素を削除する。        
        self.deleteNode(self.sentinel.prev)
        
    def print(self):
        cursor = self.sentinel.next
        key_list = []
        while cursor != self.sentinel:
            key_list.append(cursor.key)
            cursor = cursor.next   
        print(' '.join(key_list))


def main():
    # input()
    # n = 1786329# int(input())
    n = int(input())
    commands = (input() for i in range(n)) # generator式リスト内包表記
    dll = MyDLL()
    for c in commands:
        if 'insert' in c:
            dll.insert(c.split()[1])
        elif 'First' in c:
            dll.deleteFirst()
        elif 'Last' in c:
            dll.deleteLast()
        elif 'delete' in c:
            dll.deleteKey(c.split()[1])
        else:
            print("the command dont't exist")
            print(c)
    dll.print()
main()