// Fenwick Tree
#include<iostream>
#include<algorithm>
#include<cmath>
#include<climits>
#include<cstring>
#include<map>
#define fr(i, zz, zzz) for (int i = zz; i <= zzz; i++)
#define ll long long
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
#define frr(i, zz, zzz) for (int i = zz; i >= zzz; i--)
#define full(asdf) memset(asdf, 0, sizeof(asdf))
#define st first
#define nd second
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int N = 3E4 + 1;
ll a[N];
int BIT[N];
int n;
int cnt = 1;
int ans = 0;
void digitization() {
int cnt = 0;
pair<ll, int> tmp[N];
cin >> n;
fr(i, 1, n) {
cin >> a[i];
tmp[i].st = a[i];
tmp[i].nd = i;
}
sort(tmp + 1, tmp + n + 1);
fr(i, 1, n) {
if (tmp[i].st != tmp[i-1].st)
++cnt;
a[tmp[i].nd] = cnt;
}
}
ll Get(int pos) {
int res = 0;
while (pos > 0) {
res = max(res, BIT[pos]);
pos -= pos & -pos;
}
return res;
}
void Update(int val) {
int x = Get(val - 1);
ans = max(x, ans);
while (val <= n) {
BIT[val] = max(BIT[val], x + 1);
val += val & -val;
}
}
void solve() {
fr(i, 1, n) {
Update(a[i]);
}
fr(i, 1, n)
cout << BIT[i] << " ";
// cout << Get(n);
}
int main () {
IOS
digitization();
solve();
}
Ly8gRmVud2ljayBUcmVlCiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjbGltaXRzPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxtYXA+CiNkZWZpbmUgZnIoaSwgenosIHp6eikgZm9yIChpbnQgaSA9IHp6OyBpIDw9IHp6ejsgaSsrKQojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBmcnIoaSwgenosIHp6eikgZm9yIChpbnQgaSA9IHp6OyBpID49IHp6ejsgaS0tKQojZGVmaW5lIGZ1bGwoYXNkZikgbWVtc2V0KGFzZGYsIDAsIHNpemVvZihhc2RmKSkKI2RlZmluZSBzdCBmaXJzdAojZGVmaW5lIG5kIHNlY29uZAojZGVmaW5lIElPUyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTiA9IDNFNCArIDE7CmxsIGFbTl07CmludCBCSVRbTl07CmludCBuOwppbnQgY250ID0gMTsKaW50IGFucyA9IDA7CnZvaWQgZGlnaXRpemF0aW9uKCkgewoJaW50IGNudCA9IDA7CglwYWlyPGxsLCBpbnQ+IHRtcFtOXTsKCWNpbiA+PiBuOwoJZnIoaSwgMSwgbikgewoJCWNpbiA+PiBhW2ldOwoJCXRtcFtpXS5zdCA9IGFbaV07CgkJdG1wW2ldLm5kID0gaTsKCX0KCXNvcnQodG1wICsgMSwgdG1wICsgbiArIDEpOwoJZnIoaSwgMSwgbikgewoJCWlmICh0bXBbaV0uc3QgIT0gdG1wW2ktMV0uc3QpCgkJCSsrY250OwoJCWFbdG1wW2ldLm5kXSA9IGNudDsKCX0KCQkKfQpsbCBHZXQoaW50IHBvcykgewoJaW50IHJlcyA9IDA7Cgl3aGlsZSAocG9zID4gMCkgewoJCXJlcyA9IG1heChyZXMsIEJJVFtwb3NdKTsKCQlwb3MgLT0gcG9zICYgLXBvczsKCX0KCQoJcmV0dXJuIHJlczsKfQp2b2lkIFVwZGF0ZShpbnQgdmFsKSB7CglpbnQgeCA9IEdldCh2YWwgLSAxKTsKCWFucyA9IG1heCh4LCBhbnMpOwoJd2hpbGUgKHZhbCA8PSBuKSB7CgkJQklUW3ZhbF0gPSBtYXgoQklUW3ZhbF0sIHggKyAxKTsKCQl2YWwgKz0gdmFsICYgLXZhbDsKCX0KfQp2b2lkIHNvbHZlKCkgewoJZnIoaSwgMSwgbikgewoJCVVwZGF0ZShhW2ldKTsKCX0KCglmcihpLCAxLCBuKQoJCWNvdXQgPDwgQklUW2ldIDw8ICIgIjsKLy8JY291dCA8PCBHZXQobik7Cn0KaW50IG1haW4gKCkgewoJSU9TCglkaWdpdGl6YXRpb24oKTsKCXNvbHZlKCk7Cn0KCg==