#include <cstdio>
using namespace std;
int n;
int arbint[120001],a[30001],sol[30001];
void update(int node,int left,int right,int pos,int x)
{
if(left==right)
{
arbint[node]=x;
return;
}
int mid=(left+right)/2;
if(pos<=mid)
update(2*node,left,mid,pos,x);
else update(2*node+1,mid+1,right,pos,x);
arbint[node]=arbint[2*node]+arbint[2*node+1];
}
int seek(int node,int left,int right,int x)
{
if(left==right)
return left;
int mid=(left+right)/2;
if(x>arbint[2*node])
return seek(2*node+1,mid+1,right,x-arbint[2*node]);
return seek(2*node,left,mid,x);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
update(1,1,n,i,1);
}
for(int i=n;i;i--)
{
int pos=seek(1,1,n,a[i]);
sol[pos]=i;
update(1,1,n,pos,0);
}
for(int i=1;i<=n;i++)
printf("%d\n",sol[i]);
return 0;
}