#include <stdio.h>
#include <string.h>
#include <algorithm>
#define NMax 2010
using namespace std;
const char IN[]="maxpal.in",OUT[]="maxpal.out";
const int mod=666013;
int N;
int a[NMax];
int T[3][NMax],S[3][NMax];
void solve()
{
int i,j;
for (i=0;i<N;++i)
T[2][i]=1,
S[2][i]=1;
for (i=0;i<N-1;++i)
T[1][i]=(a[i]==a[i+1])+1,
S[1][i]=(a[i]!=a[i+1])+1;
for (i=2;i<N;++i)
{
for (j=0;j+i<N;++j)
{
if (a[j]==a[j+i])
{
T[0][j]=T[2][j+1]+2;
if (T[0][j]==T[1][j+1])//lmax(st,dr)=lmax(st+1,dr)
S[0][j]= (S[2][j+1] + S[1][j+1])%mod; //nrsol(st+1,dr-1) + nrsol(st+1,dr)
else if (T[0][j]==T[1][j])//lmax(st,dr)=lmax(st,dr-1)
S[0][j]= (S[2][j+1] + S[1][j])%mod;//nrsol(st+1,dr-1) + nrsol(st,dr-1)
else//lmax(st+1,dr)<>lmax(st,dr) si lmax(st,dr-1)<>lmax(st,dr)
S[0][j]= S[2][j+1];//nrsol(st+1,dr-1)
}
else
{
T[0][j]=max(T[1][j],T[1][j+1]);
if (T[1][j+1]>T[1][j])//lmax(st+1,dr)>lmax(st,dr-1)
S[0][j]=S[1][j+1];//nrsol(st+1,dr)
else if (T[1][j+1]<T[1][j])//lmax(st+1,dr)<lmax(st,dr-1)
S[0][j]=S[1][j];//nrsol(st,dr-1)
else if (T[1][j]!=T[2][j+1])//lmax(st+1,dr)=lmax(st,dr-1)<>lmax(st+1,dr-1)
S[0][j]=(S[1][j+1]+S[1][j])%mod;//nrsol(st+1,dr)+nrsol(st,dr-1)
else
S[0][j]=(S[1][j+1]+S[1][j]+mod-S[2][j+1])%mod;//nrsol(st+1,dr)+nrsol(st,dr-1)-nrsol(st+1,dr-1)
}
}
memcpy(T[2],T[1],sizeof(T[2]));
memcpy(T[1],T[0],sizeof(T[1]));
memset(T[0],0,sizeof(T[0]));
memcpy(S[2],S[1],sizeof(S[2]));
memcpy(S[1],S[0],sizeof(S[1]));
memset(S[0],0,sizeof(S[0]));
}
}
int main()
{
int i;
freopen(IN,"r",stdin);
scanf("%d",&N);
for (i=0;i<N;++i)
scanf("%d",a+i);
fclose(stdin);
solve();
freopen(OUT,"w",stdout);
printf("%d %d\n",T[1][0],S[1][0]);
fclose(stdout);
return 0;
}