在 2022 年上海大学生程序设计竞赛前夕,你决定玩一些游戏来放松一下。今天,你的朋友 Tommy 向你介绍了一款名为 Nerdle 的游戏。这个游戏的目标是猜出一些等式。
Nerdle 游戏界面。
你每次可以向裁判提交一个等式。裁判会通过颜色反馈结果:
- 如果是绿色(如题目图中第一行的
+、=和5),则该数字或运算符在答案中且位置正确。 - 如果是紫色(如题目图中第一行的
4和前两个1),则该数字在答案中但位置错误。 - 如果是黑色,则该数字在答案中的任何位置都不存在,或者
- 如果你的猜测中包含的某个数字出现的次数多于它在答案中出现的次数,你将获得与答案中出现次数相等的彩色方块,其余的方块为黑色。因此,图中的第一个等式包含恰好两个
1,但它们都不在中间两个位置和最后一个位置。如果一个数字同时存在紫色和黑色方块,则可以任意选择。
玩了一会儿后,你发现自己花了很多时间仅仅是为了让等式左边等于右边。作为一名强大的竞赛选手,这太浪费时间了。你决定用计算机分析一个等式的反馈结果,从而得出所有剩余可能的等式。等式和答案有以下限制:
- 第三个和第六个字符固定为
+和=,且它们都是绿色的。 - 唯一允许的运算符是二进制加号。这里,“二进制”是指涉及两个操作数。因此,答案总是形如
??+??=?,其中?可以被一个数字(0...9)替换。 - 这里允许前导零,因此
01+02=03是一个有效的等式。
编写一个程序,根据给定的结果找出所有可能的剩余等式。
输入格式
输入包含两行,每行一个长度为 8 的字符串 $E$ 和 $C$,分别表示询问的等式和裁判返回的颜色。$C$ 由 G、P、B 组成,分别代表对应位置的绿色、紫色和黑色。
保证:
$E$ 是一个有效的等式。
$E$ 的第三个和第六个字符固定为 + 和 =,其他位置为数字(0...9)。
* $C$ 的第三个和第六个字符为 G。
输出格式
第一行输出一个整数 $R$,表示剩余可能的不同等式的数量。如果两个等式至少有一个字符不同,则认为它们是不同的。
接下来的 $R$ 行,每行输出一个字符串,表示一个符合输入的有效等式。
你可以按任意顺序输出你的解。保证至少存在一个有效的等式。
样例
输入 1
40+11=51 PBGPPGGB
输出 1
7 11+42=53 11+43=54 11+44=55 11+45=56 11+46=57 11+47=58 11+48=59
输入 2
12+46=58 GBGGPGGB
输出 2
6 11+45=56 13+43=56 15+41=56 16+40=56 16+41=57 16+43=59
输入 3
11+22=33 PBGPPGGP
输出 3
1 22+13=35
输入 4
11+22=33 BPGPPGGP
输出 4
1 22+13=35
输入 5
01+02=03 PPGPPGPP
输出 5
2 10+20=30 20+10=30
说明
从第一个和第二个样例中,可以得出图中游戏的唯一解是 11+45=56。
第三个和第四个样例相同,但黑色和紫色方块的选择方式不同。