P15346 [TOIP 2025] 煎饼摊
题目描述
阿麦在假日市集里摆了一个摊子卖煎饼。
考量每个人的食量不同,他决定贩售 $n$ 种不同大小的煎饼,依照小到大由 $1$ 编号到 $n$,并预计将同一种大小的煎饼堆成一叠方便选购。
每叠煎饼至多只能叠 $m$ 片,否则会因为过高而倒塌。
阿麦每煎好一片就将该片煎饼放到摊位台面上,但因为太过匆忙,不同大小的煎饼被堆放在同一叠。
当他注意到时,摊位上已有 $n$ 叠煎饼,每叠都恰有 $m$ 片,而每种大小的煎饼也恰有 $m$ 片。
阿麦想利用煎饼铲来移动这些煎饼,调整回他预期的摆设。
他只能通过下面的动作来调整煎饼位置:
- 将煎饼铲插入某叠煎饼中的某两片之间
- 将煎饼铲上方所有的煎饼放置至另一叠的上方 (铲子上方的煎饼顺序不变)
因摊位台面大小有限,除了既有的 $n$ 叠煎饼外,剩余的空间仅能再容纳一叠煎饼;
此外,调整过程不可有任一叠超过 $m$ 片,否则该叠煎饼就会倒塌。
请协助阿麦将同样大小的煎饼调整为同一叠,并且让较小的煎饼排在较左边。
举例来说,若 $n=2$,$m=3$,一开始的 $2$ 叠煎饼如下图 (最右边为台面剩余空间):
:::align{center}

:::
一个可能的调整方式如下,将煎饼铲插入最左边的下面两片之间,并移动至右方的剩余空间:
:::align{center}

:::
将煎饼铲插入中间的下面两片之间,并移动至最左边:
:::align{center}

:::
将最左边最上面的煎饼铲至中间:
:::align{center}

:::
接着再将最右边的两个煎饼分别铲到第 $1$, $2$ 叠,便完成了阿麦预期的摆设方式:
:::align{center}

:::
请写一个程序帮助阿麦将各种大小的煎饼移动到想要的位置,
由于移动方法很多可以输出任何一种可行的移动方法,
但移动的次数需要在 $9nm$ 次以内。
输入格式
$$
\begin{aligned}
&m \; n \\
&a_{1,1} \; a_{1,2} \; \cdots \; a_{1,m} \\
&a_{2,1} \; a_{2,2} \; \cdots \; a_{2,m} \\
&\vdots \\
&a_{n,1} \; a_{n,2} \; \cdots \; a_{n,m}
\end{aligned}
$$
* $n$ 代表目前共有 $n$ 叠煎饼。
* $m$ 代表目前每叠煎饼恰有 $m$ 片煎饼,并且每种大小的煎饼都恰有 $m$ 片。
* $a_{i,j}$ 代表由左到右第 $i$ 叠,由下至上第 $j$ 个煎饼的大小。
输出格式
$$
\begin{aligned}
&c \\
&s_1 \; k_1 \; t_1 \\
&s_2 \; k_2 \; t_2 \\
&\vdots \\
&s_c \; k_c \; t_c
\end{aligned}
$$
* $c$ 代表移动的总次数。
* $s_i$, $k_i$, $t_i$ 代表第 $i$ 次的移动将从左到右第 $s_i$ 的上面 $k_i$ 片煎饼移动到从左到右的第 $t_i$ 叠。(第 $n+1$ 叠为开始时的空位)
* $0 \le c \le 9nm$。
* $1 \le s_i, t_i \le n+1$,且 $s_i \neq t_i$。
* $k_i \ge 1$ 且不得大于当前第 $s_i$ 叠的煎饼数量。
说明/提示
### 数据限制
* $1 \le n \le 50$。
* $1 \le m \le 50$。
* $1 \le a_{i,j} \le n$。
* 所有输入的数皆为整数。
* 保证 $1$ 到 $n$ 每个数字恰好在 $a$ 里出现 $m$ 次。
### 评分说明
本题共有三组子任务,条件限制如下所示。每一组可有一或多笔测试数据,该组分数为所有测试数据的最小得分。
| 子任务 | 分数 | 额外输入限制 |
| :------: | :----: | ------------ |
| 1 | 8 | $m = 1$。 |
| 2 | 37 | $n = 2$。 |
| 3 | 55 | 无额外限制。 |
本题若输出任意合法解答该测试数据以满分计,但输出若有下列非法情况测试数据则以 $0$ 分计:
- 输出的移动次数过多。
- 数字超出范围。
- 移动的煎饼数量大于起始叠的煎饼数量。
- 移动完毕后,第 $i$ 种煎饼没有全部都在第 $i$ 叠的位置上。
另外,如果移动过程中有任一叠煎饼超过 $m$ 个,则该笔测试数据以原测试数据组分数 $30\%$ 计。