CF30E Tricky and Clever Password

题目描述

在他年幼的时候,我们故事的主人公——Copa 国王——发现自己私有数据的隐藏方式还不够安全,这对于国王来说是不可接受的。因此,他发明了一个巧妙而复杂的密码(后来他发现这个密码其实是一个奇数长度的回文串),并用它对所有数据进行了加密。 Copa 害怕自己会忘记密码,于是决定把密码写在纸上。但他也知道这样做不安全,所以他用如下方式进行了加密:他把密码开头和结尾各剪掉 $x$ 个字符($x$ 可以为 $0$,且 $2x$ 严格小于密码长度)。他得到了密码的三个部分。我们称其为 $\mathit{prefix}$、$\mathit{middle}$ 和 $\mathit{suffix}$,其中 $\mathit{prefix}$ 和 $\mathit{suffix}$ 长度相等,$\mathit{middle}$ 总是奇数长度。然后,他用这三部分拼成了一个新的字符串:$A+\mathit{prefix}+B+\mathit{middle}+C+\mathit{suffix}$,其中 $A$、$B$、$C$ 是 Copa 随意拼接(可能为空)的字符串,"$+$" 表示连接操作。 许多年过去了,直到昨天 Copa 国王才偶然发现了这张写有密码加密方式的纸条。密码以及$A$、$B$、$C$的内容,他都已完全忘记。现在,他请你帮他找出可能被他发明、加密并写下纸条上的最长的密码。

输入格式

输入包含一个只由小写英文字母组成的字符串,长度为 $1$ 到 $10^5$。

输出格式

第一行输出一个整数 $k$,表示你答案中密码的非空部分的数量($k\in\{1,2,3\}$)。接下来的 $k$ 行,每行输出两个整数 $x_{i}$ 和 $l_{i}$,分别表示该部分在输入字符串中的起始位置和长度。按照 $x_{i}$ 升序输出。每组数之间用一个空格隔开。 起始位置 $x_{i}$ 应为 $1$ 到输入字符串长度之间的整数。所有 $l_{i}$ 必须为正数,也就是说,你只能输出非空部分。中间部分必须是奇数长度。 如果有多组答案,输出任意一组都可以。注意,你的目标是最大化 $l_{i}$ 的和,而不是最大化 $k$。

说明/提示

由 ChatGPT 5 翻译