#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef size_t ull;
typedef vector<int> vc;
typedef vector<vector<int>> matrix;
#define ft(n) for(int i=1; i<=n; i++)
#define sp ' '
#define vx first
#define vy second
string file = "scmax";
ifstream f(file + ".in");
ofstream g(file + ".out");
int n;
vector<int> v, dp, parents;
void init()
{
f >> n;
v.resize(n + 1, 0);
dp.resize(n + 1, 0);
parents.resize(n + 1, 0);
ft(n)
f >> v[i];
}
void scmax()
{
for (int i = 1; i <= n; i++)
{
int maxx = 0;
for (int j = 1; j < i; j++)
{
if (v[j]<v[i])
if (dp[j]>maxx)
{
maxx = dp[j];
parents[i] = j;
}
}
dp[i] = maxx + 1;
}
int maxx = 0, imax=0;
for (int i = 1; i <= n; i++)
{
if (dp[i] > maxx)
maxx = dp[i], imax = i;
}
//output
g << maxx << endl;
stack<int> stk;
for (int i = imax; i; i = parents[i])
stk.push(v[i]);
while (stk.size())
{
g << stk.top() << sp;
stk.pop();
}
}
int main()
{
init();
scmax();
return 0;
}