#include<cstdio>#include<cstring>#include<algorithm>#include<set>#include<iostream>//#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;#define space putchar(' ')#define enter putchar('\n')typedef pair<int,int> PII;constint mod=1e4+7;constint N=2e6+10;constint inf=0x7f7f7f7f;
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
ll lcm(ll a,ll b){return a*(b/gcd(a,b));}template<classT>voidread(T &x){char c;bool op =0;while(c =getchar(), c <'0'|| c >'9')if(c =='-')
op =1;
x = c -'0';while(c =getchar(), c >='0'&& c <='9')
x = x *10+ c -'0';if(op)
x =-x;}template<classT>voidwrite(T x){if(x <0)
x =-x,putchar('-');if(x >=10)write(x /10);putchar('0'+ x %10);}int fa[N];int n,m;int a[N];int dp[N];intmain(){int n;int cnt=0;while(~scanf("%d",&a[cnt]))cnt++;//cout<<cnt<<endl;fill(dp,dp+cnt,inf);for(int i=cnt-1;i>=0;i--){*lower_bound(dp,dp+cnt,a[i])=a[i];}int ans1=lower_bound(dp,dp+cnt,inf)-dp;int ans2;fill(dp,dp+cnt,inf);for(int i=0;i<cnt;i++){*lower_bound(dp,dp+cnt,a[i])=a[i];}
ans2=lower_bound(dp,dp+cnt,inf)-dp;printf("%d\n%d\n",ans1,ans2);return0;}