#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n, m, i, op, val, poz, pozFinal;
int arbore[200010], v[500010], final[200010];
void create(int nod, int left, int right)
{
if (left == right)
{
arbore[nod] = v[left];
return;
}
create(nod * 2, left, (left + right) / 2);
create(nod * 2 + 1, (left + right) / 2 + 1, right);
arbore[nod] = arbore[nod * 2] + arbore[nod * 2 + 1];
}
void modif(int nod, int left, int right, int poz, int val)
{
if (poz < left || poz > right)
return;
if (left == right)
{
arbore[nod] = val;
return;
}
modif(nod * 2, left, (left + right) / 2, poz, val);
modif(nod * 2 + 1, (left + right) / 2 + 1, right, poz, val);
arbore[nod] = arbore[nod * 2] + arbore[nod * 2 + 1];
}
int fixPosition(int nod, int left, int right, int pozInterm)
{
if (left == right)
return left;
if (arbore[2 * nod] < pozInterm)
return fixPosition(nod * 2 + 1, (left + right) / 2 + 1, right, pozInterm - arbore[nod * 2]);
return fixPosition(nod * 2, left, (left + right) / 2, pozInterm);
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
v[i] = i;
create(1, 1, n);
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = n; i >= 1; i--)
{
int p = fixPosition(1, 1, n, v[i]);
final[p] = i;
modif(1, 1, n, p, 0);
}
for (int i = 1; i <= n; i++)
fout << final[i] <<'\n';
return 0;
}