#P1017. [CSP-S 2025] 谐音替换

[CSP-S 2025] 谐音替换

给定 nn 条有向替换规则 (si,1,si,2)(s_{i,1},s_{i,2}),每条规则左右两侧的字符串长度相等。

一次替换中,选择源字符串的一段连续子串;若它恰好等于某条规则的左侧,则将它替换为该规则的右侧,其余位置保持不变。

每个询问给出两个不同字符串,求将第一个字符串通过恰好一次替换变成第二个字符串的方法数。替换位置不同或规则编号不同均视为不同方法;重复规则也要分别计数。规则不能反向使用,也不能连续进行多次替换。两个询问字符串的长度可能不同。

输入格式

第一行包含两个整数 n,qn,q

接下来 nn 行,每行给出一条规则的两个字符串。随后 qq 行,每行给出一个询问的两个字符串。所有字符串均为非空小写字母串。

输出格式

对每个询问输出一行一个整数,表示可行的替换方法数。

样例 1

4 2
xabcx xadex
ab cd
bc de
aa bb
xabcx xadex
aaaa bbbb
2
0

样例 2

3 4
a b
b c
c d
aa bb
aa b
a c
b a
0
0
0
0

数据范围与原题特殊限制

L1L_1 为全部替换规则左右两侧字符串长度之和,L2L_2 为全部询问两侧字符串长度之和。

对于所有测试数据,保证:

  • 1n,q2×1051 \leq n, q \leq 2 \times 10^5;
  • 2L1,L25×1062 \leq L_1, L_2 \leq 5 \times 10^6;
  • 对于所有 1in1 \leq i \leq n, si,1,si,2s_{i,1}, s_{i,2} 均仅包含小写英文字母,且 si,1=si,2|s_{i,1}| = |s_{i,2}|;
  • 对于所有 1jq1 \leq j \leq q, tj,1,tj,2t_{j,1}, t_{j,2} 均仅包含小写英文字母,且 tj,1tj,2t_{j,1} \neq t_{j,2}
测试点编号 n,qn, q \leq L1,L2L_1, L_2 \leq 特殊性质
1,21, 2 10210^2 200200
353 \sim 5 10310^3 20002\,000
66 10610^6 AB
7,87, 8 10410^4 A
9,109, 10 2×1052 \times 10^5 B
11,1211, 12 2×1062 \times 10^6
13,1413, 14 5×1065 \times 10^6 A
15,1615, 16 B
172017 \sim 20

特殊性质 A:q=1q = 1

特殊性质 B:定义字符串 ss特别的,当且仅当字符串 ss 仅包含字符 aabb,且字符 bbss 中出现恰好一次。对于所有 1in1 \leq i \leq n, si,1,si,2s_{i,1}, s_{i,2} 均为特别的,且对于所有 1jq1 \leq j \leq q, tj,1,tj,2t_{j,1}, t_{j,2} 均为特别的。

来源与数据说明

原题页面。以上题意为重新整理的表述,规则、输入输出和约束与原题一致。本题使用独立生成的训练数据,原题测试点表仅说明原比赛范围与特殊性质,本包评分不复刻官方测试点分布。标准输入输出,不要求文件读写。