#include <iostream>
using namespace std;
int n,maxchk;
int a[1000010] = {0,1,2,3,4,5,6};
int chk[1000010];
int buxiajiang(int l,int r,int tar){
int mid;
while (l != r + 1){
mid = l + ((r - l) >> 1);
if (chk[mid] < tar){
l = tar;
}
else{
r = tar;
}
}
return l;
}
int main(){
cout << buxiajiang(0,6,4);
return 0;
}
#include <iostream>
using namespace std;
int n,maxchk;
int a[1000010];
int chk[1000010];
int buxiajiang(int l,int r,int tar){
int mid;
while (l != r + 1){
mid = l + ((r - l) >> 1);
if (chk[mid] <= tar){
r = tar;
}
else{
l = tar;
}
}
return l;
}
int main(){
while (cin >> a[++n]);
for (int i = 1;i <= n;i++){
int tar = buxiajiang(0,maxchk + 1,a[i]);
chk[tar] = a[i];
if (maxchk < tar){
maxchk = tar;
}
}
cout << maxchk;
return 0;
}