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