#include <fstream>
#include <vector>
using namespace std;
void actualizare(vector <int> &aib, int poz, int val) {
int n = (int)aib.size() - 1;
while (poz <= n) {
aib[poz] += val;
int p2 = (poz & (-poz));
poz += p2;
}
}
int interogare_poz_min(vector <int> &aib, int val) {
int p2 = 1, n = (int)aib.size() - 1;
while (p2 <= n / 2) {
p2 *= 2;
}
int poz = 0;
while (p2 != 0) {
if (poz + p2 <= n && aib[poz+p2] < val) {
poz += p2;
val -= aib[poz];
}
p2 /= 2;
}
return poz + 1;
}
int main() {
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
fin >> n;
vector <int> clasament_ini(n + 1), aib(n + 1, 0);
for (int i = 1; i <= n; i++) {
fin >> clasament_ini[i];
}
fin.close();
for (int i = 1; i <= n; i++) {
actualizare(aib, i, 1);
}
vector <int> clasament_final(n + 1);
for (int i = n; i >= 1; i--) {
int poz_fin = interogare_poz_min(aib, clasament_ini[i]);
actualizare(aib, poz_fin, -1);
clasament_final[poz_fin] = i;
}
for (int i = 1; i <= n; i++) {
fout << clasament_final[i] << "\n";
}
fout.close();
return 0;
}