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

#define MAX_LIST_NUM 2000001

typedef struct ST_LinkedList LinkedList_t;

struct ST_LinkedList{
    int           key_value;     /* Key Value */
    LinkedList_t  *before;       /* Before Point */
    LinkedList_t  *next;         /* Next Point */
}LINKED_LIST;

LinkedList_t tLinkedListBuffer[MAX_LIST_NUM];

int main(void)
{
    int  cn;					/* Command Num */
	char command[12];			/* Command Name */
	int  kv;					/* Key Value */
	int  ln = 0;				/* List Num */
	int  loop = 0;
	
    LinkedList_t *ptLinkedListFirst;     /* List First Pointer */
    LinkedList_t *ptLinkedListLast;      /* List Last  Pointer */
    LinkedList_t *ptLinkedListNow;       /* List Now   Pointer */
    LinkedList_t *ptLinkedListSwap;      /* List Swap  Pointer */
	
	ptLinkedListFirst = NULL;
	ptLinkedListLast  = NULL;
    
	/* initilize data */
	tLinkedListBuffer->next   = NULL;
	tLinkedListBuffer->before = NULL;
	
	/* get "Command Num" */
    scanf("%d", &cn);
    
	if(cn < MAX_LIST_NUM)
	{
        /* get Name & time */
        while((scanf("%s %d", &(command[0]), &kv) != EOF) && loop < cn)
        {
        	if( strcmp(command, "insert") == 0 )
        	{
        		tLinkedListBuffer[ln].key_value = kv; /* Insert at the beginning of the list */
        		tLinkedListBuffer[ln].before = ptLinkedListFirst;
        		tLinkedListBuffer[ln].next = NULL;
        		
        		if(ptLinkedListFirst != NULL)
        		{
	        		ptLinkedListFirst->next = &(tLinkedListBuffer[ln]);
        		}
        		else
        		{
        			ptLinkedListLast = &(tLinkedListBuffer[ln]);
        		}
	        	ptLinkedListFirst = &(tLinkedListBuffer[ln]);
	        	ln++;
            }
        	else if( strcmp(command, "delete") == 0 )
        	{
        		if(ptLinkedListFirst->key_value == kv)
        		{
        			ptLinkedListFirst = ptLinkedListFirst->before;
        		}
        		else
        		{
	        		ptLinkedListNow = ptLinkedListFirst->before;
	        		while(ptLinkedListNow != ptLinkedListLast)
	        		{
	        			if(ptLinkedListNow->key_value == kv)
	        			{
	        				/* change next pointer */
	        				ptLinkedListSwap = ptLinkedListNow->before;
	        				ptLinkedListSwap->next = ptLinkedListNow->next;
	        				/* change before pointer */
	        				ptLinkedListSwap = ptLinkedListNow->next;
	        				ptLinkedListSwap->before = ptLinkedListNow->before;
	        				break;
	        			}
	        			ptLinkedListNow = ptLinkedListNow->before;
	        		}
	        		if(ptLinkedListNow == ptLinkedListLast && ptLinkedListLast->key_value == kv)
	        		{
	        			ptLinkedListLast = ptLinkedListLast->next;
	        			ptLinkedListLast->before = NULL;
	        		}
        		}
        		
            }
        	else if( strcmp(command, "deleteFirst") == 0 )
        	{
        		if(ptLinkedListLast->next != NULL)
        		{
	        		ptLinkedListFirst = ptLinkedListFirst->before;
	        		ptLinkedListFirst->next = NULL;
        		}
        		else
        		{
        			ptLinkedListFirst = NULL;
        			ptLinkedListLast = NULL;
        		}
            }
        	else if( strcmp(command, "deleteLast") == 0 )
        	{
        		if(ptLinkedListLast->next != NULL)
        		{
	        		ptLinkedListLast = ptLinkedListLast->next;
	        		ptLinkedListLast->before = NULL;
        		}
        		else
        		{
        			ptLinkedListFirst = NULL;
        			ptLinkedListLast = NULL;
        		}
            }
        	else
        	{
        		/* error command */
        	}
        	loop++;
        }
		
		ptLinkedListNow = ptLinkedListFirst;
		/* print result */
		while(ptLinkedListNow != ptLinkedListLast)
		{
			printf("%d ", ptLinkedListNow->key_value);
			ptLinkedListNow = ptLinkedListNow->before;
		}
		printf("%d\n", ptLinkedListNow->key_value);
	}
    else
    {
        /* error input */
    }
     
    return 0;
}



Measured memory_bytes: 27480