#include <fstream>
#include <algorithm>
#include <map>
#include <iostream>
#define DN 100005
using namespace std;
int n,v[DN],vmin[DN],vpoz[DN],r,lst[DN];
ifstream f("scmax.in");
ofstream g("scmax.out");
void pr(int r) {
if(!r) return;
pr(lst[r]);
g<<v[r]<<' ';
}
int main() {
f>>n;
for(int i=1; i<=n; ++i) vmin[i]=(1LL<<31)-1;
for(int i=1; i<=n; ++i) {
f>>v[i];
int pz=lower_bound(vmin,vmin+n+1,v[i])-vmin;
//cerr<<v<<' '<<pz<<' '<<vmin[pz-1]<<' '<<'\n';
if(pz<=n) {
if(vmin[pz]<v[i]) continue;
lst[i]=vpoz[pz-1];
vmin[pz]=v[i];
vpoz[pz]=i;
r=max(r,pz);
}
}
g<<r<<'\n';
pr(vpoz[r]);
}