#include #include #include #include #include using namespace std; const int lim = 100; int main() { int N, K; cin >> N >> K; vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } vector cnt(lim); for (int i = 0; i < N; ++i) { ++cnt[A[i]]; } vector > g; g.push_back(vector()); vector cur; for (int i = lim - 1; i >= 10; --i) { if (i % 11 != 0 || cnt[i / 11] == 0) { for (int j = 0; j < cnt[i]; ++j) { cur.push_back(i); g.push_back(cur); } } else { for (int j = 0; j < cnt[i]; ++j) { cur.push_back(i / 11); g.push_back(cur); cur.pop_back(); cur.push_back(i); g.push_back(cur); } for (int j = 0; j < cnt[i / 11]; ++j) { cur.push_back(i / 11); g.push_back(cur); } } } reverse(g.begin(), g.end()); vector ans; for (vector v : g) { vector rc = cnt; for (int i : v) { --rc[i]; } int sum = 0; for (int i = 0; i < lim; ++i) { sum += rc[i]; } vector arr; for (int i = 1; i <= 9; ++i) { int rem = sum - rc[i] - rc[i * 11]; int t = rc[i]; for (int j = rc[i] - 2; j >= rem; j -= 2) { arr.push_back(i * 11); t = j; } for (int j = 0; j < t; ++j) { arr.push_back(i); } } for (int i = 10; i < lim; ++i) { for (int j = 0; j < rc[i]; ++j) { arr.push_back(i); } } sort(arr.begin(), arr.end()); set st; do { string s; for (int i : arr) { s += to_string(i); } st.insert(s); } while (next_permutation(arr.begin(), arr.end())); if (st.size() >= K) { string prefix; for (int i : v) { prefix += to_string(i); } vector w(st.begin(), st.end()); reverse(w.begin(), w.end()); for (int i = 0; i < K; ++i) { ans.push_back(prefix + w[i]); } break; } } for (string s : ans) { cout << s << '\n'; } return 0; }