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

#include "deque.h"



void deque_push_front(struct deque *d, int value) {
    // TODO: implement this function
    (void) d;
    (void) value;
}

void deque_push_back(struct deque *d, int value) {
    // TODO: implement this function
    (void) d;
    (void) value;
}

int deque_pop_front(struct deque *d, int *value_out) {
    // TODO: implement this function
    (void) d;
    (void) value_out;
    return 0;
}

int deque_pop_back(struct deque *d, int *value_out) {
    // TODO: implement this function
    (void) d;
    (void) value_out;
    return 0;
}


int main(void) {
    struct deque d;
    d.head = NULL;
    d.tail = NULL;
    d.size = 0;
    char cmd[20];
    while (scanf("%19s", cmd) == 1) {
        if (strcmp(cmd, "PB") == 0) { int v; scanf("%d", &v); deque_push_back(&d, v); }
        else if (strcmp(cmd, "PF") == 0) { int v; scanf("%d", &v); deque_push_front(&d, v); }
        else if (strcmp(cmd, "PRINT") == 0) {
            printf("Deque:");
            for (struct dnode *n = d.head; n != NULL; n = n->next) { printf(" %d", n->value); }
            printf("\n");
        }
        else if (strcmp(cmd, "POPF") == 0) {
            int value;
            if (deque_pop_front(&d, &value)) { printf("Pop front: %d\n", value); }
            else { printf("Pop front: failed, deque is empty\n"); }
        }
        else if (strcmp(cmd, "POPB") == 0) {
            int value;
            if (deque_pop_back(&d, &value)) { printf("Pop back: %d\n", value); }
            else { printf("Pop back: failed, deque is empty\n"); }
        }
    }
    return 0;
}
