D. Make a Permutation!
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Ivan has an array consisting of n elements. Each of the elements is an integer from 1 to n.

Recently Ivan learned about permutations and their lexicographical order. Now he wants to change (replace) minimum number of elements in his array in such a way that his array becomes a permutation (i.e. each of the integers from 1 to n was encountered in his array exactly once). If there are multiple ways to do it he wants to find the lexicographically minimal permutation among them.

Thus minimizing the number of changes has the first priority, lexicographical minimizing has the second priority.

In order to determine which of the two permutations is lexicographically smaller, we compare their first elements. If they are equal — compare the second, and so on. If we have two permutations x and y, then x is lexicographically smaller if xi < yi, where i is the first index in which the permutations x and y differ.

Determine the array Ivan will obtain after performing all the changes.

Input

The first line contains an single integer n (2 ≤ n ≤ 200 000) — the number of elements in Ivan's array.

The second line contains a sequence of integers a1, a2, ..., an (1 ≤ ai ≤ n) — the description of Ivan's array.

Output

In the first line print q — the minimum number of elements that need to be changed in Ivan's array in order to make his array a permutation. In the second line, print the lexicographically minimal permutation which can be obtained from array with q changes.

Examples
input
4
3 2 2 3
output
2
1 2 4 3
input
6
4 5 6 3 2 1
output
0
4 5 6 3 2 1
input
10
6 8 4 6 7 1 6 3 4 5
output
3
2 8 4 6 7 1 9 3 10 5
Note

In the first example Ivan needs to replace number three in position 1 with number one, and number two in position 3 with number four. Then he will get a permutation [1, 2, 4, 3] with only two changed numbers — this permutation is lexicographically minimal among all suitable.

In the second example Ivan does not need to change anything because his array already is a permutation.

贪心

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std; int n,a[],boo[],b[],c[],tot,ans; int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
boo[a[i]]++;
}
tot=;
for(int i=;i<=n;i++)
if(!boo[i]){
tot++;
b[tot]=i;
}
b[tot+]=n+;
int k=; ans=;
for(int i=;i<=n;i++)
if(boo[a[i]]>){
if(!c[a[i]]&&b[k]>a[i]){
c[a[i]]=;
continue;
}
boo[a[i]]--;
ans++;
a[i]=b[k];
k++;
}
printf("%d\n",ans);
for(int i=;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);
}

最新文章

  1. MS SQL按IN()内容排序
  2. [Tool]Inno Setup创建软件安装程序。
  3. laravel框架总结(十) -- 返回值
  4. PHP: 深入pack/unpack
  5. C++ STL vector容器学习
  6. 精妙SQL语句
  7. No connection string named &#39;***&#39; could be found in the application config file
  8. Android开发面试经——3.常见Java基础笔试题
  9. linux 如何让程序在开机时启动,关机前关闭
  10. 第一回:Scrapy的试水
  11. Redis单机版和集群版的安装和部署
  12. 如何将Azure DevOps中的代码发布到Azure App Service中
  13. kaldi通用底层矩阵运算库——CUDA
  14. number类型精度分析
  15. Python黑魔法 --- 异步IO( asyncio) 协程
  16. Java项目收藏
  17. springboot结合jwt实现基于restful接口的身份认证
  18. 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
  19. HTML DOM的总结
  20. PHP curl模拟浏览器采集阿里巴巴的实现代码

热门文章

  1. 线程池的使用及ThreadPoolExecutor的分析(一)
  2. HDU 5144 NPY and shot(物理运动学+三分查找)
  3. 微积分入门(&quot;SX&quot;T版)
  4. input[type=file]样式更改以及图片上传预览
  5. 整理关于web项目如何防止CSRF和XSS攻击的方法
  6. DESTOON B2B标签(tag)调用手册
  7. HTML &lt;form&gt;标签
  8. CCF系列之字符串匹配(201409-3)
  9. UML图学习之三 状态图
  10. [知了堂学习笔记]_css3特效第一篇--旋转的背景&amp;翻书效果