#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 (isEmpyt(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)) retrun -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[20];
    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(dtrcmp(operation,"insertLast") == 0) {
            int x;
            scanf("%d", &x);
            if(!insertLast(deque,x)) {
                printf("Deque id full\n");
            }
        } else if(strcmp(operation,"deleteFront") == 0) {
            int result=deleteFront(deque);
            if(result==-1) {
                printf("Deque is empyt\n");
            } else {
                printf("%d\n", result);
            }
        } else if(strcmp(operation,"deleteLast") == 0) {
            int result = dalateLast(deque);
            if(result==-1) {
                printf("Deque id 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;
}