3726 - 阿P的字符串变换
描述

阿P 有一个字符串 A,他的女神有一个字符串 B。为了讨女神欢心,阿P 想要把自己的字符串变换成 B,不过变换字符串有一定的规则(最多六个):
A_1 -> B_1
A_2 -> B_2
……
规则的含义指:在 A 中的子串 A_1 可以变换为 B_1,A_2 可以变换为 B_2 ……
例如 A=abcd,B=xyz,变换规则为:abc->xu,ud->y,y->yz。
则此时,A 可以经过一系列的变换变为 B,变换过程为:abcd -> xud -> xy -> xyz,共进行了 3 次变换,使得 A 变换为 B。
每一步操作:在当前字符串中选取某条规则,把该规则左部 A_i 在原串中某一处出现替换成 B_i(一次只替换一处)。

输入

第一行两个字符串 A 和 B,中间用空格分隔。
接下来若干行(不超过 6 行),每行两个字符串 A_i 和 B_i,中间用空格分隔,表示一条变换规则。
(所有字符串仅由可见字符组成、不含空格,长度均不超过 20。)

输出

如果能在 10 步内(含 10 步)将 A 变换为 B,则输出最少的变换步数;
否则输出 "NO ANSWER!"(不含引号)。

样例

输入

abcd xyz
abc xu
ud y
y yz

输出

3
提示

把每个字符串看作状态,每一步枚举所有规则、在字符串中枚举该规则左部的每一处出现进行替换,得到后继状态。以 A 为起点做 BFS,第一次到达 B 的层数即为最少步数;若层数超过 10 仍未到达 B(或队列在深度 10 内耗尽),输出 NO ANSWER!。为避免爆搜,可对替换后字符串长度做适当限制。注意同一规则在串中可能有多处(含重叠)出现,都要作为后继扩展。

来源
51nod 3040
标签
题目参数
时间限制 1 秒
内存限制 128 MB
提交次数 1
通过次数 1