#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]=(1LL<<31)-1;
for(int i=1; i<=n; ++i) {
f>>v;
int pz=lower_bound(vmin,vmin+n+1,v)-vmin;
//cerr<<v<<' '<<pz<<' '<<vmin[pz-1]<<' '<<'\n';
if(pz<=n) {
if(vmin[pz]<v) continue;
lst[v]=vmin[pz-1];
vmin[pz]=v;
r=max(r,pz);
}
}
g<<r<<'\n';
pr(vmin[r]);
}