#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100005
vector <int> V;
vector <int>::reverse_iterator it;
int n,x,k,st,dr,mij,Lmax,a[NMAX],v[NMAX],p[NMAX];
int main()
{
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&x);
a[i]=x;
if (x>v[k]) v[++k]=x, p[i]=k;
else
{
st=1, dr=k;
while (st<=dr)
{
mij=(st+dr)>>1;
if (v[mij]>=x) dr=mij-1;
else st=mij+1;
}
v[st]=x, p[i]=st;
}
if (k>Lmax) Lmax=k;
}
printf("%d\n",Lmax);
for (i=n;i>0 && Lmax;--i)
if (p[i]==Lmax)
{
V.push_back(a[i]);
--Lmax;
}
for (it=V.rbegin();it!=V.rend();++it)
printf("%d ",*it);
printf("\n");
return 0;
}