#lydlx02x0907. 字串变换

字串变换

字串变换

题目描述

已知有两个字串 AA, BB 及一组字串变换的规则(至多 66 个规则):

A1B1A_1 \rightarrow B_1
A2B2A_2 \rightarrow B_2
...

规则的含义为:在 AA 中的子串 A1A_1 可以变换为 B1B_1A2A_2 可以变换为 B2B_2...。

变换规则

  • 一次变换只能变换一个子串
  • 如果字符串中有多个位置可以应用规则,只能选择其中一个位置进行变换
  • 变换是单向的:只能从 AiA_i 变换为 BiB_i,不能反向变换

输入格式

输入格式如下:

A B
A1 B1
A2 B2
... ...

第一行是两个给定的字符串 AABB

接下来若干行,每行描述一组字串变换的规则。

注意: 规则的数量不超过 66 个。

输出格式

若在 1010 步(包含 1010 步)以内能将 AA 变换为 BB,则输出最少的变换步数;否则输出 NO ANSWER!

数据范围

所有字符串长度的上限为 2020

输入样例

abcd xyz
abc xu
ud y
y yz

输出样例

3

样例解释

初始字符串:A="abcd"A = \text{"abcd"},目标字符串:B="xyz"B = \text{"xyz"}

变换规则:

  1. "abc""xu"\text{"abc"} \rightarrow \text{"xu"}
  2. "ud""y"\text{"ud"} \rightarrow \text{"y"}
  3. "y""yz"\text{"y"} \rightarrow \text{"yz"}

变换过程:

  1. "abcd"\text{"abcd"} 应用规则1:"abc""xu"\text{"abc"} \rightarrow \text{"xu"},得到 "xud"\text{"xud"}
  2. "xud"\text{"xud"} 应用规则2:"ud""y"\text{"ud"} \rightarrow \text{"y"},得到 "xy"\text{"xy"}
  3. "xy"\text{"xy"} 应用规则3:"y""yz"\text{"y"} \rightarrow \text{"yz"},得到 "xyz"\text{"xyz"}

共进行了 33 次变换,使得 AA 变换为 BB

注意事项

  1. 不能同时变换多个子串:例如,如果 A="aa"A = \text{"aa"}B="bb"B = \text{"bb"},规则为 "a""b"\text{"a"} \rightarrow \text{"b"},那么需要两步:

    • 第一步:"aa""ba"\text{"aa"} \rightarrow \text{"ba"}(变换第一个a)
    • 第二步:"ba""bb"\text{"ba"} \rightarrow \text{"bb"}(变换第二个a)
  2. 规则可能产生空字符串:规则中的 BiB_i 可以是空字符串(表示删除子串 AiA_i

  3. 规则可能使字符串变长或变短

  4. 10步限制:如果超过10步才能变换到目标字符串,则输出 NO ANSWER!

时空限制

  • 时间限制:1秒
  • 空间限制:64MB