#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647;
const int MAXN=1e5+3;
int n,t,H[MAXN],F[MAXN];
int main(){
while(~scanf("%d",&H[++n])); --n;
t=0,memset(F,0,sizeof(F)),F[0]=INF;
up(1,n,i){
int l=0,r=t+1; while(r-l>1){
int m=l+(r-l)/2;
if(F[m]>=H[i]) l=m; else r=m;
}
int x=l+1; // dp[i]
if(x>t) t=x; F[x]=H[i];
}
printf("%d\n",t);
t=0,memset(F,0,sizeof(F)),F[0]=0;
up(1,n,i){
int l=0,r=t+1; while(r-l>1){
int m=l+(r-l)/2;
if(F[m]<H[i]) l=m; else r=m;
}
int x=l+1;
if(x>t) t=x; F[x]=H[i];
}
printf("%d\n",t);
return 0;
}
/*
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
*/
//12 6 [12,8]
/*
#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e5 + 5;
int a[N], x, l, dp[N], maxn;
int g[N], cnt,ans1,ans2;
int main() {
while (cin>>x){
a[++l] = x;
if(cin.get()=='\n') break;
}
//cin>>x; a[++l]=x;
// memset(dp,1,sizeof(dp));//
// for(int i=1;i<=l;i++) cout<<a[i]<<endl;
for(int i=1;i<=l;i++) dp[i]=1;
for(int i=2;i<=l;i++)
{
for(int j=1;j<=i-1;j++)
{
if(a[i]<=a[j]) dp[i]=max(dp[i],dp[j]+1);
}
}
for(int i=1;i<=l;i++) ans1=max(ans1,dp[i]);
cout<<ans1<<endl;
for(int i=1;i<=l;i++) dp[i]=1;
for(int i=2;i<=l;i++)
{
for(int j=i-1;j>=1;j--)
{
if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1);
}
}
for(int i=1;i<=l;i++) ans2=max(ans2,dp[i]);
cout<<ans2<<'\n';
}
*/