#include <iostream>
#include <vector>
#include <climits>
using namespace std;
typedef long long ll;
const ll INF = (ll)1e18;
int main() {
int n;
ll k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
vector<ll> dp(n, 1); // dp[i] — количество возрастающих подпоследовательностей, начинающихся с i
// Считаем dp[i] — начиная с конца
for (int i = n - 1; i >= 0; --i) {
for (int j = i + 1; j < n; ++j) {
if (a[j] > a[i]) {
dp[i] += dp[j];
if (dp[i] >= INF) dp[i] = INF;
}
}
}
vector<int> result;
ll remaining_k = k;
int last = INT_MIN;
int pos = 0;
while (remaining_k > 0 && pos < n) {
for (int i = pos; i < n; ++i) {
if (a[i] <= last) continue;
// считаем сколько последовательностей начинается с i, и соответствуют условиям
ll count = dp[i];
if (remaining_k > count) {
remaining_k -= count;
} else {
result.push_back(a[i]);
last = a[i];
pos = i + 1;
remaining_k--; // одна подпоследовательность выбрана
break;
}
}
}
cout << result.size() << endl;
for (int x : result) cout << x << " ";
cout << endl;
return 0;
}