n = int(input())
p = list(map(int, input().split()))
# 初始化一个数组,用于存储以某个数结尾的最长上升子序列的长度
# 当不构成上升子序列时,自身长度为1
f = [1] * 1010
for i in range(n): # 外层循环遍历序列中的每一个数
for j in range(i): # 内层循环遍历序列中第 i 个数之前的每一个数
if p[i] > p[j]:
# 如果第 i 个数大于第 j 个数,更新以第 i 个数结尾的最长上升子序列的长度
f[i] = max(f[i], f[j] + 1)
ans = 1
# 遍历数组 f,找到其中的最大值,即为最长上升子序列的长度
for i in range(n):
ans = max(ans, f[i])
print(ans)