#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ifstream ifs("scmax.in");
ofstream ofs("scmax.out");
int nn;
ifs >> nn;
vector<uint32_t> a;
for (int ii = 0; ii < nn; ++ii)
{
uint32_t x;
ifs >> x;
a.push_back(x);
}
vector<uint32_t> lis(a.size());
vector<int32_t> prev(a.size());
int const SEQUENCE_STARTER = -1;
for (int ii = 0; ii < nn; ++ii)
{
lis[ii] = 1;
prev[ii] = SEQUENCE_STARTER;
for (int jj = 0; jj < ii; ++jj)
{
if (a[ii] > a[jj] && lis[jj] + 1 > lis[ii])
{
lis[ii] = lis[jj] + 1;
prev[ii] = jj;
}
}
}
vector<uint32_t> sol;
uint32_t longest = 1;
int last = 0;
for (int ii = 0; ii < nn; ++ii)
{
if (lis[ii] > longest)
{
longest = lis[ii];
last = ii;
}
}
ofs << longest << endl;
for (int ii = last; ii != SEQUENCE_STARTER; ii = prev[ii])
{
sol.push_back(a[ii]);
}
for (int ii = longest; ii > 0; --ii)
{
ofs << sol[ii - 1] << " ";
}
return 0;
}