#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;
}
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 dalateLast(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 opertaion[20];
            while(scanf("%s",operation)!=EOF{
            if(strcmp(operation,"insertFRont")==0){
                int x;
                scanfr("%d", &x);
                if(!insertFRont(deque,x)){
                    printf("Deque is full\n");
                }
            }else if(strcmp(operation,"insertLast")==0){
                int x;
                sacnf("%d",&x);
                if(!insertLast(deque,x)){
                    printf("Deque is full\n");
                }
            }else if(strcmp(operation,"deleteFRont")==0){
                int result=delateFRont(deque);
                if(result==-1){
                    printf("Deque is empty\n");
                }else{
                    printf("%d\n",result);
                }
            }else if(strcmp(operation,"deleteLast")==0){
                int result = dalateLast(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;
}