#include <iostream>
using namespace std;
int lis(int *arr, int n, int index, int last, int *ans){
if(index >= n){
return 0;
}
// memoization sirf 2-d me ho skti hai nhi toh inner loop bhi lagana padega recursion me jisse TC O(n^2) ho jaayegi
int take = 0;
int dontTake = lis(arr, n, index + 1, last, ans);
if(arr[index] > last){
take = 1 + lis(arr, n, index + 1, arr[index], ans);
}
return max(take, dontTake);
}
int lisDP(int *arr, int n){
int *ans = new int[n + 1];
ans[0] = 0;
ans[1] = 1;
for(int i = 2; i <= n; i++){
ans[i] = 1;
for(int j = i - 1; j > 0; j--){
if(arr[j - 1] < arr[i - 1]){
ans[i] = max(ans[j] + 1, ans[i]);
}
}
}
int maxi = -1;
for(int i = 0; i <= n; i++){
if(maxi < ans[i]){
maxi = ans[i];
}
}
delete []ans;
return maxi;
}
int main(){
int n;cin>>n;
int *arr = new int[n];
for(int i = 0; i < n; i++){
cin>>arr[i];
}
int *ans = new int[n + 1];
for(int i = 0; i <= n ;i++){
ans[i] = -1;
}
cout<<lisDP(arr, n)<<endl;
delete []arr;
delete []ans;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBsaXMoaW50ICphcnIsIGludCBuLCBpbnQgaW5kZXgsIGludCBsYXN0LCBpbnQgKmFucyl7CiAgICBpZihpbmRleCA+PSBuKXsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyBtZW1vaXphdGlvbiBzaXJmIDItZCBtZSBobyBza3RpIGhhaSBuaGkgdG9oIGlubmVyIGxvb3AgYmhpIGxhZ2FuYSBwYWRlZ2EgcmVjdXJzaW9uIG1lIGppc3NlIFRDIE8obl4yKSBobyBqYWF5ZWdpCgogICAgaW50IHRha2UgPSAwOwogICAgaW50IGRvbnRUYWtlID0gbGlzKGFyciwgbiwgaW5kZXggKyAxLCBsYXN0LCBhbnMpOwogICAgaWYoYXJyW2luZGV4XSA+IGxhc3QpewogICAgICAgIHRha2UgPSAxICsgbGlzKGFyciwgbiwgaW5kZXggKyAxLCBhcnJbaW5kZXhdLCBhbnMpOwogICAgfQoKICAgIHJldHVybiBtYXgodGFrZSwgZG9udFRha2UpOwp9CgppbnQgbGlzRFAoaW50ICphcnIsIGludCBuKXsKICAgIGludCAqYW5zID0gbmV3IGludFtuICsgMV07CiAgICBhbnNbMF0gPSAwOwogICAgYW5zWzFdID0gMTsKICAgIGZvcihpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKXsKICAgICAgICBhbnNbaV0gPSAxOwogICAgICAgIGZvcihpbnQgaiA9IGkgLSAxOyBqID4gMDsgai0tKXsKICAgICAgICAgICAgaWYoYXJyW2ogLSAxXSA8IGFycltpIC0gMV0pewogICAgICAgICAgICAgICAgYW5zW2ldID0gbWF4KGFuc1tqXSArIDEsIGFuc1tpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IG1heGkgPSAtMTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKXsKICAgICAgICBpZihtYXhpIDwgYW5zW2ldKXsKICAgICAgICAgICAgbWF4aSA9IGFuc1tpXTsKICAgICAgICB9CiAgICB9CiAgICBkZWxldGUgW11hbnM7CiAgICByZXR1cm4gbWF4aTsKfQoKaW50IG1haW4oKXsKICAgIGludCBuO2Npbj4+bjsKICAgIGludCAqYXJyID0gbmV3IGludFtuXTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGNpbj4+YXJyW2ldOwogICAgfQoKICAgIGludCAqYW5zID0gbmV3IGludFtuICsgMV07CiAgICBmb3IoaW50IGkgPSAwOyBpIDw9IG4gO2krKyl7CiAgICAgICAgYW5zW2ldID0gLTE7CiAgICB9CgogICAgY291dDw8bGlzRFAoYXJyLCBuKTw8ZW5kbDsKICAgIGRlbGV0ZSBbXWFycjsKICAgIGRlbGV0ZSBbXWFuczsKICAgIHJldHVybiAwOwp9