#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],m[100001],p[100001];
int main()
{freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,j,L=0,newL,st,dr,mid;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",v+i);
for(i=1;i<=n;i++)
{st=1;
dr=L;
while(st<=dr)
{
mid=(st+dr)/2;
if(v[i]>v[m[mid]])st=mid+1;
else dr=mid-1;
}
newL=st;
m[newL]=i;
p[i]=m[newL-1];
if(newL>L)L=newL;
}
printf("%d\n",L);
j=m[L];
int s[L];
for(i=L;i>0;i--)
{s[i]=v[j];
j=p[j];
}
for(i=1;i<=L;i++)
printf("%d ",s[i]);
return 0;
}