#P16166. [Ncpc2024]Guessing Passwords猜密码

[Ncpc2024]Guessing Passwords猜密码

题目描述

Ingfríður 正在测试她的新网站 Passwordle。它的规则类似 Wordle:网站会选择一个秘密密码,玩家不断猜测,猜得越少得分越高。

密码长度为 NN。每次猜测都必须是一个长度为 NN 的字符串。对于猜测中的每个字符,网站会给出一种颜色:

  • 若该字符与秘密密码在同一位置的字符相同,则为绿色;
  • 若该字符不匹配当前位置,但这个字符出现在秘密密码的其他位置,则为黄色;
  • 否则为灰色。

Ingfríður 很擅长自己的游戏,因此她每次都会猜一个仍有可能成为秘密密码的字符串,也就是说,她的每次猜测都会与之前得到的所有提示相容。此外,她知道程序不会生成含有重复字符的密码,并且会在猜测时利用这一点。

现在你拿到了一些她测试过程中的截图,但截图被严重压缩,你只能看清颜色,看不清具体字符。更奇怪的是,她似乎完全没有取得进展:整局游戏中没有出现任何绿色格子,而且她从第一行开始就没有发现更多字符;也就是说,每一行黄色格子的数量都相同。最后她因为沮丧而退出了。

给定这些颜色信息,你能否构造一组可能的猜测序列?如果无法构造,则说明她的程序一定有 bug。

可以假设 Ingfríður 玩游戏时不会犯错,只有她写程序时可能出错。

输入格式

第一行包含两个正整数 N,MN,M。其中 NN 是密码长度,MM 是截图中的猜测次数。

接下来有 NN 行,每行包含 MM 个字符。第 ii 行给出第 ii 次猜测的颜色。字符含义如下:

  • G 表示灰色;
  • Y 表示黄色。

保证每一行中 Y 的数量相同。字符之间没有空格。

最后一行包含一个正整数 Σ\Sigma,表示密码可用字符集的大小。

输出格式

如果不存在符合条件的猜测序列,输出:

Bugged!

否则输出 N+1N+1 行,每行 MM 个整数,整数之间用空格分隔。

NN 行表示一组猜测:如果数字 ii 表示字母表中的第 ii 个字符,那么这些行得到的颜色应当与输入给出的颜色完全一致。

N+1N+1 行表示一个可能的秘密密码。

如果存在多种可行构造,输出任意一种即可。

数据范围

  • 1N,M1001 \le N,M \le 100
  • 1Σ1061 \le \Sigma \le 10^6
  • 每一行 Y 的数量相同

样例说明

在原题第一个样例中,存在合法猜测序列。第一步 Ingfríður 猜测 3 4 2 1,这说明字符 12 出现在秘密密码中,但不在这些位置。下一次猜测 1 5 6 2 是合法的,因为它仍然可能是秘密密码。

例如 1 3 2 5 就不是合法的第二次猜测,因为她已经知道 2 不在第三个位置,并且 3 根本不应出现在密码中。

样例

输入 #1

3 4
GGYY
YGGY
GYYG
26

输出 #1

3 4 2 1 
1 5 6 2 
7 2 1 8 
2 1 9 10 

输入 #2

4 5
GYGGY
YGYGG
GGYYG
GYGGY
16

输出 #2

Bugged!