#include <cstdio>
#define nmax 30005
using namespace std;
int arb[3*nmax+5];
int p[nmax];
int r[nmax];
int in[nmax];
int n;
void update(int pos,bool val,int k,int s,int f) {
if (val) arb[k]++;
else arb[k]--;
if (s==f) return;
int mij = (s+f)/2;
if (pos <= mij) update(pos,val,2*k,s,mij);
else update(pos,val,2*k+1,mij+1,f);
}
int querry(int val,int k,int s,int f) {
if (s == f) {
arb[k]--;
return s;
}
int mij = (s+f)/2;
int aux;
if (arb[2*k] >= val) aux = querry(val,2*k,s,mij);
else aux = querry(val-arb[2*k],2*k+1,mij+1,f);
arb[k]--;
return aux;
}
int main() {
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++) update(i,true,1,1,n);
for (int i=1;i<=n;i++) scanf("%d",&in[i]);
for (int i=n;i>=1;i--) {
p[i] = querry(in[i],1,1,n);
//update(p[i],false,1,1,n);
}
for (int i=1;i<=n;i++) r[p[i]] = i;
for (int i=1;i<=n;i++) printf("%d\n",r[i]);
return 0;
}