#CF1986C. 更新查询

更新查询

C. 更新查询

  • 时间限制:每个测试点 22
  • 内存限制:每个测试点 256256 兆字节

考虑下面这个简单的问题。给定一个长度为 nn 的字符串 ss,由小写拉丁字母组成;一个长度为 mm 的索引数组 ind\text{ind}1indin1 \le \text{ind}_i \le n);以及一个长度为 mm 的字符串 cc,由小写拉丁字母组成。然后,按顺序执行更新操作:在第 ii 次操作中,将 sindis_{\text{ind}_i} 设置为 cic_i。注意,你从第一次操作到第 mm 次操作执行所有 mm 次操作。

当然,如果你改变索引数组 ind\text{ind} 中索引的顺序和/或字符串 cc 中字母的顺序,你可以得到不同的结果。求出在你可以任意重排索引数组 ind\text{ind} 和字符串 cc 中的字母的情况下,经过 mm 次更新操作后能得到的最小字典序的字符串 ss

字符串 aa 字典序小于字符串 bb 当且仅当满足下列条件之一:

  • aabb 的前缀,但 aba \ne b
  • aabb 第一个不同的位置上,aa 中的字符在字母表中比 bb 中的对应字符更靠前。

输入

每个测试包含多组输入数据。第一行包含一个整数 tt1t1041 \le t \le 10^4)——输入数据的组数。接下来是每组数据的描述。

每组数据的第一行包含两个整数 nnmm1n,m1051 \le n, m \le 10^5)——字符串 ss 的长度和更新次数。

每组数据的第二行包含一个长度为 nn 的字符串 ss,由小写拉丁字母组成。

每组数据的第三行包含 mm 个整数 ind1,ind2,,indm\text{ind}_1, \text{ind}_2, \dots, \text{ind}_m1indin1 \le \text{ind}_i \le n)——索引数组 ind\text{ind}

每组数据的第四行包含一个长度为 mm 的字符串 cc,由小写拉丁字母组成。

保证所有输入数据组的 nn 之和不超过 21052 \cdot 10^5。同样,所有输入数据组的 mm 之和不超过 21052 \cdot 10^5

输出

对于每组输入数据,输出通过重排索引数组 ind\text{ind} 和字符串 cc 中的字母所能得到的最小字典序的字符串 ss

示例

输入

4
1 2
a
1 1
cb
4 4
meow
1 2 1 4
zcwz
7 4
abacaba
1 3 5 7
damn
7 10
traktor
7 6 5 4 3 2 1 6 4 2
codeforces

输出

b
cwoz
abdcmbn
ccdeefo

  • 在第一组数据中,你可以保持索引数组和字符串 cc 不变,直接按该顺序执行所有操作。
  • 在第二组数据中,你可以设置 ind=[1,1,4,2]\text{ind} = [1,1,4,2]c="zczw"c = \text{"zczw"}。那么字符串 ss 的变化过程为:$\text{meow} \rightarrow \text{zeow} \rightarrow \text{ceow} \rightarrow \text{ceoz} \rightarrow \text{cwoz}$。
  • 在第三组数据中,你可以保持索引数组不变,并设置 c="admn"c = \text{"admn"}。那么字符串 ss 的变化过程为:$\text{abacaba} \rightarrow \text{abacaba} \rightarrow \text{abdcaba} \rightarrow \text{abdcmba} \rightarrow \text{abdcmbn}$。