import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int[] arr = new int[n];
            for(int i=0; i<arr.length; i++) {
                arr[i] = in.nextInt();
            }
            walk(arr);
        }
    }

    private static void walk(int[] arr) {
        //定义一个dp数组,存放从当前位置开始走的最大步数
        //从后往前走:正序循环构造数组,从前往后走:倒叙构造数组
        int[] dp = new int[arr.length];
        Arrays.fill(dp, 1);
        for(int i=arr.length-1; i>=0; i--) {
            for(int j=arr.length-1; j>i; j--) {
                if(arr[j]>arr[i]) {
                    //动态方程
                    dp[i] = Math.max(dp[j] + 1, dp[i]);
                }
            }
        }
        Arrays.sort(dp);
        System.out.println(dp[dp.length-1]);
    }
}