#include <iostream>
#include <fstream>
using namespace std;
const int Nmax = 100000;
int dataString[Nmax];
int best[Nmax];
int sol[Nmax];
int pre[Nmax];
int n;
int lastindex;
int maxindex;
void readData();
void writeData();
void initData();
void doDynamic();
void doSol();
int main()
{
initData();
readData();
doDynamic();
doSol();
writeData();
return 0;
}
void readData()
{
ifstream inFile ("scmax.in");
inFile >> n;
for(int i=0; i<n; i++)
{
inFile >> dataString[i];
}
inFile.close();
}
void initData()
{
for(int i=0; i<Nmax; i++)
{
best[i] = 0;
}
best[0] = 1;
pre[0] = -1;
lastindex = 0;
}
void writeData()
{
ofstream outFile ("scmax.out");
outFile << maxindex << '\n';
for(int i=maxindex-1; i>=0; i--)
{
outFile << sol[i] << " " ;
}
outFile.close();
}
void doSol()
{
int i = lastindex;
int k = 0;
while(i!= -1)
{
sol[k] = dataString[i];
i = pre[i];
k++;
}
}
void doDynamic()
{
maxindex =-1;
for(int i=1; i<n; i++)
{
best[i] = 1;
pre[i] = -1;
for(int j=0; j<i; j++)
{
if(dataString[i] > dataString[j] && best[i] <= best[j])
{
best[i] = best[j] +1;
pre[i] = j;
}
if(best[i] > maxindex)
{
maxindex = best[i];
lastindex = i;
}
}
}
}