#include <stdio.h>
#include <stdlib.h>
int v[100000],s[100000],r[100000];
int cautbin(int x, int e){
int b,m;
b=0;
while(b<e-1){
m=(b+e)/2;
if(v[s[m]]>x)
e=m;
else
b=m;
}
return b;
}
int corect(int j){
int i=1;
while(i<j && s[i]>s[i-1])
i++;
if(i==j)
return 1;
else
return 0;
}
int main(){
int n,i,j,max,k;
FILE *fin, *fout;
fin=fopen("scmax.in","r");
fscanf(fin,"%d",&n);
for(i=0;i<n;i++)
fscanf(fin,"%d",&v[i]);
fclose(fin);
j=1;
s[0]=0;
max=1;
for(i=1;i<n;i++){
if(v[i]>v[s[j-1]]){
s[j]=i;
j++;
} else{
if(max<j && corect(j)==1){
max=j;
for(k=0;k<j;k++){
r[k]=v[s[k]];
}
}
s[cautbin(v[i],j)]=i;
}
}
if(max<j && corect(j)==1){
max=j;
for(i=0;i<j;i++){
r[i]=v[s[i]];
}
}
fout=fopen("scmax.out","w");
fprintf(fout,"%d\n",max);
for(i=0;i<max;i++){
fprintf(fout,"%d ",r[i]);
}
fclose(fout);
return 0;
}