#include    <iostream>
#include    <string>
#include    <cstdio>

using namespace std;

template<class T>
class node {
    public:
        enum type {
            DATA = 1,   // データノード
            HEAD = 2,   // 先頭ノード
            TAIL = 3,   // 末尾ノード
            UNKNOWN = 4 // 不明
        };
    private:
        node::type nt;   // ノードの種類
    public:
        T data;       // データ
        node<T>* next;     // 次のノード
        node<T>* prev;     // 前のノード

        // ----- コンストラクタ デストラクタ -----
        node() {
            data = (T)0;
            nt = type::UNKNOWN;
            next = prev = nullptr;
        }
        node(node::type _t, T _d) {
            data = (_t == type::DATA ? _d : (T)0);
            nt = _t;
            next = prev = nullptr;
        }
        node(T _d) {
            data = _d;
            nt = type::DATA;
            next = prev = nullptr;
        }
        node(T _d, node<T>* _p, node<T>* _n) {
            data = _d;
            nt = type::DATA;
            next = _n;
            prev = _p;
        }
        ~node() {
            if(nt == type::DATA) {
                next->prev = prev;
                prev->next = next;
            }
        }

        // ----- メソッド -----
        inline node::type getNodeType() { return nt; }
};

template<class T>
class DLL {
    public:
        node<T>* head;
        node<T>* tail;

        // ----- コンストラクタ デストラクタ -----
        DLL() {
            head = new node<T>(node<T>::type::HEAD);
            tail = new node<T>(node<T>::type::TAIL);
            
            head->next = tail;
            tail->prev = head;
        }
        ~DLL() {
            node<T>* t = head->next;
            while(t != tail) {
                // cout << "rm : " << t->data << endl;
                node<T>* u = t;
                t = t->next;
                delete u;
            }
        }

        // ----- メソッド -----

        // 先頭から要素を追加
        void insert(const T tgt) {
            node<T>* t = new node<T>(tgt, head, head->next);
            head->next->prev = t;
            head->next = t;
        }

        // 指定の要素を削除
        void remove(const T tgt) {
            node<T>* t = head->next;
            while(t != tail) {
                if(t->data == tgt) {
                    delete t;
                    return;
                }
                t = t->next;
            }
        }

        // 先頭の要素を削除
        void removeFirst() {
            node<T>* t = head->next;
            head->next = t->next;
            t->next->prev = head;
            delete t;
        }

        // 末尾の要素を削除
        void removeLast() {
            node<T>* t = tail->prev;
            tail->prev = t->prev;
            t->prev->next = tail;
            delete t;
        }

        // 双方向連結リストの中身を標準出力する
        void print() {
            node<T>* t = head->next;
            bool isFirst = true;
            while(t != tail) {
                if(!isFirst) { cout << ' '; }
                isFirst = false;
                cout << t->data;
                t = t->next;
            }
            cout << endl;
        }
};

int main() {
    DLL<int> dll;
    int n;

    cin >> n;
    for(int i = 0; i < n; i++) {
        char command[20];
        int x;

        scanf("%s", command);
        if(command[0] == 'i') {
            scanf("%d", &x);
            dll.insert(x);
        } else if(command[6] == 'F') {
            dll.removeFirst();
        } else if(command[6] == 'L') {
            dll.removeLast();
        } else {
            scanf("%d", &x);
            dll.remove(x);
        }
    }

    dll.print();

    return 0;
}


Measured memory_bytes: 34388