#include <fstream>
#include <vector>
using namespace std;
#define NMax 100005
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int P[NMax],p;
int D[NMax];
int v[NMax];
vector<int> sol;
int bs(int x)
{
int j,step;
for(step=1;step<=p;step<<=1);
for(j=0;step;step>>=1)
if(j+step <= p && P[j+step] <= x) j+=step;
return j;
}
int main()
{
int i,a,poz;
f>>n;
for(i=1;i<=n;++i)
{
f>>a;
v[i] = a;
if(a > P[p])
{
P[++p] = a;
D[i] = p;
}
else
{
poz = bs(a);
if(P[poz] != v[i]) ++poz;
if(a < P[poz]) P[poz] = a;
D[i] = poz;
}
}
g<<p<<"\n";
for(i=n;i>=1;--i) if(D[i] == p)
{
--p;
sol.push_back(i);
}
for(i=sol.size()-1;i>=0;--i) g<<v[sol[i]]<<" "; g<<"\n";
f.close();
g.close();
return 0;
}