//HighFlow
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <fstream>
#include <string.h>
#include <cmath>
#include <algorithm>
#define fcat(c) while (c!='\n') fscanf(f,"%c",&c)
#define cat(c) while (c!='\n') scanf("%c",&c)
#define For(i,st,dr,k) for (int i=st;i<=dr;i+=k)
#define ll (long long)
using namespace std;
FILE *f,*g;
int v[100100],q[100100],p[100100];
int mx,n,i,cn,sol;
void rec(int ind,int x)
{
if (x==0) return;
while (p[ind]!=x) ind--;
rec(ind,x-1);
fprintf(g,"%d ",v[ind]);
}
void caut(int st,int dr,int x)
{
if(st<=dr)
{
int m=(st+dr)/2;
if (q[m]<x)
{
mx=max(m,mx);
caut(m+1,dr,x);
}
else
caut(st,m-1,x);
}
}
int main()
{
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
sol=1;
for (i=1;i<=n;i++)
{
mx=0;
caut(1,cn,v[i]);
p[i]=mx+1;
q[mx+1]=v[i];
cn=max(cn,mx+1);
sol=max(sol,mx+1);
}
fprintf(g,"%d\n",sol);
rec(n,sol);
return 0;
}