题目描述
小 L 有一个长为 n 的数组 a0,a1,…,an−1。
小 L 调用了 std::iota(a.begin(), a.end(), 0),这会使得 a 中的数依次变为 0,1,…,n−1。
小 L 想通过一些操作让 a 与另一个数组 b 相等,但他发现他无法访问 a 中的某个指定的元素,他能做的操作只有以下两种:
- 给定正整数 x,对每个 0≤i<n,令 ai 变为 ai+x。
- 给定正整数 x,对每个 0≤i<n,令 ai 变为 aimodx。
小 L 想要用至多 2n 次操作使得 a 与 b 相等,帮帮小 L!
输入格式
第一行一个整数 n(1≤n≤3000),表示数组的长度。
第二行 n 个整数 b0,b1,…,bn−1(0≤bi≤109)。
输出格式
第一行一个整数 k(0≤k≤2n),表示你所进行的操作次数。
接下来 k 行,每行两个整数 ti,xi(1≤ti≤2,1≤xi≤1014)表示一次操作,ti=1 代表加法,ti=2 代表取模。
样例
样例输入
3
2 1 0
样例输出
5
1 8
2 9
1 4
2 5
2 3
子任务
- Subtask 1(20 points): 存在 0≤i<n 满足对所有的 j=i,bj=0。
- Subtask 2(20 points): b0≤b1≤⋯≤bn−1。
- Subtask 3(60 points): 无额外限制。