#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
long long v[100005];
int d[100005];
int pr[100005];
int main(){
f >> n;
for(int i=1;i<=n;i++) f>>v[i];
int len = 0;
d[0] = 0;
int lo, hi, mid;
for(int i=1;i<=n;i++){
lo = 1; hi = len;
while(lo <= hi){
mid = (lo+hi)/2;
if(v[d[mid]] < v[i]) lo = mid+1;
else hi = mid-1;
}
pr[i] = d[lo-1];
d[lo] = i;
if(lo > len) len = lo;
}
g << len << "\n";
long long aux[100005];
int k=0;
int idx = d[len];
while(idx!=0){
aux[k++]=v[idx];
idx=pr[idx];
}
for(int i=k-1;i>=0;i--) g<<aux[i]<<" ";
return 0;
}