3633: 前缀(第二轮03)

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:2 解决:2

题目描述

牛牛有一个S,S串仅由 26 个小写英文字母组成,他现在将S串进行了无限次的 复制扩展成了一个无线循环串。

例如一开始S = "abc",那么牛牛就会将其变为 "abcabcabc. . . "

若某个字符串保留其原本字符出现的顺序,并且按照顺序取出若干个字符。可以 不连续,可以不取。

我们称取出的这若干个字符连成的字符串为一个子序列。

若连续取出某个字符串的前k个字符,组成一个子串,我们称该字符串为原串长 度为k的前缀。

对于一个字符串t,若某字符串的至少一个子序列为t。则称它是一个“含t序列串 牛牛想要知道对于给定的t,他想要知道S的一个最短前缀满足它是一个“含t序列  ”,它的长度有多长?

由于答案可能非常大,所以他要求你输出答案对 998244353 取余数后的结果即 可。

特别的, 如果s串不存在任何一个前缀满足他是一“含t序列串”, 请输出"-1"表 示无解。

t串中除了26 个英文字母以外还会出现"*",表示一个通配符。统配符可以视为任 意字母。

例如循环S串为"abcabcabcabc. . . ", t串为"a * ca"时,最短含t序列前缀长 4。而 当t串为"a ** ca" 时,最短含t序列前缀长 7。

除此之外, 牛牛输入的t串还可能非常非常长,最长可以达到 10^{10^5}这么长。


所以他想了一种压缩方法,来快速读入 t 串。

具体来说,它输入的串中除了"*"和 26 个小写英文字母以外,还会跟有一些正 整数。

在读入字符串时,这些数字表示它前面字母或者"*"重复的次数。 例如 a5bc*3,表示"aaaaabc***"。输入的正整数不含前导 0。

输入

第一行输入一个仅包含 26 个小写英文字母的字符串s 第二行输入一个正整数n表示, t串的数目。

接下来输入n行

再输入一行一个字符串t,表示压缩后的查询串。查询串仅包含 26 个小写英文字 母,星号'*',以及数字。

输出

对于每一个查询,如果至少存在一个的前缀满足“最短含 t 序列串”的定义,请 输出的最短含 t 序列前缀的长度对 998244353 取余数后的结果。

否则请输出"-1"表示无解。

样例输入 复制

abc 3
a*ca
a**ca
a*2ca

样例输出 复制

4
7
7

提示

【样例 1 输入】

abc 3

a*ca

a**ca

a*2ca

【样例 1 输出】

4

7

7

【样例 1 解释】

串为:abcabcabcabcabc....

包含 a*ca 作为子序列的最短前缀为 abca。

包含 a**ca 作为子序列的最短前缀为 abcabca。 a*2ca 表述的 T 串和 a**ca 等价。

【样例 2 输入】

nowcoder 2

o1000000000000000000000000000000000000000000000000000000000000

winterzz1

【样例 2 输出】

110162207

-1

【样例 2 说明】


最短t缀长 3

999999999999999999999999999999999999999999999999999999999997 , 该 数对 998244353 取余数的结果为 110162207


【数据范围】

对于前 10%的测试数据保证1 ≤ n ≤ 100, 1 ≤∣ s ∣, ∣ t ∣≤ 10 t 串中不包含数字以 ’*’。

对于前 20%的测试数据保证1 ≤ n ≤ 100, 1 ≤∣ s  ∣, ∣ t  ∣≤ 10 t 串中不包含数字 。 对于前 30%的测试数据保证1 ≤ n ≤ 1000, 1 ≤∣ s ∣, ∣ t ∣≤ 1000  t 串中不包含数 字。

对于前 60%的测试数据保证1 ≤ n ≤ 105, 1 ≤∣ s  ∣≤ 104, 1  ≤∣ t  ∣≤ 105       t  串中 的数字值域范围在[1, 109]内。

对于前 100%的测试数据保证1 ≤ n ≤ 105, 1 ≤∣ s  ∣≤ 104, 1 ≤∣ t  ∣≤ 105, ∑       ∣ t  ∣≤

106 串中的数字值域范围在 10^{10^5}内。

注意, |t|仅表示输入时的压缩串的长度,不代表解压缩后的长度,解压后t 串的 长度最长可以达到 10^{10^5}。


来源/分类