Cod sursa(job #501838)
#include <stdio.h>
const int maxn=100001;
int i,N,a[maxn],Smax[maxn],pre[maxn],next[maxn];
void citire()
{
scanf("%d",&N);
for(i=1;i<=N;i++) scanf("%d",&a[i]);
}
void pd()
{
int j;
Smax[0]=0; pre[0]=-1;
for(i=1;i<=N;i++)
{
for(j=0;j<i;j++)
{
if(a[j]<a[i] && Smax[j]+1>Smax[i])
{
Smax[i]=Smax[j]+1;
pre[i]=j;
}
}
}
}
void constr()
{
int nr;
next[0]=nr=Smax[N];
for(i=N;pre[i]!=-1;i=pre[i])
{
next[nr--]=i;
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
citire();
pd();
constr();
printf("%d\n",Smax[N]);
for(i=1;i<=next[0];i++) printf("%d ",a[next[i]]);
}