#include <stdio.h>
#define MAXN 30001
int v[MAXN];
int aib[MAXN];
int r[MAXN];
int update(int pos, int val) {
while(pos<MAXN) {
aib[pos] += val;
pos += pos&(-pos);
}
}
int sum(int pos) {
int s=0;
while(pos>0) {
s += aib[pos];
pos -= pos&(-pos);
}
return s;
}
int findrank(int st, int dr, int val) {
int mij=(st+dr)/2;
int bef = sum(mij);
//printf("%d %d %d %d %d\n", st, bef, mij, dr, val);
if(mij-bef>=val) {
if(mij-st>0)
return findrank(st, mij-1, val);
else
return mij;
}
else {
if(dr-mij>0)
return findrank(mij+1, dr, val);
else
return mij+1;
}
}
int main() {
FILE *fin = fopen("schi.in", "r");
FILE *fout = fopen("schi.out", "w");
int n;
fscanf(fin, "%d", &n);
for(int i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
for(int i=n; i>=1; i--) {
int rnk = findrank(1, n, v[i]);
//printf("%d`s rank is %d\n", i, rnk);
r[rnk] = i;
update(rnk, 1);
}
for(int i=1; i<=n; i++)
fprintf(fout, "%d\n", r[i]);
fclose(fin);
fclose(fout);
return 0;
}