CF2118B Make It Permutation

题目描述

有一个大小为 $ n \times n $ 的矩阵 $ A $,其中对于所有 $ 1 \le i,j \le n $,$ A_{i,j} = j $。 在一次操作中,你可以选择一行,并反转该行中的任意子数组$^{\text{∗}}$。 请找到最多 $ 2n $ 次操作的序列,使得每一列都包含一个长度为 $ n $ 的排列$^{\text{†}}$。 可以证明这样的构造总是可能的。如果有多个解,输出任意一个即可。 $^{\text{∗}}$ 数组 $ a $ 是数组 $ b $ 的子数组,如果 $ a $ 可以通过从 $ b $ 的开头删除零个或多个元素,以及从 $ b $ 的末尾删除零个或多个元素得到。 $^{\text{†}}$ 长度为 $ n $ 的排列是一个由 $ 1 $ 到 $ n $ 的 $ n $ 个不同整数按任意顺序组成的数组。例如,$ [2,3,1,5,4] $ 是一个排列,但 $ [1,2,2] $ 不是排列($ 2 $ 出现了两次),$ [1,3,4] $ 也不是排列($ n=3 $ 但出现了 $ 4 $)。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $ t $($ 1 \le t \le 100 $)。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $ n $($ 3 \le n \le 5000 $),表示矩阵的行数和列数。 保证所有测试用例的 $ n $ 之和不超过 $ 5000 $。

输出格式

对于每个测试用例,第一行输出一个整数 $ k $($ 0 \le k \le 2n $),表示你希望执行的操作次数。接下来的行中,输出这些操作。 每个操作的输出格式为“$ i\;l\;r $”($ 1 \leq l \leq r \leq n $ 且 $ 1 \leq i \leq n $),表示反转第 $ i $ 行的子数组 $ A_{i, l} $, $ A_{i, l+1} $, ..., $ A_{i, r} $。

说明/提示

在第一个测试用例中,以下操作是一个有效的解: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2118B/2e920475092c0a06b7e6444770e39ca0f6a17a41.png)