/*
    給出n,k,b[],n<=1000
    b[i]表示最后要求的一個(gè)n的排列中a[],a[t] =i的這個(gè)數(shù)左邊滿足a[j]>=i+k的個(gè)數(shù)
    求字典序最小的一個(gè)滿足上面條件排列a[]
    
    不會(huì)貪心,看了別人的
    用類似拓?fù)渑判蚰菢幼樱看螌ふ易钚〉亩襜[i] = 0的輸出,  ------------------ Orz
    然后更新b[j], b[j]-- 
    其中 i>=j+k 因?yàn)閕已經(jīng)放在前面了,自然后面的需要a[j]>=i+k的個(gè)數(shù)就少1了
*/

#include
<iostream>
#include
<cstring>
#include
<map>
#include
<algorithm>
#include
<stack>
#include
<queue>
#include
<cmath>
#include
<string>
#include
<cstdlib>
#include
<vector>
#include
<cstdio>
#include
<set>
#include
<list>
#include
<numeric>
#include
<cassert>
#include
<ctime>
#include
<bitset>

using namespace std;


int main()
{
#ifndef ONLINE_JUDGE
    freopen(
"in","r",stdin);
#endif
    
    
for (int n, k; ~scanf("%d%d"&n, &k); ) {
        vector
<int> b(n+1);
        
for (int i = 1 ; i <= n ; i++{
            scanf(
"%d"&b[i]);
        }

        
for (int i = 1, j; i <= n; i ++{
            
for(j = 1; j <= n ; j++{
                
if(b[j] == 0){
                    
break;
                }

            }

            
if(i > 1){
                putchar(
' ');
            }

            cout
<<j;
            b[j] 
= -1;
            
for (int p = 1; p + k <= j; p++){
                b[p] 
--;
            }

        }

        cout
<<endl;
    }

    
return 0;
}