#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100001], s[100001], p[100001], k = 1;
int stv[100001];
int cb(int ind)
{
//caut binar val astfel incat val >= s[i], i minim
int st = 1, dr = k, mij;
while (st <= dr)
{
mij = (st+dr)>>1;
if (a[s[mij]] >= a[ind])
dr = mij - 1;
else
st = mij + 1;
}
return st;
}
int main()
{
int i, n, poz, j;
fin >> n;
for (i = 1; i<=n; i++)
fin >> a[i];
p[1] = -1;
s[1] = 1;
for (i = 2; i<=n; i++)
{
if (a[i] > a[s[k]])
{
p[i] = s[k];
k++;
s[k] = i;
}
else
{
poz = cb(i);
p[i] = s[poz-1];
s[poz] = i;
}
}
fout << k << '\n';
for (i = s[k], j = 1; j<=k; i=p[i], j++)
stv[j] = a[i];
for (i = k; i>=1; i--)
fout << stv[i] << ' ';
return 0;
}