Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:0.23 s 空间限制:233 MB

#2781. Lyndon 分解

Statistics

题目描述

这是一道模板题。

读入一个由大小写英文字母或数字组成的字符串 $s$ ,请把这个字符串分成若干部分 $s=s_1s_2s_3\dots s_m$,使得每个 $s_i$ 都是 Lyndon Word,且 $\forall 1\leq i <n:si \geq s{i+1}$。输出 $s_1$ 到 $s_m$ 这些串长度的右端点的位置。位置编号为 $1$ 到 $n$。

一个字符串 $s$ 是一个 Lyndon Word 表示 $s$ 是其所有后缀中的最小者。

输入格式

一行一个长度为 $n$ 的仅包含大小写英文字母或数字的字符串 $s$。

输出格式

一行若干个整数,第 $i$ 个表示 $s_i$ 的右端点在 $s$ 中的位置。

样例 1

input

ababa

output

2 4 5

样例 2

input

bbababaabaaabaaaab

output

1 2 4 6 9 13 18

样例 3

input

azAZ0129

output

2 4 8

数据范围与提示

$1 \leq |s|\leq 2^{20} $