#include<cstdio>
const int N=100000;
int v[N+1];
int u[N+1];
int from[N+1];
int res[N+1];
int nres;
int n,m;
int bsearch(int x){
int p=1<<17;
int pos=0;
while(p){
if(pos+p<=m)
if(v[u[pos+p]]<x)
pos+=p;
p/=2;
}
return pos;
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
for(int i=1;i<=n;i++){
int p=bsearch(v[i]);
if(v[u[p+1]]>v[i]||p==m)
u[p+1]=i;
if(p==m)
m++;
from[i]=u[p];
}
printf("%d\n",m);
int node=u[m];
while(node){
res[++nres]=node;
node=from[node];
}
for(int i=m;i>=1;i--)
printf("%d ",v[res[i]]);
return 0;
}