// 这题直接考察的是并查集的运用,刚开始所有数都指向自己,每次输入一个数就找到这个数的根节点,
// 当找到父节点后这个数就被用过了(这时直接让它指向下一个还没用过的节点,那么下一个结点可能是根节点,说明根结点以前可以到达的数都已经
// 出现过,且符合题目条件的 +1 ,每次指向下一个大于1的数字)
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1000100;
int f[N]; // 用f[i]表示值为i的值指向哪一个数
int find(int x) // 找到父节点
{
// 父节点是自己
if(f[x] != x) return f[x] = find(f[x]);
else return f[x]; // 继续查找父节点,直到找到根节点
}
int main()
{
int n;
cin >> n;
for(int i = 1;i < N;i++) f[i] = i;
for(int i = 1;i <=n ;i++)
{
int x;
scanf("%d",&x);
x = find(x); // 都可以不用数组,直接找到父节点输出就可
printf("%d ",x);
f[x] = x + 1; // 这个点已经用过直接指向下一个点
}
return 0;
}