#L3897. 「NOIP2022」喵了个喵

    ID: 3167 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>模拟双端队列 (deque)栈/队列管理离线/在线混合分类讨论贪心构造

「NOIP2022」喵了个喵

题目描述

小 E 喜欢上了一款叫做《晒了个晒》的游戏。这个游戏有一个牌堆和 nn 个可以从栈底删除元素的栈,任务是要通过游戏规则将所有的卡牌消去。开始时牌堆中有 mm 张卡牌,从上到下的图案分别是 a1,a2,,ama_1, a_2, \ldots, a_m。所有的卡牌一共有 kk 种图案,从 11kk 编号。牌堆中每一种图案的卡牌都有偶数张。开始时所有的栈都是空的。这个游戏有两种操作:

  • 选择一个栈,将牌堆顶上的卡牌放入栈的顶部。如果这么操作后,这个栈最上方的两张牌有相同的图案,则会自动将这两张牌消去。
  • 选择两个不同的栈,如果这两个栈栈底的卡牌有相同的图案,则可以将这两张牌消去,原来在栈底上方的卡牌会成为新的栈底。如果不同,则什么也不会做。

这个游戏一共有 TT 关,小 E 一直无法通关。请你帮小 E 设计一下游戏方案,即对于游戏的每一关,给出相应的操作序列使得小 E 可以把所有的卡牌消去。

输入格式

从文件 meow.in 中读入数据。

第一行包含一个正整数 TT,表示数据组数。

接下来一共 TT 组数据,在每组数据中:

第一行包含三个正整数 n,m,kn, m, k,分别表示栈的个数、卡牌的个数、卡牌上图案的种类。

第二行包含 mm 个正整数,分别表示 a1,a2,,ama_1, a_2, \ldots, a_m,分别从上到下表示牌堆中卡牌的图案。

输入数据保证有解。

输出格式

输出到文件 meow.out 中。

对于每一组数据,输出若干行。

其中第一行包含一个正整数 opop,表示操作的次数。你需要保证 mop2×mm \le op \le 2 \times m

接下来 opop 行,每行包含两个或三个正整数,整数之间用一个空格隔开。

  • 若为两个整数 1 s,则进行一次第一个操作并选择栈 ss
  • 若为三个整数 2 s1 s2,则进行一次第二个操作并选择栈 s1s_1s2s_2

你需要保证 1s,s1,s2n1 \le s, s_1, s_2 \le n,且 s1s2s_1 \neq s_2

1
2 4 2
1 2 1 2
5
1 1
1 1
1 2
2 1 2
1 1

数据规模与约定

对于所有数据,保证 T100T \le 100n2n \ge 2m2×104m \le 2 \times 10^4k50k \le 50

输入数据保证有解,且每种图案的卡牌都有偶数张。