#P16498. 我该如何帮忙?

我该如何帮忙?

题目背景

瓦夏的键盘坏了,现在他只能使用鼠标输入文字。

每次操作时,他可以从字符表中复制一个字母,或者复制已经输入文本中的某个连续片段,然后将复制的内容粘贴到当前文本的末尾。由于在文本中间插入内容很容易让人混乱,瓦夏只会在文本末尾进行粘贴。

请你为瓦夏制定一份准确的操作方案,使他能够用最少的复制粘贴操作输入给定文本。

题目描述

给定一个仅由小写英文字母组成的字符串 SS,初始时已经输入的文本为空。

你可以执行以下两类操作:

  1. letter

    从字符表中复制目标字符串中当前需要输入的下一个字母,并将它添加到已输入文本的末尾。

  2. copy l r

    复制已经输入文本中从第 ll 个字符开始、到第 r1r-1 个字符结束的连续片段,并将该片段添加到已输入文本的末尾。

    字符位置从 11 开始编号。执行该操作时,被复制的整个片段必须已经存在于当前输入完成的文本中。

你需要输出一种操作次数最少的方案,使最终得到的文本恰好等于 SS

若存在多种最优方案,输出任意一种即可。

输入格式

输入一行一个字符串 SS,表示瓦夏需要输入的文本。

字符串仅由小写英文字母组成。

输出格式

第一行输出一个整数 KK,表示最少操作次数。

接下来输出 KK 行,每行描述一次操作,格式为以下两种之一:

  • letter
  • copy l r

对于 copy l r

  • ll 表示复制片段的第一个字符位置;
  • rr 表示复制片段末尾后一位的位置;
  • 实际复制的片段为 S[lr1]S[l\ldots r-1]

输出的操作按执行顺序排列。

样例

输入

abab

输出

3
letter
letter
copy 1 3

样例说明

可以按如下方式得到字符串 abab

  1. 执行 letter,得到 a
  2. 执行 letter,得到 ab
  3. 执行 copy 1 3,复制已经输入的 ab 并添加到末尾,得到 abab

总共需要 33 次操作。

数据范围

1S10000.1\le |S|\le 10\,000.

说明

原题采用文件输入输出:kmp.inkmp.out。本题已改为标准输入输出形式。

本题属于构造题。若用于允许输出任意最优方案的在线评测,需要使用特殊判题程序检查方案合法性及操作次数的最优性。