#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N = 100000;
int n, v[N], p[N], m[N], lmax;
int bs(int x, int lo, int hi)
{
while(lo<=hi)
{
int mid = ceil((lo+hi)/2);
if(v[m[mid]]<x)
lo = mid+1;
else
hi = mid-1;
}
return lo;
}
void afis(int i)
{
if(p[i]!=-1) afis(p[i]);
fout<<v[i]<<" ";
}
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 = bs(v[i], 1, lmax);
p[i] = m[l-1];
m[l] = i;
lmax = max(lmax, l);
}
fout<<lmax<<'\n';
afis(m[lmax]);
return 0;
}