#include<fstream>
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
#define N 100005
int maxx,ultim[N],pred[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]);
pred[i]=ultim[poz];
ultim[poz+1]=i;
if(poz==maxx)
++maxx;
}
so<<maxx<<'\n';
poz=ultim[maxx];
i=1;
while(poz)
{
ultim[i++]=v[poz];
poz=pred[poz];
}
while(--i)
{
so<<ultim[i]<<' ';
}
so<<'\n';
si.close();
so.close();
return 0;
}