#P16303. [Ucpc2022初赛]SCV 链

[Ucpc2022初赛]SCV 链

题目描述

在区块链咨询公司 SCVSoft 中,有两台施工机器人(SCV)工作,它们分别叫作 AB

一天,两台机器人决定玩一个“制作区块链”的游戏。规则如下。

  1. 2N2N 个木块分别编号为 1,2,,2N1,2,\ldots,2N,并让两台机器人各持有其中 NN 个木块。
  2. 从机器人 A 开始,两台机器人轮流执行一次操作。每次可以选择以下两种操作之一:
    • BLOCK: 将自己持有的一个木块放到地面上;
    • CHAIN: 将自己持有的一个木块叠在对方上一次放下的木块上。新木块的编号必须大于对方上一次放下的木块编号。
  3. 游戏刚开始时,还不存在对方上一次放下的木块,因此 A 的第一次操作必须是 BLOCK
  4. 两台机器人各执行恰好 NN 次操作、用完各自的全部木块后,游戏结束。

由于 BLOCK 操作代表一条新区块链的开始,每当执行 BLOCK 操作时,机器人都会把执行者和木块编号发送到数据库中。数据库按请求到达的顺序保存记录。

现在给出数据库中保存的所有 BLOCK 操作记录。假设通信完全没有出错,请判断这些记录是否可能来自某次合法游戏。

若可能,你还需要在给定记录之间适当补入 CHAIN 操作,构造出包含全部 2N2N 次操作的完整游戏记录。

输入格式

第一行包含两个整数 N,MN,M,其中 MM 表示数据库中保存的 BLOCK 操作数量。

接下来 MM 行,每行是一条 BLOCK 记录,格式为:

<robot> BLOCK <number>

其中:

  • <robot> 为机器人名称 AB
  • <number> 为该机器人放下的木块编号。

记录按照数据库中的保存顺序给出。

保证:

  • 第一条记录一定是机器人 A 的操作;
  • 所有出现的木块编号均在 112N2N 之间;
  • 所有出现的木块编号互不相同。

输出格式

若给定记录不可能来自合法游戏,输出:

NO

否则,先输出:

YES

然后输出 2N2N 行完整操作记录。原有的 BLOCK 记录必须按照输入中的顺序出现,只能在它们之间插入 CHAIN 操作。

CHAIN 操作的格式为:

<robot> CHAIN <number>

若存在多种合法完整记录,输出任意一种即可。

数据范围

  • 1N1000001\le N\le 100\,000
  • 1M2N1\le M\le 2N

样例 1

输入

6 5
A BLOCK 8
A BLOCK 1
B BLOCK 3
B BLOCK 6
A BLOCK 4

输出

YES
A BLOCK 8
B CHAIN 9
A BLOCK 1
B CHAIN 2
A CHAIN 10
B BLOCK 3
A CHAIN 5
B BLOCK 6
A CHAIN 7
B CHAIN 11
A BLOCK 4
B CHAIN 12

样例 2

输入

4 3
A BLOCK 4
B BLOCK 2
A BLOCK 7

输出

NO