小红出千
题号:NC310824
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红定义 k 张牌是一个「顺子」,当且仅当这些牌从小到大排序后,满足对于 1 \sim k - 1 的每个 i,都有 a_i+1=a_{i+1}。例如,\{4,3,6,7,5\} 能构成一幅顺子。特殊的,单独的一张牌也是顺子。
\hspace{15pt}现在小红抽到了 n 张牌,她可以出千。每次使用「出千」,她都可以将任意一张牌的数字修改为任意一个正整数。小红想知道,最少需要使用多少次「出千」才可以将这 n 张牌变成一个「顺子」?请给出一个小红的出千方案。

输入描述:

\hspace{15pt}第一行输入一个正整数 n \left(1\leq n \leq 2\times 10^5 \right)
\hspace{15pt}第二行输入 n 个正整数a_i\left(1\leq a_i \leq 10^9 \right),代表每张牌上面的数字。

输出描述:

\hspace{15pt}第一行输出一个整数 k,代表出千的最小次数。
\hspace{15pt}接下来的 k 行,每行输出两个正整数 i,x\left(1 \leqq i \leqq n, 1 \leqq x \leqq 2 \times 10^9\right),代表将第 i 张牌上的数字修改为 x

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
5
1 2 3 4 6

输出

复制
1
5 5

说明

将第五张牌变为  是一个顺子。
示例2

输入

复制
3
1 2 3

输出

复制
0

说明

不需要进行「出千」。