#P1628. Deduction
Deduction
描述
是一个由 52 个声明组成的集合,这些声明由小写字母('a', 'b', ..., 'z')和大写字母('A', 'B', ..., 'Z')表示。这些声明彼此并非完全独立,并且从其中一些声明可以推导出其他声明。我们用 “=>” 表示这种推导关系。例如, 表示从声明 可以推导出声明 ; 表示从声明 开始可以推导出声明 。并且从 和 ,我们还能得到 ,这意味着从 可以推导出 和 。再看一些进一步的例子: 表示从 、 和 可以推导出 和 ; 表示从 可以推导出 。并且从 和 ,我们最终可以得到 ,甚至更进一步,我们可以得到 。
现在给定 个推导关系,这些关系以 的形式表示, 和 是集合 的子集,同时给定 个查询,每个查询包含集合 的一个子集 。你的任务是根据给定的推导关系,找出从 可以推导出的所有声明。
输入
输入将包含 行。第一行包含两个正整数 和 ( 小于 200, 小于 1000)。接下来的 行,每行包含一个推导关系。最后 行,每行包含一个查询。
可以看到,在 、 和 中的声明之间没有空格。并且在 和 “=>” 之间以及 “=>” 和 之间有一个空格。可以确定 、 和 中的声明数量不超过 52。
输出
对于每个查询,输出该查询的答案。输出的元素应按照 [a, b, c, ..., y, z, A, B, C, ..., Y, Z] 的顺序排列。
输入数据 1
2 1
abc => de
bcb => FGh
abc
输出数据 1
abcdehFG
来源
POJ 阿喀琉斯