#P17239. [2025年南开中学集训]数组

[2025年南开中学集训]数组

题目描述

小 L 有一个长为 nn 的数组 a0,a1,,an1a_0,a_1,\ldots,a_{n-1}

小 L 调用了 std::iota(a.begin(), a.end(), 0),这会使得 aa 中的数依次变为 0,1,,n10,1,\ldots,n-1

小 L 想通过一些操作让 aa 与另一个数组 bb 相等,但他发现他无法访问 aa 中的某个指定的元素,他能做的操作只有以下两种:

  • 给定正整数 xx,对每个 0i<n0\le i<n,令 aia_i 变为 ai+xa_i+x
  • 给定正整数 xx,对每个 0i<n0\le i<n,令 aia_i 变为 aimodxa_i\bmod x

小 L 想要用至多 2n2n 次操作使得 aabb 相等,帮帮小 L!

输入格式

第一行一个整数 nn1n30001\le n\le 3000),表示数组的长度。

第二行 nn 个整数 b0,b1,,bn1b_0,b_1,\ldots,b_{n-1}0bi1090\le b_i\le 10^9)。

输出格式

第一行一个整数 kk0k2n0\le k\le 2n),表示你所进行的操作次数。

接下来 kk 行,每行两个整数 ti,xit_i,x_i1ti2,1xi10141\le t_i\le 2,1\le x_i\le 10^{14})表示一次操作,ti=1t_i=1 代表加法,ti=2t_i=2 代表取模。

样例

样例输入

3
2 1 0

样例输出

5
1 8
2 9
1 4
2 5
2 3

子任务

  • Subtask 1(20 points): 存在 0i<n0\le i<n 满足对所有的 jij\ne ibj=0b_j=0
  • Subtask 2(20 points): b0b1bn1b_0\le b_1\le\cdots\le b_{n-1}
  • Subtask 3(60 points): 无额外限制。