#include <stdio.h>
#define NMAX 30023
FILE *fin, *fout;
int n, arr[NMAX], v1[NMAX], v2[NMAX], arb[2*NMAX];
void pun(int st, int dr, int pos, int nod)
{
if(st == dr)
{
arb[nod]++;
return;
}
int mij = (st+dr)/2;
if(pos <= mij) pun(st, mij, pos, 2*nod);
if(pos > mij) pun(mij+1, dr, pos, 2*nod+1);
arb[nod] = arb[2*nod] + arb[2*nod+1];
return;
}
int interogare(int st, int dr, int st1, int dr1, int nod)
{
if(st == st1 && dr == dr1)
{
return arb[nod];
}
int mij = (st+dr)/2;
if(st1 > mij) return interogare(mij+1, dr, st1, dr1, 2*nod+1);
if(dr1 <= mij) return interogare(st, mij, st1, dr1, 2*nod);
return interogare(st, mij, st1, mij, 2*nod) + interogare(mij+1, dr, mij+1, dr1, 2*nod+1);
}
int main()
{
fin = fopen("schi.in", "r");
fout = fopen("schi.out", "w");
fscanf(fin, "%d", &n);
for(int i = 0; i< n; i++) fscanf(fin, "%d", &arr[i]);
for(int i = n-1; i>= 0; i--)
{
int temp = arr[i], temp1, temp2;
temp1 = temp + interogare(1, n, 1, arr[i], 1);
while(temp1 - temp)
{
temp2 = temp1;
temp1 += interogare(1, n, temp+1, temp1, 1);
temp=temp2;
}
v1[temp]++;
v2[temp] = i+1;
pun(1, n, temp, 1);
}
for(int i = 1; i<= n; i++)
{
fprintf(fout, "%d ", v2[i]);
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}