#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
typedef struct {
    int *data;
    int front;
    int rear;
    int size;
    int 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;
}
bool 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;
}
bool 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->dat[deque->front];
   }
   int getrear(Deque* deque){
       if(isEmpty(deque)) return -1;
       return deque->dat[deque->rear];
   }
    int main(){
        int n;
        scanf("%d",&n);
        Deque*deque=creatDeque(n);
        
        char operation[20];
        while(scanf("5s",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,"deleteLast")==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;
    }