P1011

[NOI2003]Editor

[NOI2003]Editor

很久以前,使用 DOS 3.x3.x 的程序员们开始厌倦 EDLIN,于是纷纷改用自己编写的文本编辑器。

多年后,小明偶然找到了当时的一款文本编辑软件。经过一些简单的测试,他惊奇地发现,这款软件每秒能够完成上万次编辑操作。于是,小明决定实现一个同样高效的文本编辑器,希望你能帮助他完成这个任务。

本题中的文本编辑器定义如下:

  • 文本:由零个或多个 ASCII 码位于闭区间 [32,126][32,126] 内的字符组成的序列;
  • 光标:文本中用于指示位置的标记,可以位于文本开头、文本末尾或任意两个相邻字符之间;
  • 文本编辑器:由一段文本和该文本中的一个光标组成,并支持下列操作。若文本为空,则称该文本编辑器为空。

支持的操作如下:

操作输入格式功能
MOVE⁡(k)\operatorname{MOVE}(k)Move k将光标移动到第 kk 个字符之后。若 k=0k=0,则将光标移动到文本开头。
INSERT⁡(n,s)\operatorname{INSERT}(n,s)Insert n,随后输入字符串 ss在光标处插入长度为 nn 的字符串 ss,光标位置不变,其中 n≥1n\ge 1。
DELETE⁡(n)\operatorname{DELETE}(n)Delete n删除光标后的 nn 个字符,光标位置不变,其中 n≥1n\ge 1。
GET⁡(n)\operatorname{GET}(n)Get n输出光标后的 nn 个字符,光标位置不变,其中 n≥1n\ge 1。
PREV⁡()\operatorname{PREV}()Prev将光标向前移动一个字符。
NEXT⁡()\operatorname{NEXT}()Next将光标向后移动一个字符。

初始时,文本编辑器为空。你需要依次执行给定的所有操作,并输出每次 GET⁡\operatorname{GET} 操作取得的内容。

输入格式

第一行包含一个整数 tt,表示需要执行的操作数。

接下来输入 tt 个操作,格式如题目描述所示。

为了便于阅读,Insert 操作所插入的字符串中可能包含换行符。读取字符串时应忽略这些换行符,直到读入 nn 个非换行字符为止。除换行符外,输入中的所有字符的 ASCII 码均位于闭区间 [32,126][32,126] 内,并且行尾没有空格。

输出格式

对于每个 Get 操作,输出一行,内容为该操作取得的字符串。

样例输入

15
Insert 26
abcdefghijklmnop
qrstuv wxy
Move 15
Delete 11
Move 5
Insert 1
^
Next
Insert 1
_
Next
Next
Insert 4
.\/.
Get 4
Prev
Insert 1
^
Move 0
Get 22

样例输出

.\/.
abcde^_^f.\/.ghijklmno

数据范围

  • Move 操作不超过 5000050000 个;
  • Insert 和 Delete 操作的总数不超过 40004000;
  • Prev 和 Next 操作的总数不超过 200000200000;
  • 所有 Insert 操作插入的字符数之和不超过 2M2M,其中 1M=1024×10241M=1024\times1024;
  • 正确输出文件的长度不超过 3M3M 字节;
  • 执行 Delete 和 Get 操作时,光标后必然有足够的字符;
  • Move、Prev 和 Next 操作不会将光标移动到非法位置;
  • 输入文件保证合法。

来源与许可

本题为 NOI 2003 试题「Editor」,题面与测试数据整理自 BZOJ。

样例 1

输入

15
Insert 26
abcdefghijklmnop
qrstuv wxy
Move 15
Delete 11
Move 5
Insert 1
^
Next
Insert 1
_
Next
Next
Insert 4
.\/.
Get 4
Prev
Insert 1
^
Move 0
Get 22

输出

.\/.
abcde^_^f.\/.ghijklmno