#include <stdio.h>
#include <string.h>

//一组数
//从任意地点开始 只能从前往后  只能从低到高
// fn   fn-1    n-1 比n < n 那么 ++ n-1比n大 找到一个比n-1大的++
//  n-1 第n-1个 1  n-2个 找到n-1>n-2++ 找不到1
//动态规划,从后往前,当前数能踩到的最大梅花桩数量= max(它之后比它大的数能踩到的最大梅花桩数量)+1


int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {

        int height[n];
        int max[n];
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &height[i]);
        }

        for (int i = n - 1; i >= 0; i--)
        {
            max[i] = 1 ;
            for (int j = i + 1; j < n; j++)
            {
                if (height[j] > height[i])
                {
                    max[i] = (max[j] + 1 > max[i]) ? max[j] + 1 : max[i];
                }
                if (height[j] == height[i])
                {
                    max[i] = (max[j] > max[i]) ? max[j] : max[i];
                }
            }
        }
        int maxstep = 0;
        for (int i = 0; i < n; i++)
        {
            if (maxstep < max[i])
                maxstep = max[i];
        }

        printf("%d\n", maxstep);
    }

    return 0;
}