#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int check(std::vector<int>& dp, std::vector<int>& v, int Max, int x) {
int l = 0, r = Max;
int ans = -1;
while (l <= r) {
int m = (l + r) / 2;
if (v[dp[m]] < x || l == 0) {
ans = max(ans, m);
l = m + 1;
} else {
r = m - 1;
}
}
return ans;
}
void print(std::vector<int>& prev, std::vector<int>& v, int pos) {
if (pos == -1) {
return;
}
print(prev, v, prev[pos]);
out << v[pos] << " ";
}
int main() {
int n;
in >> n;
std::vector<int> v(n, 0);
for (int i = 0; i < n; i++)
in >> v[i];
std::vector<int> dp(n + 1, 1e9);
std::vector<int> prev(n + 1, -1);
dp[0] = -1;
int Max = 0;
int pmax = 0;
for (int i = 0; i < n; i++) {
int pos = check(dp, v, Max, v[i]);
dp[pos + 1] = i;
prev[i] = dp[pos];
if (pos + 1 > Max) {
Max = pos + 1;
pmax = i;
}
}
out << Max << '\n';
print(prev, v, pmax);
}