#include <bits/stdc++.h>
#define MAXN 50005
using namespace std;
int n;
int height[MAXN];
int ans_arr[MAXN];
int ans_arr2[MAXN];
int main(){
//输入数据
int n = 1;
while((cin.peek()!=EOF)&&(cin.peek()!='\n')){
cin>>height[n];
n++;
}
n--;//这样输入n会大1 所以-1
//先写的第二个
int len1 = 0;//求最大上升子序列
ans_arr[++len1] = height[1];
for(int i = 2;i <= n;i ++){
if(height[i] > ans_arr[len1]){
ans_arr[len1+1] = height[i];
len1 ++;
}
else{
int temp = lower_bound(ans_arr+1,ans_arr+1+len1,height[i]) - ans_arr;
ans_arr[temp] = height[i];
}
}
//倒序
for (int i = 1; i < n/2+1; i++) swap(height[i],height[n+1-i]);
//求最大不上升子序列
ans_arr2[1]=height[1];
int len2=1;
for (int i=2;i<=n;i++)
{
if (height[i]>=ans_arr2[len2]) ans_arr2[++len2]=height[i];
else{
int j=upper_bound(ans_arr2+1,ans_arr2+len2+1,height[i])-ans_arr2;
ans_arr2[j]=height[i];
}
}
cout<<len2<<endl;
cout <<len1<<endl;
return 0;
}