#include<stdio.h>
#include<malloc.h>
#include<algorithm>
#define mx(a, b) (lg[a] > lg[b]? a : b)
#define max(a, b) (a > b? a : b)
using namespace std;
void modify(int *tree, int poz, int val, int cur, int st, int dr, int *lg)
{
int m = (dr + st)>>1;
if(dr == st)
{
tree[cur] = val;
}
else
{
if(poz<=m)
{
modify(tree, poz, val, 2*cur, st, m, lg);
}
else
{
modify(tree, poz, val, 2*cur+1, m+1, dr, lg);
}
tree[cur] = mx(tree[cur*2], tree[cur*2+1]);
}
}
int interogate(int *tree, int s, int d, int cur, int st, int dr, int *lg)
{
if(s <= st && d >= dr)
{
return tree[cur];
}
else
{
int m = (st + dr) >> 1;
if(s <= m)
{
if(d > m)
{
int a = interogate(tree, s, d, 2 * cur, st, m, lg), b = interogate(tree, s, d, 2 * cur + 1, m+1, dr, lg);
return mx(a,b);
}
else
{
return interogate(tree, s, d, 2 * cur, st, m, lg);
}
}
else
{
return interogate(tree, s, d, 2 * cur + 1, m+1, dr, lg);
}
}
}
void printData(int i, int *sir, int *sirSortat, int *prev)
{
if(i)
{
printData(prev[i], sir, sirSortat, prev);
printf("%d ", sirSortat[sir[i]]);
}
}
int main()
{
int *sir, *sirSortat, *arbInt, *prec, *lengths;
int n, m = 1;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
sir = (int*) calloc(n + 1, sizeof(int));
sirSortat = (int*) calloc(n + 1, sizeof(int));
prec = (int*) calloc(n + 1, sizeof(int));
lengths = (int *) calloc(n + 1, sizeof(int));
for(int i = 1; i <= n; i++)
{
scanf("%d", sir + i);
sirSortat[i] = sir[i];
}
sort(sirSortat + 1, sirSortat + n + 1);
for(int i = 2; i <= n; i++)
if(sirSortat[i] != sirSortat[i-1])
sirSortat[++m] = sirSortat[i];
arbInt = (int*) calloc(4 * m + 1, sizeof(int));
for(int i = 1; i <= n; i++)
sir[i] = lower_bound(sirSortat + 1, sirSortat + m + 1, sir[i]) - sirSortat;
int imax = 0;
for(int i = 1; i <= n; i++)
{
prec[i] = sir[i] > 1 ?interogate(arbInt, 1, sir[i] - 1, 1, 1, m, lengths) : 0;
lengths[i] = lengths[prec[i]] + 1;
modify(arbInt, sir[i], i, 1, 1, m, lengths);
if(lengths[i] > lengths[imax])
imax = i;
}
printf("%d\n", lengths[imax]);
printData(imax, sir, sirSortat, prec);
printf("\n");
return 0;
}