import java.util.*;
class Node{
    int data;
    Node left;
    Node right;
    Node(int data){
        this.data = data;
    }
}
class AVLTree{
    Node root;
    AVLTree(){
        root = null;
    }
    void insert(int val){
        root = AvlInsert(root,val);
    }
    Node AvlInsert(Node node,int data){
        if(node == null){
            return new Node(data);
        }
        if(data<node.data){
            node.left = AvlInsert(node.left,data);
        }
        else if(data>node.data){
            node.right = AvlInsert(node.right,data);
        }
        else{
            return node;
        }
        return node; 
    }
    int bfsheight(){
        Queue<node>q=new LinkedList<>();
        q.add(root);
        int h=1;
        while(!q.isEmpty()){
            int s=q.size();
            for(int i=0;i<s;i++){
                Node c=q.poll();
                if(c.left!=null) q.add(c.left);
                if(c.right!=null) q.add(c.right);
            }
            h++;
        }
        return h;
    }
    void preorder(Node node){
        if(node !=null){
            System.out.print(node.data+" ");
            preorder(node.left);
            preorder(node.right);
        }
    }
}
class main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        AVLTree tree = new AVLTree();
        int n = sc.nextInt();
        for(int i = 0;i<n;i++){
            int val = sc.nextInt();
            tree.insert(val);
        }
        tree.preorder(tree.root);
        int h1 = tree.bfsheight();
        System.out.println(h1);
    }
}