#include<stdio.h>
int a[180010],c[30010],h[30010],n;
void update(int i, int j, int p, int nod, int v)
{ if(i==j && j==p)
{ a[nod]=v;
return;
}
int m=(i+j)/2;
if(p<=m)
update(i,m,p,nod*2,v);
else
update(m+1,j,p,nod*2+1,v);
a[nod]=a[nod*2]+a[nod*2+1];
}
void read()
{ scanf("%d", &n);
for(int i=1; i<=n;i++)
{ scanf("%d", &h[i]);
update(1,n,i,1,1);
}
}
int query(int i, int j, int nod, int v)
{ if(i==j)
return i;
int m=(i+j)/2;
if(v<=a[nod*2])
return query(i,m,nod*2,v);
else
return query(m+1,j,nod*2+1,v-a[nod*2]);
}
void solve()
{ int i;
for(i=n; i>=1; --i)
{ int boo=query(1,n,1,h[i]);
c[boo]=i;
update(1,n,boo,1,0);
}
}
void write()
{ for(int i=1; i<=n; i++)
printf("%d\n", c[i]);
}
int main()
{ freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
read();
solve();
write();
return 0;
}