#include<stdio.h>
int n,arb[70000],v[30005],f[30005];
void update(int n,int l,int r,int poz,int val)
{
if(l==r)
{
arb[n]=val;
return ;
}
int mij=(l+r)/2;
if(poz<=mij)
update(2*n,l,mij,poz,val);
else
update(2*n+1,mij+1,r,poz,val);
arb[n]=arb[2*n]+arb[2*n+1];
}
int query(int n,int l,int r,int poz)
{
if(l==r)
return l;
int mij=(l+r)/2;
if(poz<=arb[2*n])
return query(2*n,l,mij,poz);
else
return query(2*n+1,mij+1,r,poz-arb[2*n]);
}
int main ()
{
int i,r;
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);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=n;i>=1;i--)
{
r=query(1,1,n,v[i]);
update(1,1,n,r,0);
f[r]=i;
}
for(i=1;i<=n;i++)
printf("%d\n",f[i]);
return 0;
}