#P16303. [Ucpc2022初赛]SCV 链
[Ucpc2022初赛]SCV 链
题目描述
在区块链咨询公司 SCVSoft 中,有两台施工机器人(SCV)工作,它们分别叫作 A 和 B。
一天,两台机器人决定玩一个“制作区块链”的游戏。规则如下。
- 给 个木块分别编号为 ,并让两台机器人各持有其中 个木块。
- 从机器人
A开始,两台机器人轮流执行一次操作。每次可以选择以下两种操作之一:- BLOCK: 将自己持有的一个木块放到地面上;
- CHAIN: 将自己持有的一个木块叠在对方上一次放下的木块上。新木块的编号必须大于对方上一次放下的木块编号。
- 游戏刚开始时,还不存在对方上一次放下的木块,因此
A的第一次操作必须是BLOCK。 - 两台机器人各执行恰好 次操作、用完各自的全部木块后,游戏结束。
由于 BLOCK 操作代表一条新区块链的开始,每当执行 BLOCK 操作时,机器人都会把执行者和木块编号发送到数据库中。数据库按请求到达的顺序保存记录。
现在给出数据库中保存的所有 BLOCK 操作记录。假设通信完全没有出错,请判断这些记录是否可能来自某次合法游戏。
若可能,你还需要在给定记录之间适当补入 CHAIN 操作,构造出包含全部 次操作的完整游戏记录。
输入格式
第一行包含两个整数 ,其中 表示数据库中保存的 BLOCK 操作数量。
接下来 行,每行是一条 BLOCK 记录,格式为:
<robot> BLOCK <number>
其中:
<robot>为机器人名称A或B;<number>为该机器人放下的木块编号。
记录按照数据库中的保存顺序给出。
保证:
- 第一条记录一定是机器人
A的操作; - 所有出现的木块编号均在 到 之间;
- 所有出现的木块编号互不相同。
输出格式
若给定记录不可能来自合法游戏,输出:
NO
否则,先输出:
YES
然后输出 行完整操作记录。原有的 BLOCK 记录必须按照输入中的顺序出现,只能在它们之间插入 CHAIN 操作。
CHAIN 操作的格式为:
<robot> CHAIN <number>
若存在多种合法完整记录,输出任意一种即可。
数据范围
- ;
- 。
样例 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