#M1011. Editing Word

Editing Word

当前没有测试数据。


小明有一台老旧的电脑,其文本编辑功能非常有限,仅支持以下几种特定的操作。你需要编写一个程序,模拟这些操作,最终输出文档的最终内容。

操作列表

所有操作的输入不包含 <> 符号。

  1. 数字 N (1-26)

    • 功能:在当前光标位置插入一个字符。
    • 细节
      • 1 对应 'a' 或 'A',2 对应 'b' 或 'B',以此类推,直到 26 对应 'z' 或 'Z'。
      • 字符的大小写取决于当前的大小写锁定状态 (cap / ucap)shift 状态 (shift)
        • 如果处于大写锁定 (cap) 状态,所有输入的字符都为大写。
        • 如果没有大写锁定
          • 如果 shift 键处于激活状态 (shift),输入的字符为大写。
          • 如果 shift 键处于未激活状态,输入的字符为小写。
    • 光标移动:插入字符后,光标向右移动一位。
  2. bk

    • 功能:删除光标前的一个字符。
    • 细节:如果光标位于文档开头(即没有字符在光标前),此操作不执行任何动作。
    • 光标移动:删除字符后,光标向左移动一位。
  3. mv x

    • 功能:将光标移动到第 x 个字符的后面。
    • 细节
      • x 为整数,可能为 0。
      • 如果 x 小于 0,光标移动到文档开头(位置 0)。
      • 如果 x 大于或等于文档当前长度,光标移动到文档末尾。
    • 光标位置:移动后,光标位于索引 x 的字符之后。例如,mv 0 将光标移动到文档开头,mv 3 将光标移动到文档的第 3 个字符之后。
  4. shift

    • 功能:切换 shift 键的激活状态。
    • 细节:只有在没有大写锁定 (ucap) 的情况下,shift 操作才有效。如果当前处于大写锁定状态,shift 操作不执行任何动作。
    • 初始状态:程序开始时,shift 键为未激活状态。
  5. tab

    • 功能:在当前光标位置插入两个空格字符。
    • 光标移动:插入后,光标向右移动两位。
  6. cap

    • 功能:激活大写锁定。
    • 细节:激活后,所有后续字符输入(通过数字 N)都将强制为大写,直到解除大写锁定。此操作不影响 shift 键的内部激活状态。
  7. ucap

    • 功能:解除大写锁定。
    • 细节:解除后,字符输入的大小写将由 shift 键的状态决定。此操作不影响 shift 键的内部激活状态。
  8. f5

    • 功能:保存文档。
    • 细节:此操作在本题目中没有实际效果,不影响文档内容或状态。
  9. f1

    • 功能:将剪贴板中的内容粘贴到当前光标位置。
    • 细节:如果剪贴板为空,此操作不执行任何动作。
    • 光标移动:粘贴后,光标向右移动粘贴内容的长度。
  10. copy x

    • 功能:从当前光标位置开始,向后复制 x 个字符到剪贴板。
    • 细节
      • 如果从光标位置开始,文档剩余的字符不足 x 个,则只复制到文档末尾的所有字符。
      • 如果光标在文档末尾或没有字符可复制,剪贴板将被清空。
    • 光标移动:复制完成后,光标向右移动复制的字符数量。
  11. f2

    • 功能:保留文档的前 ⌊n÷2⌋ 位。
    • 细节n 是文档当前的长度。文档将被截断,只保留前半部分。
    • 光标移动:如果光标位置超出了新的文档长度,光标将被调整到新文档的末尾。

输入格式

第一行包含一个整数 q,表示接下来有 q 个操作。 初始时,文档为空,光标位于文档开头(位置 0),剪贴板为空,大小写锁定未激活shift未激活。 接下来的 q 行,每行表示一个操作。

输出格式

程序执行完所有 q 个操作后,输出文档的最终内容字符串。

样例

样例 #1 输入

15
1
2
shift
3
4
cap
5
mv 1
6
copy 2
f1
bk
ucap
7
tab
f2

样例 #1 输出

aBFCd

数据约定

对于 100%100\% 的数据保证:

  • 1q10001 \le q \le 1000 (操作数量)
  • 1ans10001 \le | \text{ans} | \le 1000 (ans)(|\text{ans}|) 表示最终输出字符串的长度)