#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,A[Dim],Q[Dim],P[Dim],lg,cnt,L[Dim],kop;
multiset < int > S;
multiset < int > ::iterator it,copie;
int main()
{
f>>N;
for(int i=1;i<=N;i++) f>>A[i];
S.insert(A[1]);
P[++cnt]=1;
for(int i=2;i<=N;i++)
{
int x=A[i];
it=S.upper_bound(x);
if( it == S.end() && x > *(--it) )
{
P[++cnt]=S.size()+1;
S.insert(x);
}
else
{
P[++cnt]=distance(S.begin(),it)+1;
S.erase(it);
S.insert(x);
}
}
g<<S.size()<<'\n';
lg=S.size();
for(int i=cnt;i>=1 && lg > 0 ;i--)
{
if(P[i]==lg)
{
lg--;
L[++kop]=i;
}
}
for(int i=kop;i>=1;i--)
g<<A[L[i]]<<' ';
return 0;
}