小苯的IDE括号问题(hard)
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

注:此版本为本问题的hard(困难版),与easy(简单版)不同的是,hard有四种操作。

众所周知,通常的代码编辑器(如当前页面右侧的牛客在线编辑器)都比较智能。

如果您输入一串括号串,例如:(I) 其中的 I 代表鼠标光标。
此时如果按下键盘中的 backspace 键,整个括号都会被删掉,也就是说括号串会变成 I,只包含鼠标光标。
但是如果按下键盘中的 delete 键,那么则只会删除括号的右侧部分,也就是说括号串会变为 (I

但如果鼠标光标不处于一个匹配的括号串中间,例如:()I
此时按下 backspace 键,括号会变为 (I
此时按下 delete 键,由于光标右侧没有括号,因此括号不会发生变化。

类似的,如果括号串为:I()
此时按下 backspace 键,由于鼠标光标左侧没有括号,因此括号不会发生变化。
此时按下 delete 键,括号会变为:I)

除此之外,小苯还会按下键盘中的  和  键以移动光标。
例如括号串为 (()(I) ,此时小苯按下左移键 \leftarrow 一次,光标就会左移一次进而使得括号变为:(()I()。同理右移也是类似的。
但特别的,如果光标已经在括号串最左侧,此时按下左移键,括号串不会发生变化;同理如果光标位于括号串最右侧时按下右移键,括号串依然不会发生变化。

问题:现在小苯给了你一个长度为 n 的括号串,并且保证其中恰好出现了一个 I 字符表示鼠标光标。他想知道,在 k 次指定的操作后,括号串最终会是什么样子,请你帮帮他吧。

输入描述:

输入包含若干行。
第一行两个数字 n, k (1 \leq k \leq n \leq 2 \times 10^5),分别表示括号串的长度和操作次数。
第二行输入一行字符串表示题目所述的括号串,保证字符串仅含有:"(, ), I"(大写的字母 i )三种字符之一,且 I 字符出现且仅出现一次。。
接下来 k 行,每行输入一个字符串代表删除操作,保证字符串一定是:deletebackspace,<- 和 -> 中的一种。

输出描述:

输出包含一行一个字符串,表示括号串最终的样子。
示例1

输入

复制
10 5
((()(I))((
backspace
backspace
delete
<-
<-

输出

复制
(I((((
示例2

输入

复制
5 3
((I))
backspace
backspace
->

输出

复制
I

说明

显然括号都被删除完了。

备注:

如果无法理解题意,可以用右侧的编辑器和您的键盘进行验证。