#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool inorder(int a,int b)
{
return(a>=b);
}
template<typename Iterator>
int* lcsLength(Iterator x,Iterator y,int n)
{
int *c=new int[(n+1)*(n+1)],i,j;
memset(c,0,sizeof(c));
for(i=1;i<=n;i++)
c[i*(n+1)]=0; //c[i,0]=0
for(j=1;j<=n;j++)
c[j]=0; //c[0,j]=0
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(*(x+i-1)==*(y+j-1))
c[i*(n+1)+j]=c[(i-1)*(n+1)+j-1]+1;
else if(c[(i-1)*(n+1)+j]>=c[(i)*(n+1)+j-1])
c[i*(n+1)+j]=c[(i-1)*(n+1)+j];
else
c[i*(n+1)+j]=c[(i)*(n+1)+j-1];
}
return c;
}
template<typename Iterator>
void printLcs(int *c,int n,Iterator x,Iterator y,int i,int j)
{
if(i==0||j==0)
return;
else if(*(x+i-1)==*(y+j-1))
{
printLcs(c,n,x,y,i-1,j-1);
cout<<*(x+i-1)<<" ";
}
else if(c[(i-1)*(n+1)+j]>c[(i)*(n+1)+j-1]) //若为>=号的话,输出的可能会不一样,因为相等时,序列也可能不一样
printLcs(c,n,x,y,i-1,j);
else
printLcs(c,n,x,y,i,j-1);
}
int main()
{
int* x,*c,i,*y;
int n;
while(cin>>n)
{
x=new int[n+1];
y=new int[n+1];
for(i=0;i<n;i++)
{ cin>>x[i];y[i]=x[i];}
stable_sort(y,y+n,inorder);
c=lcsLength(x,y,n);
cout<<c[n*(n+1)+n]<<endl;
printLcs(c,n,x,y,n,n);
cout<<endl;
}
delete []c;
return 0;
}