#include<iostream>
using namespace std;
int main()
{
	int N, min[55] = { 0 },num=0,w;//min[]存最上面的值
	cin >> N;
	if (N)
	{
		cin >> w;
		num++;
		min[num] = w;//第一个初始化
		for (int i = 1; i < N; i++)
		{
			cin >> w;
			int j;
			for ( j = 1; j <= num; j++)//判断落在哪个堆
			{
				if (w <= min[j])
				{
					min[j] = w; break;
				}
			}
			if (j > num)//都落不下就重新开一堆
			{
				num++; min[num] = w;
			}
		}
	}
	cout << num;
	return 0;
}