CF1620G Subsequences Galore
题目描述
对于一个字符串序列 $ [t_1, t_2, \dots, t_m] $,我们定义函数 $ f([t_1, t_2, \dots, t_m]) $ 为至少是其中一个字符串 $ t_i $ 的子序列的不同字符串(包括空串)的个数。特别地,$ f([]) = 0 $(即空序列的函数值为 $ 0 $)。
给定一个字符串序列 $ [s_1, s_2, \dots, s_n] $,其中每个字符串仅由小写拉丁字母组成,并且**已按字典序排序**(即每个字符串由若干(可能为零)个 $\texttt a$ 开头,接着若干(可能为零)个 $\texttt b$,……,最后以若干(可能为零)个 $\texttt z$ 结尾)。
对于该序列的 $ 2^n $ 个子序列,分别计算函数 $ f $ 的值,并将结果对 $ 998244353 $ 取模后输出。
输入格式
第一行包含一个整数 $ n $($ 1 \le n \le 23 $)——表示字符串的数量。
接下来的 $ n $ 行,每行包含一个字符串 $ s_i $($ 1 \le |s_i| \le 2 \cdot 10^4 $)。每个字符串 $ s_i $ 由小写拉丁字母组成,且已按字典序排序。
输出格式
由于输出最多 $2^{23}$ 个整数会非常慢,你需要按照以下方式处理:
对于 $2^n$ 个子序列中的每一个(我们记为 $[s_{i_1}, s_{i_2}, \dots, s_{i_k}]$),计算 $f([s_{i_1}, s_{i_2}, \dots, s_{i_k}])$ 的值,将结果对 $998244353$ 取模,然后乘以 $k \cdot (i_1 + i_2 + \dots + i_k)$。输出所有 $2^n$ 个计算结果的异或值(不用对 $998244353$ 取模)。
子序列的下标 $i_1, i_2, \dots, i_k$ 采用从 $1$ 开始的编号(即从 $1$ 到 $n$)。