#include <bits/stdc++.h>

using namespace std;

int n, arr[1000001], dp[1000001];

int ans() {
	dp[1] = 1;

	for (int i = 2; i <= n; i ++) {
		// dp[i] musi byc minimum 1, a tablica zadeklarowana
		// globalnie ma zera we wszystkich szufladkach tablicy
		dp[i] ++;

		// szukam max posrod wszystkich dp[j] takich,
		// ze j < i oraz arr[j] < arr[i]
		int mx = 0;
		for (int j = 1; j < i; j ++) {
			if (arr[j] < arr[i])
				mx = max(mx, dp[j]);
		}

		// powiekszam dp[i] (ktore btw jest rowne 1) o max
		// sposrod dp[j] gdzie j < i oraz arr[j] < arr[i]
		// UWAGA! mx moze byc rowne 0 i wtedy dp[i] pozostanie 1
		dp[i] += mx;
	}

	// szukam max wsrod wszystkich dp[i], 1 <= i <= 1e6
	int mx = dp[1];
	for (int i = 2; i <= n; i ++)
		mx = max(mx, dp[i]);

	return mx;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	for (int i = 1; i <= n; i ++)
		cin >> arr[i];

	cout << ans();
}