CF961F k-substrings

题目描述

给你一个由 $n$ 个小写拉丁字母组成的字符串 $s$。 我们定义 $s$ 的 $k$-子串为 $subs_{k} = s_{k} s_{k+1} \ldots s_{n+1-k}$。显然,$subs_{1}=s$,并且一共有 $n$ 个这样的子串。 我们称字符串 $t$ 是字符串 $T$ 的奇数长度真超级前后缀,若满足以下条件: - $|T| > |t|$; - $|t|$ 是奇数; - $t$ 同时是 $T$ 的前缀和后缀。 对于 $s$ 的每一个 $k$-子串($1 \le k \le n$),你需要求出其奇数长度真超级前后缀的最大长度(若不存在这样的字符串,则输出 $-1$)。

输入格式

第一行包含一个整数 $n$ $(2 \le n \le 10^{6})$,表示字符串 $s$ 的长度。 第二行包含一个由 $n$ 个小写拉丁字母组成的字符串 $s$。

输出格式

输出 $n$ 个整数,第 $i$ 个数表示 $s$ 的第 $i$ 个子串的奇数长度真超级前后缀的最大长度(如果不存在这样的字符串,则输出 $-1$),数之间用空格隔开。

说明/提示

第一个样例测试的答案如下: - 1-子串:bcabcabcabcabca - 2-子串:cabcabcabcabc - 3-子串:abcabcabcab - 4-子串:bcabcabca - 5-子串:cabcabc - 6-子串:abcab - 7-子串:bca - 8-子串:c 由 ChatGPT 5 翻译