import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { static int[] minimumZooNumbers(int m, int n, char[] t, int[] s, int[] d) { // Return a list of length n consisting of the answers Map> source = new HashMap<>(); Map> destination = new HashMap<>(); for (int i = 0; i < t.length; i++) { int src = s[i]; int dst = d[i]; char animal = t[i]; if (!source.containsKey(src)) { source.put(src, new ArrayList<>()); } if (!destination.containsKey(dst)) { destination.put(dst, new ArrayList<>()); } source.get(src).add(animal); destination.get(dst).add(animal); } int[] maximumAnimalTransported = new int[m + 1]; List travelling = new ArrayList<>(); maximumAnimalTransported[0] = 0; for (int i = 1; i <= m; i++) { List offLoading = destination.get(i); int max = pickMax(offLoading); maximumAnimalTransported[i] = maximumAnimalTransported[i - 1] + max; if (offLoading != null) { travelling.removeAll(offLoading); } if (source.containsKey(i)) { travelling.addAll(source.get(i)); } } int[] minimumZooNum = new int[n]; int zoo = 2; int i=1; for(; i<= n && zoo<=m;) { while (maximumAnimalTransported[zoo] >= i) { minimumZooNum[i-1] = zoo; i++; } zoo++; } for(int j = i + 1; j<= n; j++) { minimumZooNum[j-1] = -1; } return minimumZooNum; } private static int pickMax(List offLoading) { if (offLoading == null) { return 0; } int[] animals = new int[4]; for (Character character : offLoading) { if (character == 'E') { animals[0] += 1; } else if (character == 'D') { animals[1] += 1; } else if (character == 'C') { animals[2] += 1; } else if (character == 'M') { animals[3] += 1; } } return Math.max(animals[0] + animals[2], animals[1] + animals[3]); } public static void main(String[] args) { Scanner in = new Scanner(System.in); int cases = in.nextInt(); for (int a0 = 0; a0 < cases; a0++) { int m = in.nextInt(); int n = in.nextInt(); char[] t = new char[n]; for (int t_i = 0; t_i < n; t_i++) { t[t_i] = in.next().charAt(0); } int[] s = new int[n]; for (int s_i = 0; s_i < n; s_i++) { s[s_i] = in.nextInt(); } int[] d = new int[n]; for (int d_i = 0; d_i < n; d_i++) { d[d_i] = in.nextInt(); } int[] result = minimumZooNumbers(m, n, t, s, d); for (int i = 0; i < result.length; i++) { System.out.print(result[i] + (i != result.length - 1 ? " " : "")); } System.out.println(""); } in.close(); } }