N = 4 $a = Array.new(N) $b = Array.new(N).map{ Array.new(N, true) } $dx = [1, 0, -1, 0] $dy = [0, 1, 0, -1] def process(cx, cy, n) if n == 0 return true end v = cy * N + cx + 1 4.times do |i| x = cx + $dx[i] y = cy + $dy[i] if x < 0 || x >= N || y < 0 || y >= N next elsif !$b[y][x] next elsif v != $a[y][x] next end $b[y][x] = false if process(x, y, n - 1) return true end $b[y][x] = true end return false end fx = 0 fy = 0 n = 0 N.times do |i| $a[i] = gets.split.map(&:to_i) N.times do |j| if $a[i][j] == i * N + j + 1 $b[i][j] = false elsif $a[i][j] == 0 fx = j fy = i $b[i][j] = false else n += 1 end end end if process(fx, fy, n) puts "Yes" else puts "No" end