题目描述
有 n 个两两互不相同的仅由小写字符构成的命令字符串 ti (1≤i≤n),你需要实现一个支持命令补全的命令行。
你的输入区是一个字符串 s,他可以接受小写字母 ’a’-’z’ 和 Tab 键 (以 ’T’ 表示),Enter 键 (以 ’E’ 表示),Backspace 键 (以 ’B’ 表示)。规则如下所述:
-
当你接受小写字符 c,将把 c 追加到输入区字符串 s 的末尾。
-
当你接受 Backspace 键,将尝试删除最后一个字符:
- 如果输入区字符串 s 为空,则不进行任何操作。
- 如果输入区字符串 s 非空,则丢弃 s 末尾的字符。
-
当你接受 Tab 键,将会对 s 进行一次智能补全,补全规则如下:
- 设以 s 为前缀的命令字符串集合为 T。
- 如果 T 为空,则不进行任何操作。
- 如果 T 非空,则把 s 置为 lcp(T)。这里 lcp 代表最长公共前缀,含义是最长的,是 T 中每一个字符串前缀的字符串。
-
当你接受 Enter 键,将会试图执行命令 s:
- 如果存在命令字符串 ti=s,则输出命令编号 i。
- 如果不存在命令字符串 ti=s,则输出 −1。
- 无论是否执行成功,清空输入区 s。
给定你接受到的输入串 p,你需要输出每个 Enter 键执行的结果。
输入格式
输入第一行为两个整数 n 和 m (1≤n≤105,1≤m≤5×106),为命令字符串的个数和输入串的长度,由空格隔开。
接下来 n 行,每行一个仅由小写字符构成的字符串 ti,为命令串。保证有 ∑i=1n∣ti∣≤106 且命令串互不相同。
最后一行为字符串 p (∣p∣=m),为输入串。保证 p 仅由 {’a’-’z’, ’T’, ’B’, ’E’} 组成。
输出格式
给定你接受到的输入串 p,你需要输出每个 Enter 键执行的结果。
7 40
kill
killall
rm
rmdir
ifconfig
ifdown
ll
kTBlEkTaTEiTcBdTElTExjtuTExjtuBBBBBrTdTE
1 2 6 7 -1 4
提示
初始时,输入区字符串s=""。
输入 ’k’ 后,输入区字符串s="k"。
输入 ’T’ 后,进行智能匹配。此时 T={"kill","killall"},lcp(T)="kill"。故输入区字符串s="kill"。
输入 ’B’ 后,输入区字符串s="kil"。
输入 ’l’ 后,输入区字符串s="kill"。
输入 ’E’ 后,因为 t1=s,所以应该输出 1。