#include <fstream>
using namespace std;
#define MAX 100005
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int n;
int v[MAX];
int best[MAX];
int f[MAX];
int rez[MAX];
int k = 0;
int cb(int nr)
{
int st = 1;
int dr = k;
int poz = 0;
while (st <= dr)
{
int mij = (st + dr) >> 1;
if (v[best[mij]] < nr)
{
poz = mij;
st = mij + 1;
} else dr = mij - 1;
}
return poz;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
for (int i = 1; i <= n; i++)
{
int poz = cb(v[i]);
best[poz + 1] = i;
if (poz == k)
{
k++;
}
f[i] = best[poz];
}
cout << k << '\n';
int a = best[k];
int d = 0;
while(a != 0)
{
rez[++d] = v[a];
a = f[a];
}
for (int i = d; i >= 1; i--)
{
cout << rez[i] << " ";
}
}