#!/bin/python3 from itertools import combinations import sys def minimumZooNumbers(m, n, t, s, d): tups = [i for i in zip(t,s,d)] tups.sort(key=lambda x:x[2]) overlap = lambda x,y: not (x[0] >= y[1] or x[1]<=y[0]) join = lambda x,y: x[0] == y[0] or not overlap(x[1:],y[1:]) adjlist = {i:[] for i in range(len(tups))} edgelist = [] for i in range(len(tups)): for j in range(i+1,len(tups)): if join(tups[i],tups[j]): adjlist[i].append(j) adjlist[j].append(i) edgelist.append({i,j}) k = 2 answer = [min(d)] cliques = edgelist.copy() while cliques: best_clique = min(cliques,key = lambda x:max(list(x))) answer.append(tups[max(list(best_clique))][2]) k_cliques = set() for i,j in combinations(cliques, 2): l = list(i ^ j) if len(l) == 2 and l[1] in adjlist[l[0]]: k_cliques.add(tuple(i|j)) cliques = list(map(set,k_cliques)) k+=1 while len(answer) < n: answer.append(-1) return answer """diccy = {(s[i],d[i],i):[j for j in range(len(s)) if t[i]==t[j] or not overlap([s[i],d[i]], [s[j],d[j]])] for i in range(len(s))}""" #find cliques of size k in range(1, [k+2->n]) return [0] # Return a list of length n consisting of the answers if __name__ == "__main__": cases = int(input().strip()) for a0 in range(cases): m, n = input().strip().split(' ') m, n = [int(m), int(n)] t = input().strip().split(' ') for i,j in enumerate(t): if j == 'E' or j == 'C': t[i] = 0 if j == 'D' or j == 'M': t[i] = 1 s = list(map(int, input().strip().split(' '))) d = list(map(int, input().strip().split(' '))) result = minimumZooNumbers(m, n, t, s, d) print (" ".join(map(str, result)))