#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
const int NMAX = 100000;
int n, a[NMAX + 1], s[NMAX + 1], sl, p[NMAX + 1];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
if(s[sl] < a[i]) {
s[++sl] = a[i];
p[i] = sl;
} else {
p[i] = (upper_bound(s + 1, s + sl + 1, a[i]) - s);
s[p[i]] = a[i];
}
}
printf("%d\n", sl);
stack<int> ans;
for(int i = n; i; --i)
if(p[i] == sl)
ans.push(a[i]), --sl;
while(!ans.empty()) printf("%d ", ans.top()), ans.pop();
return 0;
}