http://codeforces.com/problemset/problem/864/D
#include<cstdio>
int a[200010],vis[200010];
int main() {
int i,j,n,ans;
scanf("%d",&n);
for(i=0; i<n; i++) {
scanf("%d",&a[i]);
vis[a[i]]++;
}
j=0;
ans=0;
for(i=1; i<=n; i++) {
if(vis[i]==0) {
ans++;
while(j<n) {
if(vis[a[j]]==1);
else if(vis[a[j]]>1&&i<a[j]) {
vis[a[j]]--;
a[j]=i;
j++;
break;
} else if(vis[a[j]]>1&&i>a[j])
vis[a[j]]=-1;
else if(vis[a[j]]<0) {
vis[a[j]]--;
a[j]=i;
j++;
break;
}
j++;
}
}
}
printf("%d\n",ans);
printf("%d",a[0]);
for(i=1; i<n; i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}