import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < n; i++) {
            a[i] = scanner.nextInt();
        }

        System.out.println(longestNonDecreasingSubsequence(a, n));
        scanner.close();
    }

    /**
     * 计算最长不下降子序列的长度
     * @param a 输入数组
     * @param n 数组长度
     * @return 最长不下降子序列的长度
     */
    private static int longestNonDecreasingSubsequence(int[] a, int n) {
        // 边界情况处理
        if (n == 0) {
            return 0;
        }

        // dp[i]表示以第i个元素结尾的最长不下降子序列的长度
        int[] dp = new int[n];

        // 初始化:每个元素自身可以构成一个长度为1的子序列
        for (int i = 0; i < n; i++) {
            dp[i] = 1;
        }

        // 动态规划计算
        for (int i = 1; i < n; i++) {
            // 检查所有在i之前的元素j
            for (int j = 0; j < i; j++) {
                // 如果a[j] <= a[i],说明可以将a[i]添加到以a[j]结尾的子序列后
                if (a[j] <= a[i]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
        }

        // 找到dp数组中的最大值,即为最长不下降子序列的长度
        int maxLength = 0;
        for (int length : dp) {
            maxLength = Math.max(maxLength, length);
        }

        return maxLength;
    }
}