#include <bits/stdc++.h>
using namespace std;
const int MAXN= 1e5 + 5;
int a[MAXN], x, n, dp[MAXN], maxn;
int pre[MAXN], ans;
int main() {
while (cin >> x) a[++n] = x;
reverse(a+1,a+1+n);
int len=0;
for(int i=1;i<=n;i++)
{
x=a[i];
if(x>a[len])
{
a[++len]=x;
}
else
{
int pos =lower_bound(a+1,a+1+len,x)-a;
a[pos]=x;
}
}
cout << len << endl;
reverse(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
dp[i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(a[i]>=a[j]&&dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
pre[i]=j;
}
}
}
for(int i=1;i<=n;i++)
{
ans=max(ans,dp[i]);
}
cout << ans << endl;
}
4分求助