class Yukicoder attr_accessor :matrix NONE = 0 WIN = 1 LOSE = 2 def initialize @n = gets.to_i @matrix = Array.new(@n){ Array.new(@n, -1) } @answer = Float::INFINITY @n.times do |i| s = gets.chomp s.chars.each_with_index do |ch, j| case ch when '-' matrix[i][j] = NONE when 'o' matrix[i][j] = WIN when 'x' matrix[i][j] = LOSE end end end dfs(0, 0) puts @answer end def dfs(i, j) if @n-1 == i && @n-1 == j check else if matrix[i][j] == NONE matrix[i][j] = WIN matrix[j][i] = LOSE if j == @n-1 dfs(i+1, 0) else dfs(i, j+1) end matrix[i][j] = LOSE matrix[j][i] = WIN if j == @n-1 dfs(i+1, 0) else dfs(i, j+1) end matrix[i][j] = NONE matrix[j][i] = NONE else if j == @n-1 dfs(i+1, 0) else dfs(i, j+1) end end end end def check win_count = matrix[0].count(WIN) rank = 1 + matrix[1..-1].map{|list| list.count(WIN) || 0 }.select{|n| n > win_count}.uniq.size @answer = [@answer, rank].min end end Yukicoder.new