M = 5_000_000 n = gets.to_s.to_i a = gets.to_s.split.map(&.to_i) b = Array.new(10, false) a.each { |x| b[x] = true } is_prime = Array.new(M + 1, true) primes = [] of Int32 (2..M).each do |i| next unless is_prime[i] primes << i j = 2 * i while j <= M is_prime[j] = false j += i end end primes << M + 1 solve = ->(p : Int32) do res = Array.new(10, false) num = p while num > 0 res[num % 10] = true num //= 10 end res end now = Array.new(10, false) ans = -1 last = 0 (0...primes.size - 1).each do |i| c = solve.call(primes[i]) flag = false (0..9).each do |j| if c[j] && !b[j] flag = true break end end if flag (0..9).each { |j| now[j] = false } last = primes[i] next end (0..9).each { |j| now[j] = true if c[j] } if b == now candidate = primes[i + 1] - last - 2 ans = candidate if candidate > ans end end puts ans