func reorderColsByColPerm(_ s: inout [[Int]], _ x: Int) { let t = s for r in 0.. [Int] { s.map { row in row[x] } } func selectRow(_ s: [[Int]], _ y: Int) -> [Int] { s[y] } func solve(_ n: Int, _ k: Int, _ a: [[Int]], _ b: [[Int]]) -> [Int] { var ops: [Int] = .init(repeating: 0, count: k) _ = search(b, k, a, &ops) var ans: [Int] = [] var s = a for op in ops { let p = if op < n { selectCol(s, op) } else { selectRow(s, op-n) } if op < n { reorderColsByColPerm(&s, op) } else { reorderRowsByRowPerm(&s, op-n) } var tmp: [Int] = [] var z = op % n for _ in 1.. Bool { if k == 0 { return b == t } for i in 0.. Int { var t = p var w = p for cnt in 1... { for (i, e) in p.enumerated() { t[e-1] = w[i] } if p == t { return cnt } w = t } return 0 } func readInts() -> [Int] { readLine()!.split(separator: " ").map { s in Int(s)! } } func main() { var firstLine = readInts().makeIterator() let n: Int = firstLine.next()! let k: Int = firstLine.next()! let a: [[Int]] = (1...n).map { _ in readInts() } let b: [[Int]] = (1...n).map { _ in readInts() } let ans = solve(n, k, a, b) print(ans.count) for op in ans { if op < n { print("C \(op+1)") } else { print("R \(op+1-n)") } } } main()