#include <iostream>
#include <vector>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int input;
cin >> input;
int arr[1001] = {0};
int max = 1;
for (int i = 1; i <= input; i++) {
cin >> arr[i];
}
int length[1001] = {0};
fill_n(length, 1001, 1);
//int tracking[1001] = { 0 };
int max_idx = 0;
if (input == 1) {
cout << 1 <<"\n" << arr[1];
}
else {
for (int i = 1; i <= input; i++) {
for (int j = i + 1; j <= input; j++) {
if (arr[j] > arr[i]) {
if (length[i] + 1 > length[j])
length[j] = length[i] + 1;
if (max < length[j]) {
max = length[j];
max_idx = j;
//tracking[j] = i;//i번째로 가면 그 다음수를 찾을 수 있다.
}
}
}
}
cout << max << "\n";
vector <int> vec;
int i;
while (true) {
for (i = max_idx; i >= 1; i--) {
if (length[i] == max) {
vec.push_back(arr[i]);
max_idx=i-1;
break;
}
}
max--;
if (max <= 0) {
break;
}
}
for (i = vec.size() - 1; i >= 0; i--) {
cout << vec[i];
if (i != 0) {
cout << " ";
}
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKaW50IG1haW4oKSB7CgljaW4udGllKE5VTEwpOwoJY291dC50aWUoTlVMTCk7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCglpbnQgaW5wdXQ7CgljaW4gPj4gaW5wdXQ7CgoJaW50IGFyclsxMDAxXSA9IHswfTsKCWludCBtYXggPSAxOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gaW5wdXQ7IGkrKykgewoJCWNpbiA+PiBhcnJbaV07Cgl9CgoJaW50IGxlbmd0aFsxMDAxXSA9IHswfTsKCWZpbGxfbihsZW5ndGgsIDEwMDEsIDEpOwoJLy9pbnQgdHJhY2tpbmdbMTAwMV0gPSB7IDAgfTsKCWludCBtYXhfaWR4ID0gMDsKCglpZiAoaW5wdXQgPT0gMSkgewoJCWNvdXQgPDwgMSA8PCJcbiIgPDwgYXJyWzFdOwoJfQoJZWxzZSB7CgoJCWZvciAoaW50IGkgPSAxOyBpIDw9IGlucHV0OyBpKyspIHsKCQkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDw9IGlucHV0OyBqKyspIHsKCQkJCWlmIChhcnJbal0gPiBhcnJbaV0pIHsKCQkJCQlpZiAobGVuZ3RoW2ldICsgMSA+IGxlbmd0aFtqXSkKCQkJCQkJbGVuZ3RoW2pdID0gbGVuZ3RoW2ldICsgMTsKCQkJCQlpZiAobWF4IDwgbGVuZ3RoW2pdKSB7CgkJCQkJCW1heCA9IGxlbmd0aFtqXTsKCQkJCQkJbWF4X2lkeCA9IGo7CgkJCQkJCS8vdHJhY2tpbmdbal0gPSBpOy8vaeuyiOynuOuhnCDqsIDrqbQg6re4IOuLpOydjOyImOulvCDssL7snYQg7IiYIOyeiOuLpC4KCQkJCQl9CgkJCQkJCgkJCQl9CgoJCQl9CgkJfQoKCQkKCQljb3V0IDw8IG1heCA8PCAiXG4iOwoJCQoJCXZlY3RvciA8aW50PiB2ZWM7CgoJCWludCBpOwoJCXdoaWxlICh0cnVlKSB7CgkJCQoJCQkKCQkJZm9yIChpID0gbWF4X2lkeDsgaSA+PSAxOyBpLS0pIHsKCQkJCWlmIChsZW5ndGhbaV0gPT0gbWF4KSB7CgkJCQkJdmVjLnB1c2hfYmFjayhhcnJbaV0pOwoJCQkJCW1heF9pZHg9aS0xOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCW1heC0tOwoKCQkJaWYgKG1heCA8PSAwKSB7CgkJCQlicmVhazsKCQkJfQoJCX0KCgoJCWZvciAoaSA9IHZlYy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewoJCQljb3V0IDw8IHZlY1tpXTsKCQkJaWYgKGkgIT0gMCkgewoJCQkJY291dCA8PCAiICI7CgkJCX0KCQl9CgkJCgl9Cn0=