#include <iostream>
#include <memory>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
#define MAXN 100001
#define ull unsigned long long
ull nums[MAXN];
bool used[MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N;
ull M;
cin >> N >> M;
/* 變進制數初始化 */
for (int i = 0; i < N; ++i) {
cin >> nums[i];
int k = 0;
for (int j = 0; j < nums[i]; ++j) {
if (used[j]) {
continue;
}
++k;
}
used[nums[i] - 1] = true;
nums[i] = k - 1;
}
/* 加上M */
ull carry = M;
for (int i = N - 2; i >= 0; --i) {
nums[i] += carry;
int base = N - i;
carry = nums[i] / base;
nums[i] %= base;
}
/* 再變回來 */
memset(used, false, sizeof(used));
for (int i = 0; i < N; ++i) {
int j = 0;
for (int k = 0; j < N && k <= nums[i]; ++j) {
if (used[j]) {
continue;
}
++k;
}
used[j - 1] = true;
if (N - 1 == i) {
cout << j << endl;
}
else {
cout << j << ' ';
}
}
return 0;
}
康託展開的另一種實現方法