题目描述
给定一个仅由拉丁字母表前三个字母组成的字符串 ,即字符串中的每个字符要么是 、,要么是 。
同时给定需要在字符串上执行的 个操作。每个操作提供两个字母 和 (来自拉丁字母表的前三个字母),对于每个操作,必须执行以下两种操作之一:
- 将字符串 中任意一个字母 的出现更改为字母 (如果至少存在一个字母 的出现);
- 不执行任何操作。
目标是以给定的顺序执行所有操作,使得字符串 在字典序上最小。
回忆一下,字符串 在字典序上小于字符串 当且仅当以下条件之一成立:
- 是 的前缀,但 ;
- 在 和 第一个不同的位置上, 中的字母在字母表中比 中对应的字母更靠前。
输入格式
每个测试包含多个测试用例。第一行包含一个整数 ()——测试用例的数量。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 ()——字符串 的长度和操作的数量。
每个测试用例的第二行给出字符串 —— 一个恰好由 个字符组成的字符串,每个字符是 、 或 。
每个测试用例接下来的 行包含操作的描述。每行包含两个字符 和 ,每个字符是 、 或 。
输入的其他约束:
- 所有测试用例的 之和不超过 ;
- 所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出通过给定操作可以从 获得的字典序最小的字符串。
3
2 2
cb
c b
b a
10 10
bbbbbbbbbb
b a
b c
c b
b a
c a
b c
b c
b a
a b
c a
30 20
abcaababcbbcabcbbcabcbabbbbabc
b c
b c
c a
b c
b c
b a
b c
b c
b a
b a
b a
b a
c a
b c
c a
b c
c a
c a
b c
c b
ab
aaaaabbbbb
aaaaaaaaaaaaaaabbbabcbabbbbabc
样例解释
在第一个测试用例中,需要对第一个字母应用两个操作:
- 第一次操作后,( s = "bb" );
- 第二次操作后,( s = "ab" )。
在第二个测试用例中,字符串的变化过程如下:
- "bbbbabbbbbb"(修改第5个字母);
- "cbbbabbbbbb"(修改第1个字母);
- "cbbbabbbbbb"(未执行任何操作);
- "cbbaabbbbbb"(修改第4个字母);
- "abbaabbbbbb"(修改第1个字母);
- "abcaabbbbbb"(修改第3个字母);
- "abcaabbbbbb"(未执行任何操作);
- "aacaabbbbbb"(修改第2个字母);
- "aacaabbbbbb"(未执行任何操作);
- "aaaaabbbbbb"(修改第3个字母)。