#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int N = 1e3 + 5;
int n;
int a[N];
int dp[N]; // độ dài dãy con tăng dài nhất kết thúc tại i
int memo[N];
int f(int i) {
int& ans = memo[i];
if (ans != -1) return ans;
ans = 1;
for (int j = 1; j < i; j++) {
if (a[i] > a[j]) ans = max(ans, f(j) + 1);
}
return ans;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
// // get về
// {
// for (int i = 1; i <= n; i++) {
// dp[i] = 1;
// for (int j = 1; j < i; j++) {
// if (a[i] > a[j]) dp[i] = max(dp[i], dp[j] + 1);
// }
// }
// }
// // update lên
// {
// for (int i = 1; i <= n; i++) dp[i] = 1;
// for (int i = 1; i < n; i++) {
// for (int j = i + 1; j <= n; j++) {
// if (a[j] > a[i]) dp[j] = max(dp[j], dp[i] + 1);
// }
// }
// }
// int ans = 0;
// for (int i = 1; i <= n; i++) ans = max(ans, dp[i]);
// cout << ans << '\n';
// đệ quy
{
memset(memo, -1, sizeof memo);
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, f(i));
cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgTiA9IDFlMyArIDU7ICAKCmludCBuOyAKaW50IGFbTl07ICAKaW50IGRwW05dOyAvLyDEkeG7mSBkw6BpIGTDo3kgY29uIHTEg25nIGTDoGkgbmjhuqV0IGvhur90IHRow7pjIHThuqFpIGkgCgppbnQgbWVtb1tOXTsgICAKCmludCBmKGludCBpKSB7CglpbnQmIGFucyA9IG1lbW9baV07ICAgCglpZiAoYW5zICE9IC0xKSByZXR1cm4gYW5zOyAgCgoJYW5zID0gMTsgICAgCglmb3IgKGludCBqID0gMTsgaiA8IGk7IGorKykgewoJCWlmIChhW2ldID4gYVtqXSkgYW5zID0gbWF4KGFucywgZihqKSArIDEpOyAgIAoJfQoKCXJldHVybiBhbnM7ICAKfQoKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7ICAJCgljaW4gPj4gbjsgIAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsgCgoJLy8gLy8gZ2V0IHbhu4EgCgkvLyB7CgkvLyAJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkvLyAJCWRwW2ldID0gMTsgICAKCS8vIAkJZm9yIChpbnQgaiA9IDE7IGogPCBpOyBqKyspIHsKCS8vIAkJCWlmIChhW2ldID4gYVtqXSkgZHBbaV0gPSBtYXgoZHBbaV0sIGRwW2pdICsgMSk7ICAKCS8vIAkJfQoJLy8gCX0KCS8vIH0KCgkvLyAvLyB1cGRhdGUgbMOqbiAKCS8vIHsKCS8vIAlmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGRwW2ldID0gMTsgICAKCgkvLyAJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKCS8vIAkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDw9IG47IGorKykgewoJLy8gCQkJaWYgKGFbal0gPiBhW2ldKSBkcFtqXSA9IG1heChkcFtqXSwgZHBbaV0gKyAxKTsgCgkvLyAJCX0KCS8vIAl9CgkvLyB9CgoJLy8gaW50IGFucyA9IDA7ICAKCS8vIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYW5zID0gbWF4KGFucywgZHBbaV0pOyAgIAoKCS8vIGNvdXQgPDwgYW5zIDw8ICdcbic7IAoJCgkvLyDEkeG7hyBxdXkgCgl7CgkJbWVtc2V0KG1lbW8sIC0xLCBzaXplb2YgbWVtbyk7ICAgICAKCQlpbnQgYW5zID0gMDsgIAoJCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYW5zID0gbWF4KGFucywgZihpKSk7ICAgCgoJCWNvdXQgPDwgYW5zIDw8ICdcbic7IAoJfQp9