#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100005], p[100005], v[100005], lgv;
void citire() {
f >> n;
for (int i = 1; i <= n; ++i)
f >> a[i];
}
int cautare_binara(int nr) {
int st = 1, dr = lgv, mij;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[mij] < nr)
st = mij + 1;
else
dr = mij - 1;
}
return st;
}
void parcurgere() {
for (int i = 1; i <= n; ++i) {
p[i] = cautare_binara(a[i]);
v[p[i]] = a[i];
lgv = max(lgv, p[i]);
}
}
void afisare(int nr, int poz) {
if (nr == 0)
return;
for (int i = poz;; i--)
if (p[i] == nr) {
afisare(nr - 1, i - 1);
g << a[i] << ' ';
return;
}
}
int main() {
citire();
parcurgere();
g << lgv << '\n';
afisare(lgv, n);
return 0;
}