#include<fstream>
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
#define N 100005
int maxx,ultim[N],nxt[N],v[N];
int cautbin(int val)
{
int st=0,fin=maxx,mid,poz=0;
while(fin>=st)
{
mid=(fin+st+1)>>1;
if(ultim[mid]==0||v[ultim[mid]]>=val)
fin=mid-1;
else
{
poz=mid;
st=mid+1;
}
}
return poz;
}
int main()
{
ifstream si;
si.open("scmax.in");
ofstream so;
so.open("scmax.out");
int n;
si>>n;
int i,poz;
for(i=1;i<=n;++i)
{
si>>v[i];
poz=cautbin(v[i]);
nxt[ultim[poz]]=i;
ultim[poz+1]=i;
if(poz==maxx)
++maxx;
}
so<<maxx<<'\n';
poz=nxt[0];
while(poz)
{
so<<v[poz]<<' ';
poz=nxt[poz];
}
so<<'\n';
si.close();
so.close();
return 0;
}