#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double pi = acos(-1);
const int N = 1000+20;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1e9+7;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
struct segTree {
ll treeSize;
vector<ll> used;
ll n;
segTree(ll n) {
treeSize = 1;
this->n = n;
while (treeSize < n) treeSize <<= 1;
used.resize(2 * treeSize, -oo);
}
void build() {
for (ll i = 0; i < treeSize; i++) {
if (i < n)
used[treeSize - 1 + i] = 1;
else
used[treeSize - 1 + i] = 0;
}
for (ll i = treeSize - 2; i >= 0; i--)
used[i] = used[2*i+1] + used[2*i+2];
}
void change(ll k, ll i, ll l, ll r) {
if (r-l == 1) {
used[i] = 0;
return;
}
ll mid = l+(r-l)/2;
if (k < mid) change(k, 2*i+1, l, mid);
else change(k, 2*i+2, mid, r);
used[i] = used[2*i+1] + used[2*i+2];
}
void change(ll k) {
change(k, 0, 0, treeSize);
}
ll query(ll k, ll i, ll l, ll r) {
if (r-l == 1) {
return l;
}
ll mid = l+(r-l)/2;
if (used[2*i+2] >= k)
return query(k, 2*i+2, mid, r);
return query(k - used[2*i+2], 2*i+1, l, mid);
}
ll query(ll k) {
ll x = query(k, 0, 0, treeSize);
change(x);
return x;
}
};
void solve() {
ll n; cin >> n;
vector<ll> v(n);
fin(0, n) cin >> v[i];
segTree st(n);
st.build();
vector<ll> ans(n, 0);
for (ll i = n-1; i >= 0; i--) {
ll idx = st.query(v[i]+1);
ans[i] = idx+1;
}
for (auto x : ans) cout << x << " ";
cout << "\n";
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int tt = 1; //cin >> tt;
while (tt--) {
solve();
//cout << "Case #" << c++ << ": ";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmluKGEsIG4pIGZvcihpbnQgaSA9IGE7IGkgPCBuOyBpKyspCiNkZWZpbmUgZmpuKGEsIG4pIGZvcihpbnQgaiA9IGE7IGogPCBuOyBqKyspCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgYWxscihhKSBhLnJiZWdpbigpLGEucmVuZCgpCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cikKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBkb3VibGUgcGkgPSBhY29zKC0xKTsKY29uc3QgaW50IE4gPSAxMDAwKzIwOwpjb25zdCBsbCBvbyA9IDB4M2YzZjNmM2YzZjNmM2YzZjsKY29uc3QgaW50IE1PRCA9IDFlOSs3OwoKc3RyaW5nIGRpW10gPSB7IkQiLCJMIiwgIlUiLCAiUiIsICJVTCIsICJVUiIsICJETCIsICJEUiJ9OwppbnQgZHhbXSA9IHsrMSwgKzAsICswLCAtMSwgLTEsIC0xLCArMSwgKzF9OwppbnQgZHlbXSA9IHsrMCwgLTEsICsxLCArMCwgLTEsICsxLCAtMSwgKzF9OwpjaGFyIGRjW10gPSB7J0QnLCAnTCcsICdSJywgJ1UnfTsKCnN0cnVjdCBzZWdUcmVlIHsKICAgIGxsIHRyZWVTaXplOwogICAgdmVjdG9yPGxsPiB1c2VkOwogICAgbGwgbjsKICAgIHNlZ1RyZWUobGwgbikgewogICAgICAgIHRyZWVTaXplID0gMTsKICAgICAgICB0aGlzLT5uID0gbjsKICAgICAgICB3aGlsZSAodHJlZVNpemUgPCBuKSB0cmVlU2l6ZSA8PD0gMTsKICAgICAgICB1c2VkLnJlc2l6ZSgyICogdHJlZVNpemUsIC1vbyk7CiAgICB9CgogICAgdm9pZCBidWlsZCgpIHsKICAgICAgICBmb3IgKGxsIGkgPSAwOyBpIDwgdHJlZVNpemU7IGkrKykgewogICAgICAgICAgICBpZiAoaSA8IG4pCiAgICAgICAgICAgICAgICB1c2VkW3RyZWVTaXplIC0gMSArIGldID0gMTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdXNlZFt0cmVlU2l6ZSAtIDEgKyBpXSA9IDA7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGxsIGkgPSB0cmVlU2l6ZSAtIDI7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICB1c2VkW2ldID0gdXNlZFsyKmkrMV0gKyB1c2VkWzIqaSsyXTsKICAgIH0KCiAgICB2b2lkIGNoYW5nZShsbCBrLCBsbCBpLCBsbCBsLCBsbCByKSB7CiAgICAgICAgaWYgKHItbCA9PSAxKSB7CiAgICAgICAgICAgIHVzZWRbaV0gID0gMDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGwgbWlkID0gbCsoci1sKS8yOwogICAgICAgIGlmIChrIDwgbWlkKSBjaGFuZ2UoaywgMippKzEsIGwsIG1pZCk7CiAgICAgICAgZWxzZSBjaGFuZ2UoaywgMippKzIsIG1pZCwgcik7CgogICAgICAgIHVzZWRbaV0gPSB1c2VkWzIqaSsxXSArIHVzZWRbMippKzJdOwogICAgfQoKICAgIHZvaWQgY2hhbmdlKGxsIGspIHsKICAgICAgICBjaGFuZ2UoaywgMCwgMCwgdHJlZVNpemUpOwogICAgfQoKICAgIGxsIHF1ZXJ5KGxsIGssIGxsIGksIGxsIGwsIGxsIHIpIHsKICAgICAgICBpZiAoci1sID09IDEpIHsKICAgICAgICAgICAgcmV0dXJuIGw7CiAgICAgICAgfQoKICAgICAgICBsbCBtaWQgPSBsKyhyLWwpLzI7CiAgICAgICAgaWYgKHVzZWRbMippKzJdID49IGspCiAgICAgICAgICAgIHJldHVybiBxdWVyeShrLCAyKmkrMiwgbWlkLCByKTsKICAgICAgICByZXR1cm4gcXVlcnkoayAtIHVzZWRbMippKzJdLCAyKmkrMSwgbCwgbWlkKTsKICAgIH0KCiAgICBsbCBxdWVyeShsbCBrKSB7CiAgICAgICBsbCB4ID0gIHF1ZXJ5KGssIDAsIDAsIHRyZWVTaXplKTsKICAgICAgICBjaGFuZ2UoeCk7CiAgICAgICAgcmV0dXJuIHg7CiAgICB9Cn07Cgp2b2lkIHNvbHZlKCkgewogICAgbGwgbjsgIGNpbiA+PiBuOwogICAgdmVjdG9yPGxsPiB2KG4pOwogICAgZmluKDAsIG4pIGNpbiA+PiB2W2ldOwogICAgc2VnVHJlZSBzdChuKTsKICAgIHN0LmJ1aWxkKCk7CiAgICB2ZWN0b3I8bGw+IGFucyhuLCAwKTsKICAgIGZvciAobGwgaSA9IG4tMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBsbCBpZHggPSBzdC5xdWVyeSh2W2ldKzEpOwogICAgICAgIGFuc1tpXSA9IGlkeCsxOwogICAgfQoKICAgIGZvciAoYXV0byB4IDogYW5zKSBjb3V0IDw8IHggPDwgIiAiOwogICAgY291dCA8PCAiXG4iOwp9CgppbnQgbWFpbigpIHsKICAgIEZBU1Q7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgogICAgaW50IHR0ID0gMTsgLy9jaW4gPj4gdHQ7CiAgICB3aGlsZSAodHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICAgICAgLy9jb3V0IDw8ICJDYXNlICMiIDw8IGMrKyA8PCAiOiAiOwogICAgfQogICAgcmV0dXJuIDA7Cn0=