#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int nmax=30005;
int n,m,x,aint[nmax*3],poz,sol[nmax],v[nmax];
inline void build(int st,int dr,int nod){
if(st==dr){
aint[nod]=1;
return ;
}
int mij=(st+dr)/2;
build(st,mij,2*nod);
build(mij+1,dr,2*nod+1);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
inline void update(int st,int dr,int nod,int poz){
if(st==poz&&dr==poz){
aint[nod]=0;
return ;
}
int mij=(st+dr)/2;
if(poz<=mij)update(st,mij,2*nod,poz);
else update(mij+1,dr,2*nod+1,poz);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
inline int query(int st,int dr,int nod,int b){
if(st==dr){
return st;
}
int mij=(st+dr)/2;
if(b<=aint[2*nod])
return query(st,mij,2*nod,b);
else
return query(mij+1,dr,2*nod+1,b-aint[2*nod]);
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++){
fin>>v[i];
}
build(1,n,1);
for(int i=n;i>=1;i--){
poz=query(1,n,1,v[i]);
sol[poz]=i;
update(1,n,1,poz);
}
for(int i=1;i<=n;i++){
fout<<sol[i]<<"\n";
}
}