CF2010C2 Message Transmission Error (hard version)

题目描述

这是一个难度较高的问题。它与简单版的区别仅在于约束条件不同。 在伯兰州立大学,服务器之间的本地网络并非总是运行无误。当连续传输两条相同的信息时,可能会发生错误,导致两条信息合并为一条。在这种合并中,第一条信息的结尾与第二条信息的开头重合。当然,合并只能发生在相同字符处。合并的长度必须是一个小于信息文本长度的正数。 例如,当连续传送两条信息```abrakadabra```时,可能会出现所述类型的错误、导致出现类似```abrakadabrakadabra```或```abrakadabrakadabra```的信息(前者在一个字符处发生合并,后者在四个字符处发生合并)。 给定接收到的报文 ```t``` ,判断这是否可能是本地网络运行中出现所述类型错误的结果,如果是,请确定可能的值 ```s``` 。 两个报文完全重叠的情况不应视为错误。例如,如果收到的报文是```abcd```,则应认为其中没有错误。同样,简单地在一条信息后附加另一条信息也不是错误的标志。例如,如果收到的信息是 ```abcabc```,也应认为其中没有错误。

输入格式

一个非空字符串 ```t``` ,该字符串由拉丁字母的小写字母组成。字符串 ```t``` 的长度不超过 ```4×10⁵``` 个字符。

输出格式

如果信息 ```t``` 不能包含错误,则在单行输出中输出 ```NO``` (不带引号)。 否则,在第一行输出```YES```(不带引号),在下一行输出字符串``` s ```(可能导致错误的信息)。如果有多个可能的答案,可以输出任意一个。

说明/提示

In the second example, a suitable answer could also be the string "acacaca".