Let A = {a1, a2, ..., an} be any permutation of the first n natural numbers {1, 2, ..., n}. You are given a positive integer k and another sequence B = {b1, b2, ..., bn}, where bi is the number of elements aj in A to the left of the element at = i such that aj ≥ (i + k).

For example, if n = 5, a possible A is {5, 1, 4, 2, 3}. For k = 2, B is given by {1, 2, 1, 0, 0}. But if k = 3, then B = {1, 1, 0, 0, 0}.

For two sequences X = {x1, x2, ..., xn} and Y = {y1, y2, ..., yn}, let i-th elements be the first elements such that xi ≠ yi. If xi < yi, then X is lexicographically smaller than Y, while if xi > yi, then X is lexicographically greater than Y.

Given n, k and B, you need to determine the lexicographically smallest A.

Input

The first line contains two space separated integers n and k (1 ≤ n ≤ 1000, 1 ≤ k ≤ n). On the second line are n integers specifying the values of B = {b1, b2, ..., bn}.

Output

Print on a single line n integers of A = {a1, a2, ..., an} such that A is lexicographically minimal. It is guaranteed that the solution exists.

Examples

Input

5 2
1 2 1 0 0


Output

4 1 5 2 3 

Input

4 2
1 0 0 0


Output

2 3 1 4 
#include <bits/stdc++.h>
using namespace std;
int tree[600000], a, b, k, n, caso = 1;
char com[100];
void update(int at, int begin, int end) {
  if (a < begin || a > end) {
  } else if (begin == end) {
    tree[at] = b;
  } else {
    int fio = (at << 1) + 1;
    update(fio, begin, (begin + end) >> 1);
    update(fio + 1, ((begin + end) >> 1) + 1, end);
    tree[at] = tree[fio] + tree[fio + 1];
  }
}
int query(int at, int begin, int end) {
  if (a > end || b < begin) {
    return 0;
  }
  if (begin >= a && end <= b) return tree[at];
  int fio = (at << 1) + 1;
  return query(fio, begin, (begin + end) >> 1) +
         query(fio + 1, ((begin + end) >> 1) + 1, end);
}
int bs[1010];
bool usado[1010];
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &bs[i]);
  }
  int aux;
  int saida[1010];
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; ++j) {
      if (usado[j]) continue;
      a = j + k;
      b = n;
      aux = query(0, 1, n);
      if (aux == bs[j]) {
        usado[j] = true;
        saida[i] = j;
        a = j;
        b = 1;
        update(0, 1, n);
        break;
      }
    }
  }
  printf("%d", saida[1]);
  for (int i = 2; i <= n; ++i) {
    printf(" %d", saida[i]);
  }
  printf("\n");
  return 0;
}
