#include <fstream>
#include<vector>
#define NMAX 100005
#define FOR(i,a,b) for(int i= a; i<=b; i++)
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[NMAX],best[NMAX], pre[NMAX];
vector<int> ssol;
int N;
//best[i] = lungimea maxima a unui subsir crescator care se termina pe pozitia i
int main()
{
fin>>N;
FOR(i,1,N)
{
fin>>a[i];
}
fin.close();
best[1] = 1;
int sol = 1, psol = 1;
FOR(i,2,N)
{
best[i] = 1;
FOR(j,1,i-1)
if(a[j]<a[i] && 1+best[j] > best[i])
{
best[i] = 1+best[j];
pre[i] = j;
}
if(best[i] > sol)
{
sol = best[i];
psol = i;
}
}
ssol.push_back(a[psol]);
while(pre[psol])
{
psol = pre[psol];
ssol.push_back(a[psol]);
}
fout<<ssol.size()<<'\n';
for(int i = ssol.size()-1; i>=0;i--)
fout<<ssol[i]<<" ";
fout<<'\n';
return 0;
}