#include <stdio.h>
#define NMAX 100000
int v[NMAX], m[NMAX], p[NMAX], sol[NMAX];
int main()
{
FILE *fin, *fout;
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
int N;
fscanf(fin, "%d", &N);
int i;
for (i = 0; i < N; ++i) {
fscanf(fin, "%d", v + i);
}
int ss = 0;
for (i = 0; i < N; ++i) {
int l = 1, r = ss + 1;
while (l < r) {
int med = (l + r) / 2;
if (v[m[med]] < v[i]) {
l = med + 1;
} else {
r = med;
}
}
p[i] = m[l - 1];
m[l] = i;
if (l > ss) {
ss = l;
}
}
fprintf(fout, "%d\n", ss);
int pos = m[ss];
i = ss;
for (i = ss - 1; i >= 0; --i) {
sol[i] = v[pos];
pos = p[pos];
}
for (i = 0; i < ss; ++i) {
fprintf(fout, "%d ", sol[i]);
}
fclose(fin);
fclose(fout);
return 0;
}