struct Node {
    int data;
    Node* next;
};

Node* insertAtBeginning(Node* head, int val) {
    Node* newNode = new Node();
    newNode->data = val;
    if (head == nullptr) {
        newNode->next = newNode;
        return newNode;
    }
    Node* temp = head;
    while (temp->next != head)
        temp = temp->next;
    newNode->next = head;
    temp->next = newNode;
    return newNode;  // new node is the new head
}

int main() {
    int n;
    cin >> n;
    if (n <= 0) {
        cout << "Invalid input\n";
        return 0;
    }

    Node* head = nullptr;

    // Insert each node at beginning to reverse order
    for (int i = 0; i < n; i++) {
        int val; cin >> val;
        head = insertAtBeginning(head, val);
    }

    int valueToInsert;
    cin >> valueToInsert;

    // Insert the new value at beginning
    head = insertAtBeginning(head, valueToInsert);

    // Print circular list
    Node* temp = head;
    do {
        cout << temp->data << " ";
        temp = temp->next;
    } while (temp != head);
    cout << "\n";

    return 0;
}