#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> a;
int n=1;
int dp[100000];
int s[100000];
int js=0;
int main(){
a.push_back(0);
int x;
cin>>x;
a.push_back(x);
while(cin.get()!='\n'){
dp[n]=1;
n++;
cin>>x;
a.push_back(x);
}
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(a[j]>a[i]){
dp[i]=dp[j]+1;
}
}
}
int max=0;
for(int i=1;i<=n;i++){
if(dp[i]>max) max=dp[i];
}
cout<<max<<'\n';
for(int i=1;i<=n;i++){
bool k=0;
for(int j=1;j<=js;j++){
if(s[j]>a[i]){
k=1;
s[j]=a[i];
break;
}
}
if(!k){
js+=1;
s[js]=a[i];
}
sort(s+1,s+js+1);
}
cout<<js;
return 0;
}