#include<stdio.h>
#define Nmax 30009
int poz,i,n,a[Nmax],AI[2*Nmax],sol[Nmax];
void update(int nod,int st,int dr,int poz,int val)
{
int m=(st+dr)/2;
if (st==dr)
{
AI[nod]=val;
return;
}
if (m>=poz) update(nod<<1,st,m,poz,val);
else update((nod<<1)+1,m+1,dr,poz,val);
AI[nod]=AI[nod<<1]+AI[(nod<<1)+1];
}
int query(int nod,int st,int dr,int val)
{
int m=(st+dr)/2;
if (st==dr) return st;
if (AI[nod<<1]>=val) return query(nod<<1,st,m,val);
else return query((nod<<1)+1,m+1,dr,val-AI[nod<<1]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
update(1,1,n,i,1);
scanf("%d",&a[i]);
}
for (i=n;i>=1;i--)
{
poz=query(1,1,n,a[i]);
sol[poz]=i;
update(1,1,n,poz,0);
}
for (i=1;i<=n;i++)
printf("%d\n",sol[i]);
}