#include<bits/stdc++.h>
using namespace std;
/*
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,
但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,
并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,
必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
*/
int longest(vector<int>v)
{
int len=1;
vector<int>dp(v.size(),1);
for(int i=1;i<v.size();i++)//求dp[i]
{
for(int j=0;j<i;j++)//对每个i之前的j,如果是非递增,就继承长度并+1
{
if(v[i]<=v[j])
{
dp[i]=max(dp[i],dp[j]+1);
len=max(len,dp[i]);
}
}
}
return len;
}
int main(){
//显然是一个最长不增子序列的问题
//时间复杂度方面可以直接n^2循环
//dp:
int k;
//cin>>k;
while(cin>>k)
{
vector<int>v(k,0);
for(int i=0;i<k;i++){cin>>v[i];}
cout<<longest(v)<<endl;
}
return 0;
}