S = gets.chomp L = S.chars.map(&:to_i) def t(nums) nums.uniq.size == 7 && nums.each_slice(2).all? { |a, b| a == b } end def f(nums) h = nums.tally h.default = 0 queue = [] 1.upto(9) do |n| g = h.dup if g[n] >= 2 g[n] -= 2 queue << g end end until queue.empty? g = queue.shift if (1..9).all? { |n| g[n] == 0 } return true end 1.upto(9) do |n| if g[n] >= 3 k = g.dup k[n] -= 3 queue << k end end 1.upto(7) do |n| if g[n] >= 1 && g[n + 1] >= 1 && g[n + 2] >= 1 k = g.dup k[n] -= 1 k[n + 1] -= 1 k[n + 2] -= 1 queue << k end end end false end 1.upto(9) do |n| next if L.count(n) == 4 nums = L.dup nums << n nums.sort! if t(nums) || f(nums) puts n end end