X = gets.to_i D = X.to_s.size $values = [] def dfs(stack, depth, counter) if depth == D $values << stack.join.to_i return end 9.downto(0) do |n| return if $values.size >= 2 next if depth == 0 && n == 0 next if counter[n] == 0 counter[n] -= 1 stack << n dfs(stack, depth + 1, counter) counter[n] += 1 stack.pop end end counter = Hash.new(0) X.digits.each do |x| counter[x] += 1 end dfs([], 0, counter) if $values.size >= 2 puts $values.last else puts -1 end