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

typedef struct c { int d; struct c *n, *p; } *C;
C l = NULL;

C new_c(int v) {
    C t = (C)malloc(sizeof(struct c));
    t->d = v; t->n = t->p = NULL; return t;
}

void insert_beg(int v) {
    C t = new_c(v);
    if (!l) { l = t; l->n = l->p = l; }
    else {
        t->n = l->n;
        l->n->p = t;
        t->p = l;
        l->n = t;
    }
}

void del_end() {
    if (!l) printf("List is empty");
    else {
        C p = l->p;
        p->n = l->n;
        l->n->p = p;
        free(l);
        l = p;
    }
}

void traverse() {
    if (!l) return;
    C c = l->n;
    do { printf("%d ", c->d); c = c->n; } while (c != l->n);
    printf("\n");
}

int main() {
    char cont = 'y'; int ch;
    while (cont == 'y') {
        printf("1. Insert at beginning\n2. Delete at end\n3. Traverse\n");
        scanf("%d", &ch);
        if (ch == 1) { int v; scanf("%d", &v); insert_beg(v); }
        else if (ch == 2) { del_end(); printf("Element deleted\n"); }
        else if (ch == 3) { traverse(); }
        printf("Continue? (y/n)\n");
        fflush(stdin);
        scanf(" %c", &cont);
    }
    return 0;
}
