#include <bits/stdc++.h>
inline char contains(char bits[], int number) {
  return ((bits[number >> 3]) & (1 << (number & 7)));
}
inline void set(char bits[], int number) {
  bits[number >> 3] |= (1 << (number & 7));
}
struct compare {
  bool operator()(std::pair<int, int> i, std::pair<int, int> j) {
    return ((i.second) < (j.second));
  }
} ballerSort;
int main(int argc, char** argv) {
  int num = 0;
  std::cin >> num;
  std::cin.ignore(256, '\n');
  std::map<int, int> ratingmap;
  char* bits = (char*)calloc(125037500, sizeof(char));
  std::vector<std::pair<int, int> > desired_ratings;
  std::map<int, int> output_map;
  char c;
  char i = 0;
  char word[11];
  int current_rating = 0;
  while (c = getc(stdin)) {
    if (c == ' ' || c == '\n') {
      word[i] = '\0';
      desired_ratings.push_back(std::make_pair(current_rating++, atoi(word)));
      i = 0;
    } else {
      word[i] = c;
      i++;
    }
    if (c == '\n') {
      break;
    }
  }
  std::sort(desired_ratings.begin(), desired_ratings.end(), ballerSort);
  int first = 0, actual = 0;
  for (std::vector<std::pair<int, int> >::iterator iter =
           desired_ratings.begin();
       iter != desired_ratings.end(); ++iter) {
    int rating;
    int desired_rating = iter->second;
    if (first <= desired_rating && desired_rating <= actual)
      rating = ++actual;
    else {
      rating = desired_rating;
      first = desired_rating;
    }
    while (contains(bits, rating)) {
      rating++;
    }
    actual = rating;
    output_map[iter->first] = rating;
    set(bits, rating);
  }
  for (int i = 0; i < num; i++) {
    printf("%d ", output_map[i]);
  }
  printf("\n");
  free(bits);
}
