#include <iostream>
#include <string>
#include <memory.h>
#include <algorithm>
using namespace std;
int n;
int arr[1100];
int catche[1200];
int dp(int start) {
if (start>=n) {
return 0;
}
int& ret = catche[start];
if (ret != -1) return ret;
ret = 1;
for (int i = start + 1; i < n; i++) {
if (arr[i] < arr[start]) ret = max(ret, 1+dp(i));
// 특정 지점 (start)보다 작은 지점에서의 길이+1
else ret = max(ret, dp(i));
// 특정 지점 (start)보다 작지 않은 지점에서의 길이
}
return ret;
}
int main() {
cin >> n;
memset(catche, -1, sizeof(catche));
for (int i = 0; i < n; i++) cin >> arr[i];
cout << dp(0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWVtb3J5Lmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuOwppbnQgYXJyWzExMDBdOwppbnQgY2F0Y2hlWzEyMDBdOwppbnQgZHAoaW50IHN0YXJ0KSB7CiAgIGlmIChzdGFydD49bikgewogICAgICByZXR1cm4gMDsKICAgfQogICBpbnQmIHJldCA9IGNhdGNoZVtzdGFydF07CiAgIGlmIChyZXQgIT0gLTEpIHJldHVybiByZXQ7CgogICByZXQgPSAxOwogICBmb3IgKGludCBpID0gc3RhcnQgKyAxOyBpIDwgbjsgaSsrKSB7CiAgICAgIGlmIChhcnJbaV0gPCBhcnJbc3RhcnRdKSByZXQgPSBtYXgocmV0LCAxK2RwKGkpKTsKICAgICAgIC8vIO2KueyglSDsp4DsoJAgKHN0YXJ0KeuztOuLpCDsnpHsnYAg7KeA7KCQ7JeQ7ISc7J2YIOq4uOydtCsxIAogICAgICBlbHNlIHJldCA9IG1heChyZXQsIGRwKGkpKTsKICAgICAgICAvLyDtirnsoJUg7KeA7KCQIChzdGFydCnrs7Tri6Qg7J6R7KeAIOyViuydgCDsp4DsoJDsl5DshJzsnZgg6ri47J20CiAgIH0KICAgcmV0dXJuIHJldDsKfQoKaW50IG1haW4oKSB7CiAgIGNpbiA+PiBuOwogICBtZW1zZXQoY2F0Y2hlLCAtMSwgc2l6ZW9mKGNhdGNoZSkpOwogICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IGFycltpXTsKICAgY291dCA8PCBkcCgwKTsKfQoK