import java.util.*;
class Ideone{
public static int arr[];
static int bs(int left, int right, int target){
if(left>=right){
return right;
}
int mid=(left+right)/2;
if(arr[mid]>target){
return bs(left,mid,target);
}
else{
return bs(mid+1,right,target);
}
}
public static void main
(String args
[]){
int idx_1=0,idx_2=0;
int num;
Scanner sc
=new Scanner
(System.
in); int n=sc.nextInt();
arr=new int[n+1];
for(int i=0; i<n; i++){
num=sc.nextInt();
idx_1=bs(idx_1,idx_2,num);
arr[idx_1]=num;
if(idx_1==idx_2){
idx_2=idx_1+1;
}
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgSWRlb25lewoKICBwdWJsaWMgc3RhdGljIGludCBhcnJbXTsKCiAgICBzdGF0aWMgaW50IGJzKGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCB0YXJnZXQpewogICAgaWYobGVmdD49cmlnaHQpewogICAgICByZXR1cm4gcmlnaHQ7CiAgICB9CiAgICBpbnQgbWlkPShsZWZ0K3JpZ2h0KS8yOwoKICAgIGlmKGFyclttaWRdPnRhcmdldCl7CiAgICAgIHJldHVybiBicyhsZWZ0LG1pZCx0YXJnZXQpOwogICAgfQogICAgZWxzZXsKICAgICAgcmV0dXJuIGJzKG1pZCsxLHJpZ2h0LHRhcmdldCk7CiAgICB9CiAgfQoKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKXsKCiAgICBpbnQgaWR4XzE9MCxpZHhfMj0wOwogICAgaW50IG51bTsKICAgICAgCiAgICBTY2FubmVyIHNjPW5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICBpbnQgbj1zYy5uZXh0SW50KCk7CiAgICBhcnI9bmV3IGludFtuKzFdOwogICAgQXJyYXlzLmZpbGwoYXJyLDApOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgbnVtPXNjLm5leHRJbnQoKTsKICAgICAgaWR4XzE9YnMoaWR4XzEsaWR4XzIsbnVtKTsKICAgICAgYXJyW2lkeF8xXT1udW07CiAgICAgIGlmKGlkeF8xPT1pZHhfMil7CiAgICAgICAgaWR4XzI9aWR4XzErMTsKICAgICAgfQogICAgfQogICAgU3lzdGVtLm91dC5wcmludGxuKGlkeF8yKTsKICB9Cgp9