package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

/*
*
本质:
1、求解最长的递减子列长度(非严格递减,即:可以包含=)
2、Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度(严格递增,即:不包含=)
*/
func solution(arr []int) (int, int) {
	incrementDp := make([]int, len(arr))
	decrementDp := make([]int, len(arr))
	for i := 0; i < len(arr); i++ {
		incrementDp[i] = 1
		decrementDp[i] = 1
	}
	maxIncrement := 0
	maxDecrement := 0
	for i := 1; i < len(arr); i++ {
		for j := 0; j < i; j++ {
			//计算1
			if arr[i] <= arr[j] {
				decrementDp[i] = max(decrementDp[i], decrementDp[j]+1)
			}
			maxDecrement = max(maxDecrement, decrementDp[i])
			//计算2
			if arr[i] > arr[j] {
				incrementDp[i] = max(incrementDp[i], incrementDp[j]+1)
			}
			maxIncrement = max(maxIncrement, incrementDp[i])
		}
	}
	return maxDecrement, maxIncrement
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

/*
*
8
389 207 155 300 299 170 158 65
结果
6
2
*/
func main() {
	var count int
	fmt.Scanln(&count)
	arr := make([]int, count)
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	str := scanner.Text()
	strs := strings.Split(str, " ")
	for i, val := range strs {
		ele, _ := strconv.Atoi(val)
		arr[i] = ele
	}
	maxDecrement, maxIncrement := solution(arr)
	fmt.Println(maxDecrement)
	fmt.Println(maxIncrement)
}