import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String[] str = scanner.nextLine().split(" ");
//int len = str.length;
int[] arr = new int[str.length];
for(int i=0;i<str.length;i++){
arr[i]=Integer.parseInt(str[i]);
}
int result = process(arr, arr.length);
System.out.println(result);
}
public static int process(int[] arr,int n){
//声明变量
int max=0;
int[] dp = new int[n];
//合法性检查
if(arr==null||n==0){
return 0;
}
//主体
//使用动态规划 dp[i]==以Si为结尾的最长递增子序列的长度
for(int i=0;i<n;i++){
max=1;
for(int j=0;j<i;j++){
//因为每个元素单独自己可以看成一个递增子序列 且它的长度可以看成是1
if(arr[i]>arr[j]) {//因为必须是递增的 必须要判断是否递增
max = Math.max(max,dp[j]+1);
}

        }
        dp[i]=max;
    }


    //最后要遍历出整个序列中的最长递增子序列的长度
    int result=0;
    for(int k=0;k<n;k++){
        if(dp[k]>result){
            result=dp[k];
        }
    }
    //返回结果
    return result;
}

}