import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
int index = 0;
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
nums[index] = in.nextInt();
index++;
}
// 第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。
int[] dp = new int[n];
Arrays.fill(dp,1);
int res = dp[0];
// 最大连续下降序列
for(int i = 1; i < n; i++){
for(int j = 0; j < i; j++){
if(nums[i] <= nums[j]){
dp[i] = Math.max(dp[i], dp[j] + 1);
}
res = Math.max(res, dp[i]);
}
}
// 最少要多少个系统,不同的系统拦截的数量是不一样的,比如某个系统最大拦截6,另外一个系统最大拦截可能就是3了,所以需要统计
// Dilworth定理:最少的下降序列个数等于整个序列最长上升子序列的长度
// 本质上是在计算最长递增子序列的长度,因为每出现一个比之前所有的高的导弹,就需要新增一个系统
int count = 0;
int[] dp2 = new int[n];
Arrays.fill(dp2,1);
for(int i = 1; i < n;i++){
for(int j = 0; j < i; j++){
if(nums[i] > nums[j]){
dp2[i] = Math.max(dp2[i], dp2[j] + 1);
}
}
}
for(int i = 0; i < n; i++){
count = Math.max(count, dp2[i]);
}
System.out.println(res);
System.out.println(count);
}
}