#include <fstream>
#include <vector>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int n,v[100005],i,k,a[100005],sol[100005],tata[100005];
int cautbinar(int x){
int st=1,dr=k,sol=0;
while(st<=dr){
int mij=(st+dr)/2;
if(v[a[mij]]>=x){
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
if(sol==0)
sol=++k;
return sol;
}
int main()
{
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
int p=cautbinar(v[i]);
a[p]=i;
tata[i]=a[p-1];
}
fout<<k<<'\n';
int t=a[k];
for(i=1;i<=k;i++){
sol[i]=t;
t=tata[t];
}
for(i=k;i>0;i--)
fout<<v[sol[i]]<<' ';
return 0;
}