#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

struct node{
    int data;
    struct node* left;
    struct node* right;
};

struct node* newnode(int data){
    struct node* node =(struct node *)malloc(sizeof(struct node));
    node->data= data;
    node-> left = node->right = NULL;
    return node;
}

struct node* insert(struct node* root, int data, int*dupflag){
    if(root==NULL){
        return newnode(data);
    }
    if(data < root->data){
        root->left = insert(root->left, data, dupflag);
    }
    else if(data > root->data){
        root->right =insert(root->right, data , dupflag);
    }
    else{
        *dupflag = 1;
        return root;
    }
    returnroot;
}
    
void preorder(struct node* root){
    if(root == NULL) return;
    printf("%d", root->data);
    if(root->left || root->right ) printf(" ");
    preorder(root->left);
    if(root->right && !(root->left)) printf(" ");
    preorder(root->right);

}

int main(){
    int n;
    if(scanf("%d", &n) !=1 || n <=0){
        printf("Invalid input");
        return 0;
    }
    
    struct node* root = NULL;
    int dupflag = 0;
    for(int i=0; i<n; i++){
        char buffer[50];
        if(scanf("%s", buffer) !=1){
            printf("Invalid input");
            return 0;
        }
        for(int j=0; buffer[j];j++){
            if(!isdigit(buffer[j])) {
            printf("Invalid input");
            return 0;
            }
        }
        int val = atoi(buffer);
        root = insert(root, val, &dupflag);
        if(dupflag){
            printf("Invalid input");
            return 0;
        }
    }
    preorder(root);
    return 0;
}