// editor3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Node {
    char* data;
    struct Node* next;
} Node;

Node* createNode(char* data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = strdup(data);
    newNode->next = newNode; // Point to itself for circular list
    return newNode;
}

void insertAtMiddle(Node** head_ref, char* new_data, int n) {
    Node* newNode = createNode(new_data);
    if (*head_ref == NULL) {
        *head_ref = newNode;
        return;
    }

    Node* head = *head_ref;
    int middle = n / 2;
    Node* current = head;
    for (int i = 0; i < middle - 1; i++) {
        current = current->next;
    }

    newNode->next = current->next;
    current->next = newNode;
}

void printCircularList(Node* head, int n) {
    if (head == NULL) return;
    Node* current = head;
    for (int i = 0; i < n+1; i++) { // +1 because we inserted a new node
        printf("%s ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // Consume newline

    char messages[n][50];
    for (int i = 0; i < n; i++) {
        scanf("%s", messages[i]);
    }
    char new_msg[50];
    scanf("%s", new_msg);

    Node* head = createNode(messages[0]);
    Node* current = head;
    for (int i = 1; i < n; i++) {
        current->next = createNode(messages[i]);
        current = current->next;
    }
    current->next = head; // Make it circular

    insertAtMiddle(&head, new_msg, n);
    printCircularList(head, n);
    return 0;
}