#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100009], sclm[100009], prev1[100009];
void afis (int x)
{
if (prev1[x]==0)
{
g << v[x]<< ' ';
return;
}
afis (prev1[x]);
g << v[x] <<' ';
}
signed main ()
{
int n;
f >> n;
for (int i=1; i<=n; i++)
f >> v[i];
int cnt=0;
sclm[++cnt]=1;
for (int i=2; i<=n; i++)
{
int st=1, dr=cnt, retine=cnt+1;
while (st<=dr)
{
int mij=(st+dr)/2;
if (v[sclm[mij]]>=v[i])
{
retine=mij;
dr=mij-1;
}
else st=mij+1;
}
sclm[retine]=i;
prev1[i]=sclm[retine-1];
if (retine>cnt)
cnt++;
}
g << cnt << '\n';
afis (sclm[cnt]);
}