#include<iostream>
#include<cstring>
using namespace std;
int dp[100010],a[100010],len=1,n,t;
int dp2[100010];
int find(int x){
int l=1,r=len;
int mid;
while(l<=r){
mid=(l+r)/2;
if(x>dp2[mid]) l=mid+1;
else if(x<dp2[mid]) r=mid-1;
}
return l;
}
int findf(int x){
int l=1,r=len;
int mid;
while(l<=r){
mid=(l+r)/2;
if(x>dp[mid]) l=mid+1;
else if(x<dp[mid]) r=mid-1;
}
return r;
}
int main(){
while(cin >> t){
a[++n]=t;
}
dp[1]=a[1];
for(int i=2;i<=n;i++){
if(a[i]<dp[len]){
dp[++len]=a[i];
}else{
int k=findf(a[i]);
dp[k]=a[i];
}
}
cout << len-1 << endl;
len=1;
dp2[1]=1;
for(int i=1;i<=n;i++){
if(a[i]>dp2[len]){
dp2[++len]=a[i];
}else{
int k=find(a[i]);
dp2[k]=a[i];
}
}
cout << len-1;
return 0;
}