import java.util.Arrays;
import java.util.Scanner;

public class DP8 {
   
    public static void main(String[] args) {
   
        //int[] arr={1,2,5,4,6,0,4,9}; // 5
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String[] str = s.split(" ");
        int[] arr = new int[str.length];
        for (int i = 0; i <str.length ; i++) {
   
            arr[i]=Integer.valueOf(str[i]);
        }

        DP8 dp8 = new DP8();
        int res = dp8.dp(arr);
        System.out.println(res);
    }

    public int dp(int[] nums){
   
        int n=nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp,1);
        //计算出dp数组,dp[i]表示到nums[i]这个数字的最长子序列长度
        for (int i = 0; i < n ; i++) {
   
            for (int j = 0; j <i ; j++) {
   
                //找到前面那些结尾比nums[i]小的子序列,把nums[i]接到最后,新的子序列长度加一
                //有可能形成很多种新的子序列,我们选择最长的那一种,保存子序列最长的结果到dp[i]
                if (nums[j]<nums[i]){
   
                    dp[i]=Math.max(dp[i],dp[j]+1);
                }
            }
        }
        //在dp数组中的最大值就是最长子序列长度
// Arrays.sort(dp);
// int res = dp[n-1];

        int res=0;
        for (int i = 0; i < n; i++) {
   
            res=Math.max(res,dp[i]);
        }
        return res;
    }
}