#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
typedef struct{
    int *data,front,rear,size,capacity;
}deque;
deque* createdeque(int capacity){
    deque*deque=(deque*)malloc(sizeof(deque));
    deque->data=(int*)malloc(sizeof(int)*capacity);
    deque->front=-1;
    deque->rear=-1;
    deque->size=0;
    deque->capacity=capacity;
    return deque;
}
bool isfull(deque* deque){
    return deque->size==deque->capacity;
}
bool isempty(deque* deque){
    return deque->size==0;
}
bool insertfront(deque* deque,int x){
    if(isfull(deque)) return false;
    if(isempty(deque)){
        deque->front=deque->rear=0;
    }else{
        deque->front=(deque->front-1 + deque->capacity) % deque->capacity;
    }
    deque->data[deque->front]=x;
    deque->size++;
    return true;
}
bool insertlast(deque* deque,int x){
    if(isfull(deque)) return false;
    if(isempty(deque)){
         deque->front=deque->rear=0;
    }else{
        deque->rear=(deque->rear+1) % deque->capacity;
    }
    deque->data[deque->rear]=x;
    deque->size++;
    return true;
    }
int deletefront(deque* deque){
        if(isempty(deque)) return-1;
         int result=deque->data[deque->front];
         if(deque->front==deque->rear){
        deque->front=deque->rear=-1;
    }else{
        deque->front=(deque->front+1) % deque->capacity;
    }
    deque->size--;
    return result;
}
int deletelast(deque* deque){
        if(isempty(deque)) return-1;
         int result=deque->data[deque->rear];
         if(deque->front==deque->rear){
            deque->front=deque->rear=-1;
         }else{
            deque->rear=(deque->rear -1 + deque->capacity) % deque->capacity;
    }
    deque->size--;
    return result;
}
int getfront(deque* deque){
     if(isempty(deque)) return-1;
     return deque->data[deque->front];
}
int getrear(deque* deque){
     if(isempty(deque)) return-1;
     return deque->data[deque->rear];
}
int main(){
    int n;
    scanf("%d",&n);
    deque*deque=createdeque(n);
    char operation[30];
    while(scanf("%s",operation)!=EOF){
        if(strcmp(operation,"insertFront")==0){
            int x;
            scanf("%d",&x);
            if(!insertfront(deque,x)){
                printf("Deque is full\n");
            }
            }else if(strcmp(operation,"insertLast")==0){
                  int x;
                  scanf("%d",&x);
                  if(!insertlast(deque,x)){
                  printf("Deque is full\n");
            }
            }else if(strcmp(operation,"deleteFront")==0){
                  int result=deletefront(deque);
                  if(result==-1){
                       printf("Deque is empty\n");
                  }else{
                      printf("%d\n",result);
                  }
            }else if(strcmp(operation,"deletelastt")==0){
                  int result=deletelast(deque);
                  if(result==-1){
                       printf("Deque is empty\n");
                  }else{
                      printf("%d\n",result);
                  }
    }else if(strcmp(operation,"getfront")==0){
        printf("%d\n",getfront(deque));
    }else if(strcmp(operation,"getrear")==0){
        printf("%d\n",getrear(deque));
    }else if(strcmp(operation,"isempty")==0){
        printf(isempty(deque)?"true\n":"false\n");
    }else if(strcmp(operation,"isfull")==0){
        printf(isfull(deque)?"true\n":"false\n");
    }
}
    free(deque->data);
    free(deque);
    return 0;
}