#include <cstdio>
using namespace std;
int a[100010];
int v[100010];
int p[100010];
int sol[100010];
int n, lmax;
int cautare_binara(int poz, int x, int l){
int i;
for(i=poz;l;l>>=1)
if(i - l >=0 && v[i - l] >= x)
i-=l;
return i;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int lg=1;
int pozlmax=0;
for(int i=0; i<n; i++){
scanf("%d", &a[i]);
if(i>lg)
lg<<=1;
int poz=cautare_binara(lmax,a[i],lg);
if(poz==lmax){
lmax=poz+1;
pozlmax=i;
}
v[poz]=a[i];
p[i]=poz;
v[lmax]=10000000;
}
printf("%d\n", lmax);
// for(int i=0; i<=lmax; i++)
// printf("%d ", v[i]);
// printf("\n");
// for(int i=0; i<n; i++)
// printf("%d ", p[i]);
//
// printf("\n");
int auxxlmax=lmax;
lmax--;
for(int i=pozlmax; i>=0; i--){
if(p[i]==lmax)
{
sol[lmax]=a[i];
lmax--;
}
}
for(int i=0; i<auxxlmax; i++)
printf("%d ", sol[i]);
return 0;
}