#include <stdio.h>
#include <stdlib.h>
#define NMAX 100000
FILE *fin, *fout;
int v[NMAX], s[NMAX], pred[NMAX];
void write( int p ) {
if( p > -1 ) {
write( pred[p] );
fprintf( fout, "%d ", v[p] );
}
}
int main() {
int n, i, l, lmax, st, dr, mijl;
fin = fopen( "scmax.in", "r" );
fscanf( fin, "%d", &n );
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
fclose( fin );
lmax = 0;
for( i = 0; i < n; i++ ) {
st = 0;
dr = lmax - 1;
while( dr - st > 1 ) {
mijl = ( st + dr ) / 2;
if( v[s[mijl]] > v[i] )
dr = mijl;
else
st = mijl;
}
if( v[s[st]] < v[i] )
st++;
if( v[s[dr]] < v[i] )
st = dr + 1;
l = st;
s[l] = i;
if( l > 0 )
pred[i] = s[l-1];
else
pred[i] = -1;
if( l + 1 > lmax )
lmax = l + 1;
}
fout = fopen( "scmax.out", "w" );
fprintf( fout, "%d\n", lmax );
write( s[lmax-1] );
fclose( fout );
return 0;
}