#include #define endl '\n' using namespace std; const int MAXN = 1e5+5; const int INF = 2e9; int n, p; int b[MAXN]; int a[MAXN]; int cnt[MAXN]; int tree[4 * MAXN]; void update(int L, int R, int node, int ind) { if (ind < L || ind > R) return; if (L == R) { if (tree[node] == INF) tree[node] = 1; tree[node] += 1; return; } int mid = (L + R) / 2; update(L, mid, node * 2, ind); update(mid + 1, R, node * 2 + 1, ind); tree[node] = min(tree[node * 2], tree[node * 2 + 1]); } int main() { freopen("notdecreasing.in", "r", stdin); freopen("notdecreasing.out", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> p; for (int i = 1; i <= n; i++) cin >> b[i]; int prev = p; for (int i = 1; i <= n; i++) { if (cnt[1] < b[i]) { a[i] = 1; cnt[1]++; } else { a[i] = prev; cnt[prev]++; prev--; if (prev == 1) prev = p; } } for (int i = 1; i <= n; i++) { update(1, p, 1, a[i]); if (tree[1] != b[i]) { cout << -1 << endl; return 0; } } for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl; return 0; } /** 4 2 0 1 1 2 */