#include<algorithm>
using namespace std;
#define N_MAX 30005
int rez[N_MAX],a[N_MAX],arb[N_MAX*4+100];
int i,n;
void update(int nod,int st,int dr,int poz,int val)
{
if(st==dr)
{
arb[nod]=val;
return ;
}
int md=(st+dr)>>1;
if(poz<=md)
update((nod<<1),st,md,poz,val);
else
update((nod<<1)+1,md+1,dr,poz,val);
arb[nod]=arb[(nod<<1)]+arb[(nod<<1)+1];
}
int query(int nod,int st,int dr,int val)
{
if(st==dr)
{
return dr;
}
int md=(st+dr)>>1;
if(val<=arb[(nod<<1)])
return query((nod<<1),st,md,val);
else
return query((nod<<1)+1,md+1,dr,val-arb[(nod<<1)]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
update(1,1,n,i,1);
}
for(i=n;i;i--)
{
int x=query(1,1,n,a[i]);
update(1,1,n,x,0);
rez[x]=i;
}
for(i=1;i<=n;i++)
printf("%d\n",rez[i]);
return 0;
}