#P1628. Deduction

Deduction

描述

SS 是一个由 52 个声明组成的集合,这些声明由小写字母('a', 'b', ..., 'z')和大写字母('A', 'B', ..., 'Z')表示。这些声明彼此并非完全独立,并且从其中一些声明可以推导出其他声明。我们用 “=>” 表示这种推导关系。例如,a=>ba => b 表示从声明 aa 可以推导出声明 bbb=>cb => c 表示从声明 bb 开始可以推导出声明 cc。并且从 a=>ba => bb=>cb => c,我们还能得到 a=>bca => bc,这意味着从 aa 可以推导出 bbcc。再看一些进一步的例子:abc=>deabc => de 表示从 aabbcc 可以推导出 ddeebc=>fghbc => fgh 表示从 bcbc 可以推导出 fghfgh。并且从 abc=>deabc => debc=>fhgbc => fhg,我们最终可以得到 abc=>defghabc => defgh,甚至更进一步,我们可以得到 abc=>abcdefghabc => abcdefgh

现在给定 mm 个推导关系,这些关系以 S1=>S2S1 => S2 的形式表示,S1S1S2S2 是集合 SS 的子集,同时给定 nn 个查询,每个查询包含集合 SS 的一个子集 QQ。你的任务是根据给定的推导关系,找出从 QQ 可以推导出的所有声明。

输入

输入将包含 m+n+1m + n + 1 行。第一行包含两个正整数 mmnnmm 小于 200,nn 小于 1000)。接下来的 mm 行,每行包含一个推导关系。最后 nn 行,每行包含一个查询。

可以看到,在 S1S1S2S2QQ 中的声明之间没有空格。并且在 S1S1 和 “=>” 之间以及 “=>” 和 S2S2 之间有一个空格。可以确定 S1S1S2S2QQ 中的声明数量不超过 52。

输出

对于每个查询,输出该查询的答案。输出的元素应按照 [a, b, c, ..., y, z, A, B, C, ..., Y, Z] 的顺序排列。

输入数据 1

2 1
abc => de 
bcb => FGh
abc

输出数据 1

abcdehFG

来源

POJ 阿喀琉斯