def main(): def made(C): l = len(C) t = 2 * p % l m = pow(t, -1, l) for i in range(l): B[C[i]] = C[(i-m)%l] def made1(C0, C1): l = len(C) t = p % l m = pow(t, -1, l) for i in range(l): B[C0[i]] = C1[i] B[C1[i]] = C0[(i-m)%l] def made2(C): l = len(C)-1 t = 2 * p % l m = pow(t, -1, l) for i in range(l): B[C[i]] = C[(i-m)%l] B[C[-1]] = C[(0-m)%l] n, p = list(map(int, input().split())) #A = list(map(lambda x: int(x), input().split())) A = list(map(lambda x: int(x)-1, input().split())) B = [-1] * n D = [[] for _ in range(n+1)] for i in range(n): if B[i] != -1: continue C = [] s = i while B[s] == -1: B[s] = -2 C.append(s) s = A[s] if len(C) == 1: B[i] = i elif len(C) % 2: made(C) else: if D[len(C)]: made1(C, D[len(C)].pop()) else: D[len(C)].append(C) for i in range(n+1): if D[i]: C = D[i][0] if len(C) == 2: B[C[0]] = C[0] B[C[1]] = C[0] else: B[C[-1]] = C[-2] made(C[:-1]) return B for _ in range(int(input())): A = main() print(*[a+1 for a in A])