#include <bits/stdc++.h>
using namespace std;
#define MAXN (int)1e5
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[MAXN+1],val[MAXN+1],pr[MAXN+1];
int main() {
vector<int>sol;
int n,sz=0;
fin>>n;
val[0]=INT_MIN;
for(int i=1; i<=n; i++) {
fin>>val[i];
if(val[i]>val[v[sz]]) {
v[++sz]=i;
pr[i]=v[sz-1];
} else {
int st=1,dr=sz,mij,ind=-1;
while(st<=dr) {
mij=(st+dr)/2;
if(val[v[mij]]>=val[i]) {
dr=mij-1;
ind=mij;
} else {
st=mij+1;
}
}
if(ind>=0) {
v[ind]=i;
pr[i]=v[ind-1];
}
}
}
fout<<sz<<'\n';
int nr=v[sz];
while(nr) {
sol.push_back(val[nr]);
nr=pr[nr];
}
reverse(sol.begin(),sol.end());
for(int i=0; i<(int)sol.size(); i++) {
fout<<sol[i]<<' ';
}
return 0;
}