#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
using pd = pair<double, double>;
using pld = pair<ld, ld>;
// #define LOCAL
#ifdef LOCAL
ifstream cin("input.txt");
ofstream cout("output2.txt");
#else
ifstream cin("scmax.in");
ofstream cout("scmax.out");
#endif
#define cin ::cin
#define cout ::cout
int main()
{
int N;
cin >> N;
vector<int> nrs(N);
for (int i = 0; i < N; ++i)
{
cin >> nrs[i];
}
const int INF = 2.1e9;
vector<int> dp(N, INF), prev(N, -1);
dp[0] = -INF;
unordered_map<int, int> idxs;
int max_len{};
for (int i = 0; i < N; ++i)
{
const int j = upper_bound(begin(dp), end(dp), nrs[i]) - begin(dp);
if (dp[j - 1] < nrs[i] && nrs[i] < dp[j])
{
dp[j] = nrs[i];
if (j > 1)
{
prev[i] = idxs[dp[j - 1]];
}
max_len = max(max_len, j);
idxs[nrs[i]] = i;
}
}
stack<int> LIS;
for (int i = idxs[dp[max_len]]; ~i; i = prev[i])
{
LIS.emplace(nrs[i]);
}
for (cout << max_len << "\n"; !LIS.empty() && cout << LIS.top() << " "; LIS.pop())
;
}