题目背景
死而复生,生而复死。所谓的不死鸟就是这样的一种生物,在无尽的时间里无尽地循环往复。
果然最好还是别获得不老不死的能力吧。
题目描述
不死鸟的「一生」可以被看成一个长度不超过 lmax 的字符串 S0。在无尽的轮回后形成了一个无限长的字符串 Sinf=S0+S0+S0+⋯。现在截取 Sinf 前 l 个字符,作为可观测时间里不死鸟的生命 Sfin。
然而所谓的轮回并不是机械死板的循环往复。因此,Sfin 当中会有不超过 n 个字符被修改成了别的字符,变成了 Sreal。
现在观测到了 Sreal,我们希望找到这轮回的周期 S0。然而由于不死鸟的轮回太过漫长,我们只希望找到这样一个 S0′,使得由它生成的 Sfin′ 修改不超过 m 个字符后就可以变成 Sreal。
输入格式
第一行有四个正整数 l,lmax,n,m。
第二行描述观测到的长度为 l 的字符串 Sreal。
输出格式
第一行输出一个正整数 l0,表示你所找到的 S0 的长度。你应当保证 1≤l0≤lmax。
第二行输出一个长度为 l0 的字符串 S0,表示你所找到的字符串。
提示
样例解释
样例仅供理解题意,不符合数据范围的约束。具体约束请参见「数据范围及约定」。
生成 Sreal 所用的 S0=aabcd。
- 由此生成 Sinf=aabcdaabcdaabcdaabcdaabcd⋯;
- 由此生成 Sfin=aabcdaabcdaabcdaabcdaabcd;
- 由此生成 Sreal=aaacdaabbbaabccaabcdaabcd。
样例输出给出了一个可能的 S0′=aaacd。由此计算出 Sfin′ 与 Sreal 的差距:
Sfin′=Sreal=aaacdaaacdaaacdaaacdaaacdaaacdaabbbaabccaabcdaabcd相差为 7,不超过 m=10,可以被接受。
数据范围及约定
对于全部数据,保证 l=3×105,n=3×103,m=104,1≤lmax≤105。