CF452E Three strings

题目描述

给定三个字符串 $ (s_{1}, s_{2}, s_{3}) $。对于每个整数 $ l $($1 \leq l \leq \min(|s_{1}|, |s_{2}|, |s_{3}|)$),你需要找出有多少组三元组 $(i_{1}, i_{2}, i_{3})$,使得三个字符串 $ s_{k}[i_{k} \ldots i_{k} + l - 1] $($k=1,2,3$)两两相等。输出所有得到的数字,结果对 $1000000007\ (10^{9}+7)$ 取模。 如果对题目中使用的一些记号不确定,请参见提示。

输入格式

前三行分别包含三个非空输入字符串。所有字符串的长度之和不超过 $3 \cdot 10^{5}$。所有字符串只包含小写英文字母。

输出格式

你需要输出 $ \min(|s_{1}|, |s_{2}|, |s_{3}|) $ 个数,用空格分隔——即每个长度 $l$ 的答案,对 $1000000007\ (10^{9}+7)$ 取模。

说明/提示

考虑一个字符串 $ t = t_{1} t_{2} \ldots t_{|t|} $,其中 $ t_{i} $ 表示字符串的第 $i$ 个字符,$ |t| $ 表示字符串的长度。 那么 $ t[i \ldots j] $($1 \leq i \leq j \leq |t|$)表示字符串 $ t $ 从第 $i$ 个字符到第 $j$ 个字符组成的子串(包括两端)。 由 ChatGPT 5 翻译