#include<stdio.h>
#include<stdlib.h>
struct Node{
    int data;
    struct Node *next;
};
struct Node* createNode(int val){
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = val;
    newNode->next = NULL;
    return newNode;
}
struct Node* insertAtBeginning(struct Node* head, int value){
    struct Node* newNode = createNode(value);
    if(head == NULL){
        newNode->next = newNode;
        return newNode;
    }
    struct Node* temp = head;
    while(temp->next != head){
        temp = temp->next;
    }
    temp->next = head;
    newNode->next = head;
    head = newNode;
    return head;
}
void display(struct Node* head){
    if(head == NULL)
        return;
    struct Node* temp = head;
    do{
        printf("%d", temp->data);
        temp = temp->next;
        if(temp != head)
            printf(" ");
        while(temp != head);
    }
}
int main(){
    int n;
    scanf("%d", &n);
    if(n <= 0 || n > 100){
        printf("Invalid input");
        return 0;
    }
    struct Node* head = NULL;
    struct Node* tail = NULL;
    for(int i = 0; i < n; i++){
        int value;
        scanf("%d", &value);
        struct Node* newNode = createNode(value);
        if(head == NULL){
            head = newNode;
            tail = newNode;
        }else{
            tail->next = newNode;
            tail = newNode;
        }
    }
    tail->next = head;
    int valueToInsert;
    scanf("%d", &valueToInsert);
    head = insertAtBeginning(head, valueToInsert);
    display(head);
    struct Node* temp = head->next;
    while(temp != head){
        struct Node* del = temp;
        temp = temp->next;
        free(del);
    }
    free(head);
    return 0;
}