#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>

typedef struct Node
{
    int data ;
    struct Node*left;
    struct Node*right;
}
Node;
Node*createNode(int value){
    Node*newNode=(Node*)malloc(sizeof(Node));
    if(newNode==NULL){
        perror("Memory allocation failed");
        exit(EXIT_FAILURE);
    }
    newNode->data=value;
    newNode->left=NULL;
    newNode->right=NULL;
    return newNode;
}
Node*insert(Node*root,int value){
    if(root==NULL){
        return createNode(value);
    }
    if(value<root->data){
        root->left=insert(root->left,value);
    }
    else if(value>root->data){
        root->right=insert(root->right,value);
    }
    return ;
}

void postOrderleafTraversal(Node*root){
    if(root==NULL){
        return;
    }
    postOrderleafTraversal(root->left);
    postOrderleafTraversal(root->right);
    if(root->left==NULL&&root->right==NULL){
        printf("%d",root->data);
    }
}
voidfreetree(Node*root){
    if(root==NULL){
        return;
    }
    freeTree(root->left);
    freeTree(root->right);
    free(root);
    
}
int main ()
{
    int n,i;
    int nodevalue;
    Node*root=NULL;
    
    if(scanf("%d",&n)!=1)return 1;
    if(n<=0){
        printf("Invalid Input");
        return 0;
    }
    for(i=0;i<n;i++){
        if(scanf("%d",&nodevalue)!=1){
            freeTree(root);
            return 1;
            
        }
    root=insert(root,nodevalue);
    }
postOrderleafTraversal(root);
printf("\n");
freeTree(root);
return 0;
}