#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nm=30005;
int aint[4*nm], v[nm], rez[nm];
void update(int nod, int st, int dr, int poz, int val)
{
if(st==dr)
aint[nod]+=val;
else
{
int mid=(st+dr)/2;
if(poz<=mid)
update(2*nod, st, mid, poz, val);
else
update(2*nod+1, mid+1, dr, poz, val);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
}
int query(int nod, int st, int dr, int x, int y)
{
if(x<=st && dr<=y)
return aint[nod];
int mid=(st+dr)/2, l=0, r=0;
if(x<=mid)
l=query(2*nod, st, mid, x, y);
if(y>=mid+1)
r=query(2*nod+1, mid+1, dr, x, y);
return l+r;
}
int cb(int nod, int st, int dr, int val)
{
if(st==dr)
return st;
int mid=(st+dr)/2;
if(aint[2*nod]<val)
return cb(2*nod+1, mid+1, dr, val-aint[2*nod]);
else
return cb(2*nod, st, mid, val);
}
signed main()
{
ifstream cin("schi.in");
ofstream cout("schi.out");
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i];
update(1, 1, n, i, 1);
}
for(int i=n; i>0; i--)
{
int poz=cb(1, 1, n, v[i]);
rez[poz]=i;
update(1, 1, n, poz, -1);
}
for(int i=1; i<=n; i++)
cout<<rez[i]<<'\n';
return 0;
}