#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream h("scmax.in");
ofstream g("scmax.out");
vector<int> a, b;
int t[100020], n;
void cmlsc(){
int c=0, f=0, l=0;
b.push_back(0);
t[0]=0;
for(int i=1; i<a.size(); i++){
if(a[i]>a[b.back()]){
t[i]=b.back();
b.push_back(i);
}
for(f=0, l=b.size()-1; f<l;){
c=(f+l)/2;
if(a[i]>a[b[c]])f=c+1; else l=c-1;
}
if(a[i]<a[b[l]]){
b[l]=i;
t[i]=l;
}
}
for(l=b.size(), f=b.back(); l--; f=t[f])b[l]=f;
}
int main()
{
h>>n;
for(int i=1; i<=n; i++){
int x;
h>>x;
a.push_back(x);
}
cmlsc();
g<<b.size()<<"\n";
for(int i=0; i<b.size(); i++)g<<a[b[i]]<<" ";
return 0;
}