#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#ifdef LOCAL
#define fin cin
#define fout cout
#else
ifstream fin("schi.in");
ofstream fout("schi.out");
#endif
int aint[120000], v[30001], clasament[30001];
void build(int nod, int st, int dr) {
aint[nod] = dr - st + 1;
if (st == dr)
return;
int mij = (st + dr) / 2;
build(nod * 2, st, mij);
build(nod * 2 + 1, mij + 1, dr);
}
void update(int nod, int st, int dr, int poz) {
if (poz < st || poz > dr)
return;
if (st == dr) {
aint[nod] = 0;
return;
}
int mij = (st + dr) / 2;
update(nod * 2, st, mij, poz);
update(nod * 2 + 1, mij + 1, dr, poz);
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
int query(int nod, int st, int dr, int s) {
if (st == dr)
return st;
int mij = (st + dr) / 2;
if (aint[nod * 2] >= s)
return query(nod * 2, st, mij, s);
else
return query(nod * 2 + 1, mij + 1, dr, s - aint[nod * 2]);
}
int main() {
int n;
fin >> n;
for (int i=1; i<=n; i++)
fin >> v[i];
build(1, 1, n);
for (int i=n; i>0; i--) {
int poz = query(1, 1, n, v[i]);
clasament[poz] = i;
update(1, 1, n, poz);
}
for (int i=1; i<=n; i++)
fout << clasament[i] << '\n';
}