#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int n, m, i, j, k, ok ,minim ,maxim;
int v[100001], w[100001], nr, t[100001];
int a, b, mid, vec[100001];
int main(){
fin >> n;
for(i = 1; i <= n; i ++)
fin >> v[i];
//v e vectorul initial
//w = vectorul de valori
//t = vectorul de pozitii in care ne inroarcem
w[1] = 1; nr = 1;
for(i = 2; i <= n; i ++){
if(v[i] > v[w[nr]]){
nr ++;
w[nr] = i;
t[i] = w[nr - 1];
}
else{
a = 1;
b = nr;
while(a <= b){
mid = (a + b) / 2;
if(v[w[mid]] >= v[i])
b = mid - 1;
else
a = mid + 1;
}
if (v[i] > v[w[a-1]]) {
w[a] = i;
t[i] = w[a - 1];
}
}
}
fout << nr << "\n";
i = w[nr];
while(i != 0){
vec[++k] = i;
i = t[i];
}
for(i = k; i > 0; i --)
fout << v[vec[i]] << " ";
return 0;
}