#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N=1e5+5;
int n, v[N], m[N], p[N], lmax;
void afis(int x)
{
if(p[x]!=-1) afis(p[x]);
fout<<v[x]<<" ";
}
int main()
{
fin>>n;
for(int i=0;i<n;++i)
fin>>v[i];
m[0]=-1;
for(int i=0;i<n;++i)
{
int l=1, r=lmax;
while(l<=r)
{
int mid=ceil((l+r)/2);
if(v[i]>v[m[mid]])
l=mid+1;
else
r=mid-1;
}
m[l]=i;
p[i]=m[l-1];
lmax=max(lmax, l);
}
fout<<lmax<<'\n';
afis(m[lmax]);
return 0;
}