#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, v[100005], pr[100005], ind[100005],sol[100005];
int main()
{
int l=0, poz=0, st, dr, mij;
in>>n;
for(int i=1; i<=n; i++)
in>>v[i];
ind[0]=0;
for(int i=1; i<=n; i++)
{
st=1;
dr=l;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[i] > v[ind[mij]]) st=mij+1;
else dr=mij-1;
}
pr[i]=ind[st-1];
ind[st]=i;
if(st>=l)
{
poz=i;
l=st;
}
}
out<<l<<'\n';
int k=0;
while(poz)
{
k++;
sol[k]=v[poz];
poz=pr[poz];
}
for(k; k>0; k--)
out<<sol[k]<<" ";
return 0;
}