#include <cstdio>
using namespace std;
int n, x, st[100001], pos[100001], a[100001], Sol[100001];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int L = 0;
for(int i = 1; i <= n ; ++i){
scanf("%d", &x);
a[i] = x;
if(x > st[L]) {pos[i] = L + 1; st[++L] = x;}
else{
int p = 1, dr = L;
while(p <= dr){
int mij = (p + dr) / 2;
if(st[mij] > x) dr = mij - 1;
else p = mij + 1;
}
if(p <= L) st[p] = x, pos[i] = L;
}
}
printf("%d\n", L);
int aux = L;
for(int i = n; i >= 1 ; --i)
if(pos[i] == L) Sol[L--] = a[i];
for(int i = 1; i <= aux ; ++i)
printf("%d ", Sol[i]);
return 0;
}