import copy N,K = map(int,input().split()) A = [list(map(int,input().split())) for _ in range(N)] A = [[A[i][j]-1 for j in range(N)] for i in range(N)] B = [list(map(int,input().split())) for _ in range(N)] B = [[B[i][j]-1 for j in range(N)] for i in range(N)] C = copy.deepcopy(B) def inv_b(b): c = [(b[i],i) for i in range(N)] c = sorted(c,key=lambda x:x[0]) c = [c[i][1] for i in range(N)] return c def row_tr(b): global B,C for k in range(N): for j1 in range(N): C[b[k]][j1] = B[k][j1] B = copy.deepcopy(C) def col_tr(b): global B,C for k in range(N): for i1 in range(N): C[i1][b[k]] = B[i1][k] B = copy.deepcopy(C) ans = [] def dfs(x,i): global A,B,C,ans if len(ans)>K: return False flag = True for i in range(N): for j in range(N): if A[i][j]!=B[i][j]: flag = False break if not flag:break if flag: return flag for y in ["R","C"]: for j in range(N): if y=="R": b = [0]*N for k in range(N): b[k] = B[j][k] row_tr(b) else: b = [0]*N for k in range(N): b[k] = B[k][j] col_tr(b) ans.append((y,j+1)) flag = dfs(y,j) if flag: return flag if y=="R": row_tr(inv_b(b)) else: col_tr(inv_b(b)) ans.pop() return False flag = False for x in ["R","C"]: for i in range(N): if x=="R": b = [0]*N for k in range(N): b[k] = B[i][k] row_tr(b) else: b = [0]*N for k in range(N): b[k] = B[k][i] col_tr(b) ans.append((x,i+1)) flag = dfs(x,i) if flag:break if x=="R": row_tr(inv_b(b)) else: col_tr(inv_b(b)) ans.pop() if flag:break print(len(ans)) for x,i in ans: print(x,i)