#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int main(){
int a[210000],flag[210000],lag[210000],n;
vector<int> vec;
memset(flag,0,sizeof(flag));
memset(lag,0,sizeof(lag));
vec.clear();
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
flag[a[i]]++;
}
for(int i=1;i<=n;i++){
if(!flag[i]) vec.push_back(i);
}
if(vec.empty()){
printf("0\n");
for(int i=0;i<n;i++) i==0?printf("%d",a[i]):printf(" %d",a[i]);
printf("\n");
}
else{
int tot=0;
for(int i=0;i<n;i++){
//printf("%d\n",flag[a[i]]);
if(flag[a[i]]>1&&a[i]>vec[tot]){
flag[a[i]]--;
a[i]=vec[tot];
tot++;
}
else if(