#include<bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define pii pair<int,int>
#define ii int,int
#define fi first
#define se second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define umap unordered_map
#define BIT(mask, i) ((mask >> i)&1)
#define ALL(c) c.begin(), c.end()
using namespace std;
mt19937 rd(chrono::high_resolution_clock::now().time_since_epoch().count());
int rand(int l, int r){
return l + rd()*rd()%(r-l+1);
}
const int N = 1e6+7;
const int M = 1e3+3;
const int MOD = 1e9+7;
const int inf = 3e18;
long long n, a[100005];
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
map<long long, int> mp;
// coi "key" chính là phần tử của mảng và "value" là thứ hạng của phần tử
// mình cho tất cả các phần tử vào map -> Đã được sắp xếp và loại bỏ những cái key trùng lặp
for(int i = 1; i <= n; i++){
cin >> a[i];
mp[a[i]] = 1;
}
// mp đang chứa mảng a được sắp xếp tăng dần
int thuhang = 1;
for(map<long long, int>::iterator it = mp.begin(); it != mp.end(); it++){
// mp.begin() -> bắt đầu của map
// mp.end() -> kết thúc của map
// sử dụng pointer để duyệt
// Không dùng <= mà dùng !=
it -> second = thuhang;
thuhang++;
}
// -> mp[a[i]] chính là thứ hạng của a[i];
for(int i = 1; i <= n; i++){
cout << mp[a[i]] << ' ';
}
}
//1 3 6 8 9 | 3 8 6 9 1
//1 2 3 4 5 | 2 4 3 5 1
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPZmFzdCIpCgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgaWkgaW50LGludAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIHVtYXAgdW5vcmRlcmVkX21hcAojZGVmaW5lIEJJVChtYXNrLCBpKSAoKG1hc2sgPj4gaSkmMSkKI2RlZmluZSBBTEwoYykgYy5iZWdpbigpLCBjLmVuZCgpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbXQxOTkzNyByZChjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwppbnQgcmFuZChpbnQgbCwgaW50IHIpewogICAgcmV0dXJuICBsICsgcmQoKSpyZCgpJShyLWwrMSk7Cn0KCmNvbnN0IGludCBOID0gMWU2Kzc7CmNvbnN0IGludCBNID0gMWUzKzM7CmNvbnN0IGludCBNT0QgPSAxZTkrNzsKY29uc3QgaW50IGluZiA9IDNlMTg7Cgpsb25nIGxvbmcgbiwgYVsxMDAwMDVdOwoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbjsKICAgIG1hcDxsb25nIGxvbmcsIGludD4gbXA7CiAgICAvLyBjb2kgImtleSIgY2jDrW5oIGzDoCBwaOG6p24gdOG7rSBj4bunYSBt4bqjbmcgdsOgICJ2YWx1ZSIgbMOgIHRo4bupIGjhuqFuZyBj4bunYSBwaOG6p24gdOG7rQogICAgLy8gbcOsbmggY2hvIHThuqV0IGPhuqMgY8OhYyBwaOG6p24gdOG7rSB2w6BvIG1hcCAtPiDEkMOjIMSRxrDhu6NjIHPhuq9wIHjhur9wIHbDoCBsb+G6oWkgYuG7jyBuaOG7r25nIGPDoWkga2V5IHRyw7luZyBs4bq3cAogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIG1wW2FbaV1dID0gMTsKICAgIH0KICAgIC8vIG1wIMSRYW5nIGNo4bupYSBt4bqjbmcgYSDEkcaw4bujYyBz4bqvcCB44bq/cCB0xINuZyBk4bqnbgogICAgaW50IHRodWhhbmcgPSAxOwoKICAgIGZvcihtYXA8bG9uZyBsb25nLCBpbnQ+OjppdGVyYXRvciBpdCA9IG1wLmJlZ2luKCk7IGl0ICE9IG1wLmVuZCgpOyBpdCsrKXsKICAgICAgICAvLyBtcC5iZWdpbigpIC0+IGLhuq90IMSR4bqndSBj4bunYSBtYXAKICAgICAgICAvLyBtcC5lbmQoKSAtPiBr4bq/dCB0aMO6YyBj4bunYSBtYXAKICAgICAgICAvLyBz4butIGThu6VuZyBwb2ludGVyIMSR4buDIGR1eeG7h3QKICAgICAgICAvLyBLaMO0bmcgZMO5bmcgPD0gbcOgIGTDuW5nICE9CiAgICAgICAgaXQgLT4gc2Vjb25kID0gdGh1aGFuZzsKICAgICAgICB0aHVoYW5nKys7CiAgICB9CiAgICAvLyAtPiBtcFthW2ldXSBjaMOtbmggbMOgIHRo4bupIGjhuqFuZyBj4bunYSBhW2ldOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGNvdXQgPDwgbXBbYVtpXV0gPDwgJyAnOwogICAgfQp9Ci8vMSAzIDYgOCA5IHwgMyA4IDYgOSAxCi8vMSAyIDMgNCA1IHwgMiA0IDMgNSAxCg==