n = gets.to_i score = Array.new(n,0) @free = [] n.times{|i| j=0;gets.chomp.chars{|c| case c when 'o';score[i]-=1 when '-';@free<<[i,j].sort! end j+=1 } } @free.uniq! def dfs(i,score) if @free.size==i # チーム番号を保持してソート,team-Kを線形探索 k=score[0]; return score.sort.uniq.index(k)+1 else e = @free[i] s = score.clone ; s[e[0]]-=1 ra = dfs(i+1,s) s = score.clone ; s[e[1]]-=1 rb = dfs(i+1,s) return [ra,rb].min end end p dfs(0,score)