#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMAX], pd[NMAX], t[NMAX];
void afis(int x)
{
if(t[x])
afis(t[x]);
g << v[x] << ' ';
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i)
f >> v[i];
int k = 1; pd[k] = 1;
for(int i = 2; i <= n; ++i)
{
int st = 1, dr = k, m = 0;
while(st <= dr)
{
m = (st + dr) / 2;
if(v[pd[m]] < v[i]) st = m + 1;
else dr = m - 1;
}
if(st > k) k++;
pd[st] = i;
t[i] = pd[st - 1];
}
g << k << '\n';
afis(pd[k]);
f.close();
g.close();
return 0;
}