← Home
write a go solution for Description:
You are given a string s of length n, containing lowercase Latin letters.

Next you will be given a positive integer k and two arrays, l and r of length k.

It is guaranteed that the following conditions hold for these 2 arrays:

- l_1=1;
- r_k=n;
- l_i<=r_i, for each positive integer i such that 1<=i<=k;
- l_i=r_i-1+1, for each positive integer i such that 2<=i<=k;

Now you will be given a positive integer q which represents the number of modifications you need to do on s.

Each modification is defined with one positive integer x:

- Find an index i such that l_i<=x<=r_i (notice that such i is unique).
- Let a=min(x,r_i+l_i-x) and let b=max(x,r_i+l_i-x).
- Reverse the substring of s from index a to index b.

Reversing the substring [a,b] of a string s means to make s equal to s_1,s_2,...,s_a-1,s_b,s_b-1,...,s_a+1,s_a,s_b+1,s_b+2,...,s_n-1,s_n.

Print s after the last modification is finished.

Input Format:
Each test contains multiple test cases. The first line contains a single integer t (1<=t<=10^4) — the number of test cases. Description of the test cases follows.

The first line of each test case contains two integers n and k (1<=k<=n<=2*10^5) — the length of the string s, and the length of arrays l and r.

The second line of each test case contains the string s (|s|=n) containing lowercase Latin letters — the initial string.

The third line of each test case contains k positive integers l_1,l_2,...,l_k (1<=l_i<=n) — the array l.

The fourth line of each test case contains k positive integers r_1,r_2,...,r_k (1<=r_i<=n) — the array r.

The fifth line of each test case contains a positive integer q (1<=q<=2*10^5) — the number of modifications you need to do to s.

The sixth line of each test case contains q positive integers x_1,x_2,...,x_q (1<=x_i<=n) — the description of the modifications.

It is guaranteed that the sum of n over all test cases does not exceed 2*10^5.

It is guaranteed that the sum of q over all test cases does not exceed 2*10^5.

It is guaranteed that the conditions in the statement hold for the arrays l and r.

Output Format:
For each test case, in a new line, output the string s after the last modification is done.

Note:
In the first test case:

The initial string is "abcd". In the first modification, we have x=1. Since l_1=1<=x<=r_1=2, we find the index i=1. We reverse the substring from index x=1 to l_1+r_1-x=1+2-1=2. After this modification, our string is "bacd".

In the second modification (and the last modification), we have x=3. Since l_2=3<=qx<=qr_2=4, we find the index i=2. We reverse the substring from index x=3 to l_2+r_2-x=3+4-3=4. After this modification, our string is "badc".

In the second test case:

The initial string is "abcde". In the first modification, we have x=1. Since l_1=1<=x<=r_1=1, we find the index i=1. We reverse the substring from index x=1 to l_1+r_1-x=1+1-1=1. After this modification, our string hasn't changed ("abcde").

In the second modification, we have x=2. Since l_2=2<=x<=r_2=2, we find the index i=2. We reverse the substring from index x=2 to l_2+r_2-x=2+2-2=2. After this modification, our string hasn't changed ("abcde").

In the third modification (and the last modification), we have x=3. Since l_3=3<=x<=r_3=5, we find the index i=3. We reverse the substring from index x=3 to l_3+r_3-x=3+5-3=5. After this modification, our string is "abedc".. Output only the code with no comments, explanation, or additional text.