content: 
  
  import java.util.*;
  import java.io.*;
  
  class Node {
      Node left;
      Node right;
      int data;
      
      Node(int data) {
          this.data = data;
          left = null;
          right = null;
      }
  }
  
  class solution {
  
  //new class to store level of each node along with the node 
     static class QueueNode{
          Node node;
          int level;
          public QueueNode(Node node, int level){
              this.node = node;
              this.level = level;
          }
      }
  
  
      public static void topView(Node root) {
          //took a queue - similar to BFS approach
          Queue<QueueNode> queue = new LinkedList<QueueNode>();
         
          //Taking a TreeMap<first, second>
          //first - stores the level of the node
          //second - stores the node.data
          TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
      //why TreeMap because the nodes to be sorted from leftmost to rightmost
          
          //start (since root, level = 0)
          queue.add(new QueueNode(root, 0));
          
          while(!queue.isEmpty()){
              //remove element from queue
              QueueNode r = queue.poll();
              //if the level of this node has never been reached before -> visible in top view
              if(!map.containsKey(r.level)){
                  map.put(r.level, r.node.data);
              }
              
              //add node's descendants
              //all left child node levels = node.level - 1
              //all right child node levels = node.level + 1
              if(r.node.left != null){
                  queue.add(new QueueNode(r.node.left, r.level - 1));
              }
              if(r.node.right != null){
                  queue.add(new QueueNode(r.node.right, r.level + 1));
              }
          }
          //since already sorted (cuz TreeMap), print from left to right
          for (Integer value : map.values()) {
              System.out.print(value + " ");
          }
      }
  	public static Node insert(Node root, int data) {
          if(root == null) {
              return new Node(data);
          } else {
              Node cur;
              if(data <= root.data) {
                  cur = insert(root.left, data);
                  root.left = cur;
              } else {
                  cur = insert(root.right, data);
                  root.right = cur;
              }
              return root;
          }
      }
  
      public static void main(String[] args) {
          Scanner scan = new Scanner(System.in);
          int t = scan.nextInt();
          Node root = null;
          while(t-- > 0) {
              int data = scan.nextInt();
              root = insert(root, data);
          }
          scan.close();
          topView(root);
      }	
  }
  