//
// main.cpp
// Schi
//
// Created by Albastroiu Radu on 9/21/16.
// Copyright © 2016 Albastroiu Radu. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#define MULTFOARTEMULT (1<<28)-1
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
long long i, j, n, m, tip, a, b, v[40001], rez[40001], arb[120001], Max, pos;
void populateArb(long long left, long long right, long long p)
{
if(left == right)
{
arb[p] = 1;
}
else
{
long long mij = (left+right)/2;
populateArb(left, mij, p*2);
populateArb(mij+1, right, p*2+1);
arb[p] = arb[p*2] + arb[p*2+1];
}
}
void update(long long left, long long right, long long a, long long b, long long p)
{
if(left == right)
{
arb[p] = b;
}
else
{
long long mij = (left+right)/2;
if( a <= mij && a >= left )
update(left, mij, a, b, p*2);
if( a > mij && a <= right )
update(mij+1, right, a, b, p*2+1);
arb[p] = arb[p*2] + arb[p*2+1];
}
}
void querry(long long left, long long right, long long p)
{
if(left==right)
{
pos = left;
}
else
{
long long mij = (left+right)/2;
if( v[i] <= arb[p*2] )
{
querry(left, mij, p*2 );
}
else
{
v[i] -= arb[p*2];
querry(mij+1, right, p*2+1);
}
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
populateArb(1, n, 1);
for(i=n;i>0;i--)
{
querry(1,n,1);
update(1,n,pos,0,1);
rez[pos] = i;
}
for(i=1;i<=n;i++)
fout<<rez[i]<<"\n";
return 0;
}