#include<stdio.h>
int val,poz,t[1<<18],v[30001],h[30001],n,m,a,b,maxim;
const int INF=1e10;
int start;
int inline maxi(int d,int c){
if(d<c)
return c;
return d;
}
void inline query(int p, int st, int dr)
{
if ( a <= st && dr <= b )
{
if ( maxim < t[p] ) maxim = t[p];
return;
}
int div = (st+dr)/2;
if ( a <= div ) query(2*p,st,div);
if ( div < b ) query(2*p+1,div+1,dr);
}
void inline update(int p,int st,int dr){
int m;
if(st==dr){
t[p]=val;
return;
}
m=(st+dr)/2;
if(poz<=m)
update(2*p,st,m);
else
update(2*p+1,m+1,dr);
t[p]=maxi(t[2*p],t[2*p+1]);
}
void calcul(int p,int st,int dr){
if(st==dr){
v[st]=start;
t[p]=1;
return;
}
int m=(st+dr)/2,vrajeala=m-st+1-t[2*p];
if(poz<=vrajeala)
calcul(2*p,st,m);
else{
poz-=vrajeala;
calcul(2*p+1,m+1,dr);
}
t[p]++;
}
int main(){
int i,n;
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&poz);
h[i]=poz;
}
for(i=n;i>=1;i--){
poz=h[i];
start=i;
calcul(1,1,n);
}
for(i=1;i<=n;i++){
printf("%d\n",v[i]);
}
return 0;
}