#include<bits/stdc++.h>
using namespace std;
int a[100001], fro[100001], orf[100001];
int n=1, i, ans=1, ans2=1;
int se(int x){
int start;
int end;
int mid;
int p;
start=1;
end=ans;
while(start<=end){
mid=start+((end-start)>>1);
if(fro[mid]>x){
start=mid+1;
}
else{
end=mid-1;
p=mid;
}
}
return p;
}
int se2(int x){
int start2;
int end2;
int mid2;
int p2;
start2=1;
end2=ans2;
while(start2<=end2){
mid2=start2+((end2-start2)>>1);
if(orf[mid2]<=x){
start2=mid2+1;
}
else{
p2=mid2;
end2=mid2-1;
}
}
return p2;
}
int main(){
memset(fro,0,sizeof(fro));
memset(orf,0,sizeof(orf));
while(cin>>a[n]){
n++;
}
n--;
fro[1]=a[1];
orf[1]=a[1];
for(i=2; i<=n; i++){
if(a[i]<=fro[ans]){
ans++;
fro[ans]=a[i];
}
else{
fro[se(a[i])]=a[i];
}
if(a[i]>orf[ans2]){
ans2++;
orf[ans2]=a[i];
}
else{
orf[se2(a[i])]=a[i];
}
}
cout<<ans<<endl<<ans2;
return 0;
}