# include <cstdio>
# include <iostream>
# include <algorithm>
# include <cstring>
using namespace std;
long long f[5001];
int num[5001][100];
long long a[5001],Ans;
int zero[2]={1,0},wc[100],ans[100]={1,0};
void add(int a[], int b[], int c[])
{
int lena=a[0],lenb=b[0];
int lenc=max(lena, lenb);
int tmp=0;
for(int i=1;i<=lenc;i++)
{
c[i]=a[i]+b[i]+tmp;
tmp=c[i]/10;
c[i]%=10;
}
if (tmp>0)
{
lenc++;
c[lenc]=tmp;
}
c[0]=lenc;
}
int main()
{
int n;
cin>>n;
a[0]=9223372036854775807;
f[0]=0;
num[0][0]=1;
num[0][1]=1;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]<a[j])
{
if(f[i]<f[j]+1)
{
f[i]=f[j]+1;
add(num[j],zero,num[i]);
}
else if(f[i]==f[j]+1)
{
memset(wc,0,sizeof wc);
wc[0]=1;
add(num[j],num[i],wc);
add(wc,zero,num[i]);
}
}
else if(a[i]==a[j])
{
f[j]=0;
num[j][0]=1;
num[j][1]=0;
}
}
Ans=max(Ans,f[i]);
}
for(int i=1;i<=n;i++)
if(f[i]==Ans)
{
memset(wc,0,sizeof wc);
wc[0]=1;
add(ans,num[i],wc);
add(wc,zero,ans);
}
cout<<Ans<<" ";
for(int i=ans[0];i>=1;i--)
printf("%d",ans[i]);
return 0;
}