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