#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
//varianta O(n^2)
int a[100001], dp[100001], p[100001];
int s[100001];
//dp[i] = lungimea celui mai lung subsir strict crescator care se termina in i
//p[i] = -1, daca i este primul termen al sirului
// j, (j<i) pentru care obtin maximul
int main()
{
int i, j, n, imax;
fin >> n;
for (i = 1; i<=n; i++)
fin >> a[i];
dp[1] = 1;
p[1] = -1;
for (i = 2; i<=n; i++)
{
dp[i] = 1;
p[i] = -1;
for (j = i-1; j>=1; j--)
if (a[i] > a[j] && dp[j]+1 > dp[i])
{
dp[i] = dp[j]+1;
p[i] = j;
}
}
imax = 1;
for (i = 2; i<=n; i++)
if (dp[i] > dp[imax])
imax = i;
fout << dp[imax] << '\n';
for (i = imax, j = 1; i!=-1; i=p[i], j++)
s[j] = i;
for (i = dp[imax]; i>=1; i--)
fout << a[s[i]] << ' ';
return 0;
}