#include <iostream>
using namespace std;
const int MAXN = 100000 + 5;
int num[MAXN],dp[MAXN],dp2[MAXN];
//question : longest increasing sequence->longest decreasing sequence
//example : 389 207 155 300 299 170 158 65
//solution : 389 300 299 170 158 65
//example : 89 126 85 103 101 86 86 98 96 99 89 81 101 92 79 77 82 97 83 100 78 72 79 97 71 80 98 89 69 74
//solution : 12 6
int main()
{
int n=0,x;
while(scanf("%d",&x)!=EOF) {
num[n++]=x;
}
int len=0,len2=0;
dp[0]=0x3fffffff;
dp2[0]=0;
for(int i=0; i<n; i++) {
//计算最多能拦截多少导弹
if(num[i]<=dp[len])dp[++len]=num[i];
else {
int L=0,R=len;
while(L<R) {
int mid=(L+R)/2;
if(dp[mid]<num[i])R=mid;
else L=mid+1;
}
dp[R]=max(dp[R],num[i]);
}
//计算这套导弹系统最少要几个
if(num[i]>dp2[len2])dp2[++len2]=num[i];
else {
int L=0,R=len2;
while(L<R) {
int mid=(L+R)/2;
if(dp2[mid]>num[i])R=mid;
else L=mid+1;
}
dp2[L]=min(dp2[L],num[i]);
}
}
cout<<len<<endl<<len2<<endl;
return 0;
}