#P6166. [IOI2012] scrivener

[IOI2012] scrivener

题目描述

有些人说李奥纳多是一个对于 Johannes Gutenberg 的崇拜者,Johannes 是一个发明活字印刷的德国铁匠,为了表达尊敬,李奥纳多设计了一台机器被称为小龙虾代书,那是一个非常简单的打字设备。这机器就像一部简单的现代打字机,但只能接受两个指令。一个指令是 输出一个字符,另一个指令是取消最近的指令。小龙虾代书的最大特点就是拥有这个功能强大的取消指令。因为一个取消指令本身也是一个指令,所以也可以被取消。

说明

你的任务是作出此小龙虾代书的程序,一开始并无输出任何文字,然后开始接受使用者输入的一连串指令,并可查询目前输出文字中的特定位置的字符。详细说明如下:

  • TypeLetter(L) —附加一个小写字母L在输出文字的最后,LL 可以是 a,b,,za,b,\cdots, z

  • UndoCommands(U) — 取消之前的 UU 个指令,UU 是一个正整数。

  • GetLetter(P) — 回传在输出文字中位置为 PP 的字符,PP 是一个非负整数。 输出文字中的第一个字符的位置为 00。 (这个查询并不是一个指令,因此会被取消指令忽略。)

三种操作可以依照任何顺序被呼叫 00 次或多次以上。

指令 UndoCommands(U) 会依照原本执行的相反顺序来取消前面 UU 个指令: 如果被取消的指令是 TypeLetter(L),就会从输出文字最后面移除字母 LL。如果被取消的指令是 UndoCommands(X),那么将会依照原本执行的顺序重新执行之前被取消的 XX 个指令。

范例

我们列出一连串可能的指令,以及每次执行指令后的输出文字。

操作 回传 输出文字
TypeLetter(a) a
TypeLetter(b) ab
GetLetter(1) b
TypeLetter(d) abd
UndoCommands(2) a
UndoCommands(1) abd
GetLetter(2) d
TypeLetter(e) abde
UndoCommands(1) abd
UndoCommands(5) ab
TypeLetter(c) abc
GetLetter(2) c
UndoCommands(2) abd
GetLetter(2) d

输入格式

  • 11 行,一个正整数 NN,表示操作的个数。

  • 22N+1N+1 行,每行开始有一个大写字母参数。

  1. T 表示一个 TypeLetter 指令,后面接着一个空白和一个小写字母参数。

  2. U 表示一个 UndoCommands 指令,后面接着一个空白和一个整数参数。

  3. P 表示一个 GetLetter 指令,后面接着一个空白和一个整数参数。

输出格式

对于每项 GetLetter 操作,输出一行,一个回传的字符。

10
T c
T z
T u
T a
T i
T h
T f
T z
P 3
P 0

a
c

98
T u
T g
T p
T h
T w
P 3
P 0
T d
T d
T r
T v
T z
T w
T h
P 0
T d
T v
T b
P 9
T n
T e
P 0
T s
T i
T a
P 6
T b
T n
T m
T t
T m
T g
T y
T g
P 0
T m
P 18
T r
P 17
T w
T w
T o
T m
T m
P 0
T q
P 5
T t
P 27
P 34
T p
T f
T h
T j
T f
T l
P 3
T f
T q
T h
P 17
T w
T d
T p
T z
P 0
T m
P 10
T o
P 5
P 18
P 7
T q
T z
P 2
T u
P 10
T e
P 6
T s
T t
P 24
T s
P 0
T t
T c
P 4
T j
T o
P 5
T i
P 11
T a
T t
P 58
P 51
P 64
P 12

h
u
u
z
u
d
u
i
s
u
d
g
m
h
s
u
w
d
i
r
p
w
d
m
u
w
d
h
s
o
a
d

提示

对于 100%100\% 的数据,1N1061 \le N \le 10^6。参数 UU 保证不会超过前面已经输入的指令数目,而且参数 PP 一定小于输出文字的长度(也就是输出文字的字母数)。