// sennkei list
 
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node {
    int val;
    struct node *next;
}Node;
 
Node *head = NULL;
 
Node* createN(int x){
    Node *newnode;
    newnode = (Node *)malloc(sizeof(Node));
    newnode->val = x;
    newnode->next = NULL;
    return newnode;
}
 
void initL(int n){
    int x,i;
    Node *p;
    scanf("%d",&x);
    head = createN(x);
    p = head;
    for(i=1;i<n;i++){
        scanf("%d",&x);
        p->next = createN(x);
        p = p->next;
    }
}
 
void freeL(){
    Node *p;
    while(head!=NULL){
        p = head->next;
        free(head);
        head = p;
    }
}
 
void printL(){
    Node *p = head;
    while(p != NULL){
        printf("%d ",p->val);
        p = p->next;
    }
    printf("\n");
}
 
 
void insTail(int x){
    Node *p;
    p = head;               // 1
    while(p->next != NULL){ // 2
        p = p->next;        // 2
    }
    p->next = createN(x);   // 3
}
 
void delTail(){
    Node *p;
    p = head;                       // 1
    while(p->next->next != NULL){   // 2
        p = p->next;                // 2
    }
    free(p->next);                  // 3
    p->next = NULL;                 // 4
}
 
 
int main(void){
    int i,n,x1;
    scanf("%d",&n);
    initL(n);
    printL();
    scanf("%d",&x1);
    insTail(x1);
    printL();
    delTail();
    printL();
    freeL();
    return 0;
}
