import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class maxLeftOrRightLen {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<TreeNode> rec = new ArrayList<>(n);
for(int i = 0;i < n; i ++){
rec.add(new TreeNode(sc.nextInt()));
}
TreeNode root = rec.get(0);
for(int i = 1; i < n; i ++){
myBuildTree(root,rec.get(i));
}
int max = 0;
HashMap<Integer,Integer> recMap = new HashMap<>();
max = dfs(root,1,1,recMap,0);
System.out.println(max + " " + recMap.get(max));
}
public static class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val){
this.val = val;
}
}
public static TreeNode myBuildTree(TreeNode root,TreeNode child){
if(root == null) return null;
if(root.val > child.val){
if(myBuildTree(root.left,child) == null)
root.left = child;
}else{
if(myBuildTree(root.right,child) == null)
root.right = child;
}
return child;
}
public static int dfs(TreeNode root, int lLen, int rLen, HashMap<Integer,Integer> recMap,int flag){
if(root == null) return 0;
int maxLeft = lLen;
int maxRight = rLen;
if(root.left != null){
maxLeft = dfs(root.left,lLen ,1,recMap,1) + 1 ;
recMap.put(maxLeft,recMap.getOrDefault(maxLeft,0) + 1);
}if(root.right != null){
maxRight = dfs(root.right,1,rLen ,recMap,2) + 1;
recMap.put(maxRight,recMap.getOrDefault(maxRight,0) + 1);
}
if(maxLeft > maxRight && flag == 0){
flag = 1;
}else if(maxLeft < maxRight && flag == 0){
flag = 2;
}
return flag == 1? maxLeft : maxRight;
}
}