// editor4
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node *left, *right;
} Node;

Node* createNode(int data){
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->left = node->right = NULL;
    return node;
}

Node* insertLevelOrder(Node* node, int data) {
    if (node == NULL)
    return createNode(data);
    
    Node* queue[100];
    int front = 0, rear = 0;
    queue[rear++] = node;
    
    while (front < rear) {
        Node* temp = queue[front++];
        
        if (temp->left == NULL) {
            temp->left = createNode(data);
            break;
        } else
        queue[rear++] = temp->left;
        
        if (temp->right == NULL) {
            temp->right = createNode(data);
            break;
        } else
        queue[rear++] = temp->right;
    }
    return node;
}

void levelOrder(Node* root) {
    if (root == NULL || root->data==-1) return;
    
    Node* queue[100];
    int front = 0, rear = 0;
    queue[rear++] = root;

    while (front < rear) {
        Node* temp = queue[front++];
        printf("%d ", temp->data);
        
        if (temp->left != NULL  && temp->left!=-1)
        queue[rear++] = temp->left;
        if (temp->right != NULL && temp->right!=-1)
        queue[rear++] = temp->right;
    }
}

int main()
{
    int n, data;
    scanf("%d", &n);
    if (n < 0){
        printf("Invalid input");
        return 0;
    }
    Node *root = NULL;
    for (int i = 0; i <= n; i++){
        scanf("%d", &data);
        root = insertLevelOrder(root, data);
    }
    levelOrder(root);
    return 0;
}