N = gets.to_i A = gets.split.map(&:to_i).sort C = A.tally C.default = 0 ans = 0 def f(nums) c = nums.tally c.default = 0 m = nums.max 0.upto(m) do |x| return [false, x] if c[x] <= 1 end [true, m + 1] end res, v = f(A) if res puts v else idx = A.rindex { |a| a > v } if idx.nil? puts v else A[idx] = v _, v = f(A) puts v end end