#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using vl = vector<ll>;
const int INF = 0x3f3f3f3f;
template <class K, class V>
ostream& operator<<(ostream& out, const pair<K, V>& v) {
  out << '(' << v.first << ',' << v.second << ')';
  return out;
}
template <class C, class = typename C::iterator>
struct _cprint {
  using type = void;
};
template <>
struct _cprint<string> {};
template <class C, class = typename _cprint<C>::type>
ostream& operator<<(ostream& out, const C& v) {
  for (auto x : v) out << x << ' ';
  return out;
}
template <class C>
inline void chmax(C& x, const C& a) {
  if (x < a) x = a;
}
template <class C>
inline void chmin(C& x, const C& a) {
  if (x > a) x = a;
}
template <class C>
inline C mod(C a, C b) {
  return (a % b + b) % b;
}
int n;
vi a;
vi b;
int main() {
  cin >> n;
  a = b = vi(n);
  for (int i = 0; i < n; i++) cin >> a[i];
  vector<pair<int, int>> tmp;
  for (int i = 0; i < n; i++) tmp.emplace_back(a[i], i);
  sort((tmp).begin(), (tmp).end());
  int cur = 0;
  for (int i = 0; i < n; i++) {
    if (cur <= tmp[i].first) {
      b[tmp[i].second] = tmp[i].first;
      cur = tmp[i].first + 1;
    } else {
      b[tmp[i].second] = cur;
      cur++;
    }
  }
  cout << b << endl;
}
