#include <iostream>
using namespace std;
struct Cell {
long val;
struct Cell *prev;
struct Cell *next;
};
class DoubleLinkedList {
public:
DoubleLinkedList() {
first = NULL;
last = NULL;
}
void ins(long x) {
struct Cell *c = new Cell;
c->val = x;
c->prev = NULL;
c->next = first;
if (first != NULL) { first->prev = c; }
first = c;
if (last == NULL) {
last = c;
}
}
void del(long x) {
struct Cell *p = first;
struct Cell *pPrev;
struct Cell *pNext;
while(p->val != x) {
p = p->next;
if (!p) { return; }
}
pPrev = p->prev;
pNext = p->next;
if (pNext) { pNext->prev = pPrev; }
if (pPrev) { pPrev->next = pNext; }
if (p == first) {
first = pNext;
}
if (p == last) {
last = pPrev;
}
delete p;
}
void delFirst() {
struct Cell *p = first->next;
if (p) { p->prev=NULL; }
if (first == last) {
last = NULL;
}
delete first;
first = p;
}
void delLast() {
struct Cell *p = last->prev;
if (p) { p->next = NULL; }
if (last == first) {
first = NULL;
}
delete last;
last = p;
}
void printValues() {
struct Cell *p = first;
if (p) {
cout << p->val;
p = p->next;
}
while (p) {
cout << " ";
cout << p->val;
p = p->next;
}
cout << endl;
}
private:
struct Cell *first;
struct Cell *last;
};
int main()
{
long n, value;
string cmd;
DoubleLinkedList dll;
cin >> n;
for (long i=0; i<n; i++) {
cin>> cmd;
if (cmd == "insert") {
cin >> value;
dll.ins(value);
continue;
}
else if (cmd == "delete") {
cin >> value;
dll.del(value);
continue;
}
else if (cmd == "deleteFirst") { dll.delFirst(); continue; }
else if (cmd == "deleteLast") { dll.delLast(); }
}
// outpur values in ddl
dll.printValues();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IENlbGwgewoJbG9uZyB2YWw7CglzdHJ1Y3QgQ2VsbCAqcHJldjsKCXN0cnVjdCBDZWxsICpuZXh0Owp9OwoKY2xhc3MgRG91YmxlTGlua2VkTGlzdCB7CnB1YmxpYzoKCURvdWJsZUxpbmtlZExpc3QoKSB7CgkJZmlyc3QgPSBOVUxMOwoJCWxhc3QgPSBOVUxMOwoJfQoJdm9pZCBpbnMobG9uZyB4KSB7CgkJc3RydWN0IENlbGwgKmMgPSBuZXcgQ2VsbDsKCQljLT52YWwgPSB4OwoJCWMtPnByZXYgPSBOVUxMOwoJCWMtPm5leHQgPSBmaXJzdDsKICAgICAgICBpZiAoZmlyc3QgIT0gTlVMTCkgeyBmaXJzdC0+cHJldiA9IGM7IH0KCQlmaXJzdCA9IGM7CiAgICAgICAgaWYgKGxhc3QgPT0gTlVMTCkgewogICAgICAgICAgICBsYXN0ID0gYzsKICAgICAgICB9Cgl9Cgl2b2lkIGRlbChsb25nIHgpIHsKCQlzdHJ1Y3QgQ2VsbCAqcCA9IGZpcnN0OwoJCXN0cnVjdCBDZWxsICpwUHJldjsKCQlzdHJ1Y3QgQ2VsbCAqcE5leHQ7CgkJd2hpbGUocC0+dmFsICE9IHgpIHsKCQkJcCA9IHAtPm5leHQ7CiAgICAgICAgICAgIGlmICghcCkgeyByZXR1cm47IH0KCQl9CiAgICAgICAgCgkJcFByZXYgPSBwLT5wcmV2OwoJCXBOZXh0ID0gcC0+bmV4dDsKICAgICAgICBpZiAocE5leHQpIHsgcE5leHQtPnByZXYgPSBwUHJldjsgfQoJCWlmIChwUHJldikgeyBwUHJldi0+bmV4dCA9IHBOZXh0OyB9CgkJaWYgKHAgPT0gZmlyc3QpIHsKCQkJZmlyc3QgPSBwTmV4dDsKCQl9CgkJaWYgKHAgPT0gbGFzdCkgewoJCQlsYXN0ID0gcFByZXY7CgkJfQoJCWRlbGV0ZSBwOwoJfQoJdm9pZCBkZWxGaXJzdCgpIHsKCQlzdHJ1Y3QgQ2VsbCAqcCA9IGZpcnN0LT5uZXh0OwogICAgICAgIGlmIChwKSB7IHAtPnByZXY9TlVMTDsgfQogICAgICAgIGlmIChmaXJzdCA9PSBsYXN0KSB7CiAgICAgICAgICAgIGxhc3QgPSBOVUxMOwogICAgICAgIH0KCQlkZWxldGUgZmlyc3Q7CgkJZmlyc3QgPSBwOwoJfQoJdm9pZCBkZWxMYXN0KCkgewoJCXN0cnVjdCBDZWxsICpwID0gbGFzdC0+cHJldjsKCQlpZiAocCkgeyBwLT5uZXh0ID0gTlVMTDsgfQogICAgICAgIGlmIChsYXN0ID09IGZpcnN0KSB7CiAgICAgICAgICAgIGZpcnN0ID0gTlVMTDsKICAgICAgICB9CgkJZGVsZXRlIGxhc3Q7CgkJbGFzdCA9IHA7Cgl9Cgl2b2lkIHByaW50VmFsdWVzKCkgewoJCXN0cnVjdCBDZWxsICpwID0gZmlyc3Q7CiAgICAgICAgCiAgICAgICAgaWYgKHApIHsKICAgICAgICAgICAgY291dCA8PCBwLT52YWw7CiAgICAgICAgICAgIHAgPSBwLT5uZXh0OwogICAgICAgIH0KCQl3aGlsZSAocCkgewoJCQljb3V0IDw8ICIgIjsKICAgICAgICAgICAgY291dCA8PCBwLT52YWw7CiAgICAgICAgICAgIHAgPSBwLT5uZXh0OwoJCX0KICAgICAgICBjb3V0IDw8IGVuZGw7Cgl9CnByaXZhdGU6CglzdHJ1Y3QgQ2VsbCAqZmlyc3Q7CglzdHJ1Y3QgQ2VsbCAqbGFzdDsKfTsKCmludCBtYWluKCkKewoJbG9uZyBuLCB2YWx1ZTsKCXN0cmluZyBjbWQ7CglEb3VibGVMaW5rZWRMaXN0IGRsbDsKICAgIAoJY2luID4+IG47Cglmb3IgKGxvbmcgaT0wOyBpPG47IGkrKykgewoJCWNpbj4+IGNtZDsKCQlpZiAoY21kID09ICJpbnNlcnQiKSB7CiAgICAgICAgICAgIGNpbiA+PiB2YWx1ZTsKICAgICAgICAgICAgZGxsLmlucyh2YWx1ZSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCQllbHNlIGlmIChjbWQgPT0gImRlbGV0ZSIpIHsKICAgICAgICAgICAgY2luID4+IHZhbHVlOwogICAgICAgICAgICBkbGwuZGVsKHZhbHVlKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoJCWVsc2UgaWYgKGNtZCA9PSAiZGVsZXRlRmlyc3QiKSB7IGRsbC5kZWxGaXJzdCgpOyBjb250aW51ZTsgfQoJCWVsc2UgaWYgKGNtZCA9PSAiZGVsZXRlTGFzdCIpIHsgZGxsLmRlbExhc3QoKTsgfQoJfQogICAgCgkvLyBvdXRwdXIgdmFsdWVzIGluIGRkbAogICAgZGxsLnByaW50VmFsdWVzKCk7CiAgICAKCXJldHVybiAwOwp9