#include <bits/stdc++.h>
using namespace std;
struct Node{
int key;
Node * next , * prev;
} ;
Node * nil;
void init( ) {
nil = ( Node * ) malloc ( sizeof ( Node) ) ;
nil - > next = nil;
nil - > prev = nil;
}
void insert( int key) {
Node * x = ( Node * ) malloc ( sizeof ( Node) ) ;
x - > key = key;
x - > next = nil - > next;
nil - > next - > prev = x;
nil - > next = x;
x - > prev = nil;
}
Node* listsearch( int key) {
Node * cur = nil - > next;
while ( cur ! = nil && cur - > key = key) {
cur = cur - > next;
}
return cur;
}
void deleteNode( Node * t) {
if ( t == nil) return ;
t - > prev - > next = t - > next;
t - > next - > prev = t - > prev;
free ( t) ;
}
void deletefirst( ) {
deleteNode( nil - > next) ;
}
void deletelast( ) {
deleteNode( nil - > prev) ;
}
void deletekey( int key) {
deleteNode( listsearch( key) ) ;
}
void printlist( ) {
Node * cur = nil - > next;
int isf = 0 ;
while ( 1 ) {
if ( cur == nil ) break ;
if ( isf++ > 0 ) printf ( " " ) ;
printf ( "%d" , cur- > key) ;
cur = cur - > next;
}
printf ( "\n " ) ;
}
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) ;
if ( com[ 0 ] == 'i' ) { insert( key) ; np++ ; size++ ; }
else if ( com[ 0 ] == 'd' ) {
if ( strlen ( com) > 6 ) {
if ( com[ 6 ] == 'F' ) deletefirst( ) ;
else if ( com[ 6 ] == 'L' ) deetelast( ) ;
} else {
deletekey( key) ; nd++ ;
}
size-- ;
}
}
printlist( ) ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZXsKCWludCBrZXk7CglOb2RlICAqbmV4dCAsICpwcmV2Owp9OwoKTm9kZSAqbmlsOwoKdm9pZCBpbml0KCl7CgluaWwgPSAoTm9kZSAqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwoJbmlsIC0+IG5leHQgPSBuaWw7CgluaWwgLT4gcHJldiA9IG5pbDsKfQoKdm9pZCBpbnNlcnQoaW50IGtleSl7CglOb2RlICp4ID0gKE5vZGUgKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCXggLT4ga2V5ID0ga2V5OwoJeCAtPiBuZXh0ID0gbmlsIC0+IG5leHQ7CgluaWwgLT4gbmV4dCAtPiBwcmV2ID0geDsKCW5pbCAtPiBuZXh0ID0geDsKCXggLT4gcHJldiA9IG5pbDsKfQoKTm9kZSogbGlzdHNlYXJjaChpbnQga2V5KXsKCU5vZGUgKmN1ciA9IG5pbCAtPiBuZXh0OwoJd2hpbGUoY3VyICE9IG5pbCAmJiBjdXIgLT4ga2V5ID0ga2V5KXsKCQljdXIgPSBjdXIgLT4gbmV4dDsKCX0KCXJldHVybiBjdXI7Cn0KCnZvaWQgZGVsZXRlTm9kZShOb2RlICp0KXsKCWlmKHQgPT0gbmlsKSByZXR1cm47Cgl0IC0+IHByZXYgLT4gbmV4dCA9IHQgLT4gbmV4dDsKCXQgLT4gbmV4dCAtPiBwcmV2ID0gdCAtPiBwcmV2OwoJZnJlZSh0KTsKfQoKdm9pZCBkZWxldGVmaXJzdCgpewoJZGVsZXRlTm9kZShuaWwgLT4gbmV4dCk7Cn0KCnZvaWQgZGVsZXRlbGFzdCgpewoJZGVsZXRlTm9kZShuaWwgLT4gcHJldik7Cn0KCnZvaWQgZGVsZXRla2V5KGludCBrZXkpewoJZGVsZXRlTm9kZShsaXN0c2VhcmNoKGtleSkpOwp9Cgp2b2lkIHByaW50bGlzdCgpewoJTm9kZSAqY3VyID0gbmlsIC0+IG5leHQ7CglpbnQgaXNmID0gMDsKCXdoaWxlKDEpewoJCWlmKCBjdXIgPT0gbmlsICkgYnJlYWs7CgkJaWYoIGlzZisrID4gMCApIHByaW50ZigiICIpOwoJCXByaW50ZigiJWQiICwgY3VyLT5rZXkpOwoJCWN1ciA9IGN1ciAtPiBuZXh0OwoJfQoJcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbigpIHsKCWludCBrZXksIG4gLCBpOwoJaW50IHNpemU9MDsKCWNoYXIgY29tWzIwXTsKCWludCBucCA9IDAgLCBuZCA9IDA7CglzY2FuZigiJWQiLCZuKTsKCWluaXQoKTsKCWZvcihpID0gMCA7IGkgPCBuIDsgaSsrKXsKCQlzY2FuZigiJXMlZCIsIGNvbSwgJmtleSk7CgkJaWYoIGNvbVswXSA9PSAnaScgKXsgaW5zZXJ0KGtleSk7IG5wKysgOyBzaXplKys7fQoJCWVsc2UgaWYoIGNvbVswXSA9PSAnZCcgKSB7CgkJCWlmKCBzdHJsZW4oY29tKSA+IDYgKSB7CgkJCQlpZiggY29tWzZdID09ICdGJyApIGRlbGV0ZWZpcnN0KCk7CgkJCQllbHNlIGlmKCBjb21bNl0gPT0gJ0wnKSBkZWV0ZWxhc3QoKTsKCQkJfSBlbHNlIHsKCQkJCWRlbGV0ZWtleShrZXkpOyBuZCsrOwoJCQl9CgkJCXNpemUtLTsKCQl9Cgl9CgkKCXByaW50bGlzdCgpOwoJCglyZXR1cm4gMDsKfQ==