func reorderColsByColPerm(s: [][]int, x: int): [][]int var t : [][]int :: ##s for r(0,^s-1) for c(0,^s-1) do t[ r ][ s[c][x] ] :: s[r][c] end for end for ret t end func func reorderRowsByRowPerm(s: [][]int, y: int): [][]int var t: [][]int :: ##s for r(0,^s-1) for c(0,^s-1) do t[ s[y][r] ][ c ] :: s[r][c] end for end for ret t end func func isSame(a: [][]int, b: [][]int): bool for r(0,^a-1) for c(0,^a-1) if(a[r][c]<>b[r][c]) ret false end if end for end for ret true end func func search(b: [][]int, k: int, s: [][]int, v: []int): bool if(k=0) ret @isSame(b,s) end if for op(0,^b*2-1) var t: [][]int :: (op<^b) ?(@reorderColsByColPerm(s,op),@reorderRowsByRowPerm(s,op-^b)) do v[^v-k] :: op if(search(b,k-1,t,v)) ret true end if end for ret false end func func selectCol(s: [][]int, x: int): []int var p: []int :: #[^s]int for r(0,^s-1) do p[r] :: s[r][x] end for ret p end func func selectRow(s: [][]int, y: int): []int var p: []int :: #[^s]int for c(0,^s-1) do p[c] :: s[y][c] end for ret p end func func solve(n: int, k: int, a: [][]int, b: [][]int): []int var ops: []int :: #[k]int do @search(b,k,a,ops) var ans: []int :: #[0]int for i(0,^ops-1) var op: int :: ops[i] var p: []int :: (op :: #list var w: []int :: ##p var t: []int :: #[n]int var z: int :: op%n while loop(true) for j(0,n-1) do t[p[j]] :: w[j] end for var ok: bool :: true for j(0,n-1) do ok :: ok & t[j]=p[j] end for if(ok) break loop end if do z :: p[z] do tmp.add(z+op/n*n) do w :: ##t end while do ans :: tmp.toArray() ~ ans end for ret ans end func func readMat(n: int): [][]int var mat: [][]int :: #[n,n]int for r(0,n-1) for c(0,n-1) do mat[r][c] :: cui@inputInt()-1 end for end for ret mat end func func main() var n: int :: cui@inputInt() var k: int :: cui@inputInt() var a: [][]int :: @readMat(n) var b: [][]int :: @readMat(n) var ans: []int :: @solve(n,k,a,b) do cui@print((^ans).toStr() ~ "\n") for i(0,^ans-1) var op: int :: (ans[i]%n)+1 if(ans[i]