#P6942. [ICPC 2018 WF] Comma Sprinkler

[ICPC 2018 WF] Comma Sprinkler

Description

正如实践会告诉你的那样,英语中逗号的使用规则复杂、令人沮丧且常常模棱两可。许多人,甚至是英语母语者,在实践中会忽略它们,并应用自定义规则,或者根本不使用规则。

逗号洒水器博士通过制定一套规则解决了这个问题,这些规则在句子中洒上逗号,既不含糊也不简单。在这个问题中,你将帮助洒水器博士编写一个算法来自动应用她的规则。

洒水器博士为现有文本添加逗号的规则如下:

  1. 如果文本中的某个单词前面有逗号,则找到该单词在文本中的所有出现位置,并在每个出现位置前加上逗号,除非该出现位置是句子的第一个单词或已经有逗号在前。

  2. 如果文本中的某个单词后面有逗号,则找到该单词在文本中的所有出现位置,并在每个出现位置后加上逗号,除非该出现位置是句子的最后一个单词或已经有逗号在后。

  3. 重复应用规则 11 和规则 22,直到无法再使用它们添加新的逗号为止。

例如,考虑以下文本:

please sit spot. sit spot, sit. spot here now here.

因为在第二个句子中,spot 后面有逗号,所以在第三个句子中的 spot 后面也应加上逗号(但不是第一个句子,因为它是该句子的最后一个单词)。此外,因为在第二个句子中,sit 前面有逗号,所以在第一个句子中的该单词前也应加上逗号(但不在第二个句子开头的 sit 前加逗号,因为它是该句子的第一个单词)。最后,注意到一旦在第三个句子中的 spot 后加上逗号,here 的第一个出现位置前就有逗号。因此,也在 here 的其他出现位置前加上逗号。没有更多逗号可以添加,所以最终结果是:

please, sit spot. sit spot, sit. spot, here now, here.

Input Format

输入包含一行文本,至少包含 22 个字符,最多包含 10610^6 个字符。每个字符均为小写字母、逗号、句号或空格。我们定义一个单词为文本中最大长度的字母序列。文本遵循以下约束:

  • 文本以一个单词开头。

  • 文本中的每两个单词之间,要么有一个空格,要么有一个逗号后跟一个空格,要么有一个句号后跟一个空格(表示一个句子的结束和新句子的开始)。

  • 文本的最后一个单词后面跟一个句号,没有尾随空格。

Output Format

输出应用洒水器博士算法后的文本结果。

please sit spot. sit spot, sit. spot here now here.

please, sit spot. sit spot, sit. spot, here now, here.

one, two. one tree. four tree. four four. five four. six five.

one, two. one, tree. four, tree. four, four. five, four. six five.

Hint

时间限制:原题 88 秒,依据评测机性能改为 66 秒。

内存限制:1024MB\text{1024MB}

题面翻译由 ChatGPT-4o 提供。