// editor1
#include <stdio.h>
#include <stdlib.h>


typedef struct Node {
    int data;
    struct Node* left;
    struct Node* right;
} Node;


Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("Memory error\n");
        return NULL;
    }
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    return newNode;
}


void printLeafNodes(Node* root) {
    if (root == NULL) return;
    if (root->left == NULL && root->right == NULL && root->data != -1) {
        printf("%d ", root->data);
    }
    printLeafNodes(root->left);
    printLeafNodes(root->right);
}


Node* constructTree(int* arr, int n) {
    if (n == 0 || arr[0] == -1) return NULL;
    Node* root = createNode(arr[0]);
    Node** queue = (Node*)malloc(n * sizeof(Node));
    int front = 0, rear = 0;
    queue[rear++] = root;
    int i = 1;
    while (i < n && front < rear) {
        Node* current = queue[front++];
        if (arr[i] != -1) {
            current->left = createNode(arr[i]);
            queue[rear++] = current->left;
        }
        i++;
        if (i < n && arr[i] != -1) {
            current->right = createNode(arr[i]);
            queue[rear++] = current->right;
        }
        i++;
    }
    free(queue);
    return root;
}

int main() {
    int n;
    scanf("%d", &n);
    int* arr = (int*)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
 
    for (int i = 0; i < n; i++) {
        if (!(arr[i] >= -1 && arr[i] <= 1e9)) {
            printf("Invalid input\n");
            return 0;
        }
    }
    Node* root = constructTree(arr, n);
    printLeafNodes(root);
    printf("\n");
    free(arr);
    return 0;
}