氧气少年的 LCM
题号:NC266905
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\sf This\ time

\sf Don't\ need\ another\ perfect\ lie

\sf Don't\ care\ if\ critics\ never\ jump\ in\ line

\sf I'm\ gonna\ give\ all\ my\ secrets\ away

                   —— \text{OneRepublic},\ Secrets
氧气少年有一个可重复集 S,初始 S 中只有两个元素 —— xy

氧气少年每次可以进行下面操作中的任意一个:
  •  任选两个 S 中的元素 abab 的数值可以相等,但不能是同一个元素),然后向 S 中插入 \gcd(a,b)
  •  任选两个 S 中的元素 abab 的数值可以相等,但不能是同一个元素),然后向 S 中插入 a+b

现在氧气少年需要让集合中出现 \text{lcm}(x,y),请帮氧气少年求出操作方案。

\text{gcd}(a,b) 是指 ab 的最大公约数。\text{lcm}(x,y) 是指 xy 的最小公倍数。

输入描述:

第一行包含一个整数 T(1\leq T\leq 10^3),表示测试用例的组数。

对于每组测试用例:

仅输入一行,包含两个整数 x,y(1\leq x,y\leq 10^9)

输出描述:

对于每组测试用例:

第一行输出一个整数 t(0\leq t\leq 200),表示操作的次数;

接下来 t 行,每行包含三个整数 op(1\leq op\leq 2),a,b(1\leq a,b\leq 10^{18}),具体描述和要求如下:
  •  若 op=1,代表当前进行的是操作 1;若 op=2,代表当前进行的是操作 2
  •  您需要保证每次操作前,集合内已经包含数值为 a 的元素和数值为 b 的元素。
  •  您需要保证每次操作后,集合内每个元素的数值均不超过 10^{18}

可以证明,在本题的条件下一定有解。
如果有多个可行的答案,请输出任意一个。
示例1

输入

复制
2
2 3
1 2

输出

复制
3
2 2 3
1 2 3
2 5 1
0