from bisect import bisect_left, bisect_right def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 A = input[idx:idx+N] s_set = set(A) sieve_limit = 5000000 primes = [] sieve = [True] * (sieve_limit + 1) sieve[0] = sieve[1] = False for i in range(2, int(sieve_limit**0.5) + 1): if sieve[i]: sieve[i*i::i] = [False] * len(sieve[i*i::i]) for i in range(sieve_limit + 1): if sieve[i]: primes.append(i) valid_primes = [] invalid_primes = [] for p in primes: p_str = str(p) valid = True for c in p_str: if c not in s_set: valid = False break if valid: valid_primes.append(p) else: invalid_primes.append(p) invalid_primes = [0] + invalid_primes + [5000001] valid_primes.sort() s = set(s_set) max_diff = -1 for i in range(len(invalid_primes) - 1): prev = invalid_primes[i] next_ = invalid_primes[i+1] a = prev + 1 b = next_ - 1 if a > b: continue left = bisect_left(valid_primes, a) right = bisect_right(valid_primes, b) primes_in_range = valid_primes[left:right] if not primes_in_range: continue current_digits = set() for p in primes_in_range: current_digits.update(str(p)) if len(current_digits) == len(s): break if current_digits == s: current_diff = b - a if current_diff > max_diff: max_diff = current_diff print(max_diff if max_diff != -1 else -1) if __name__ == "__main__": main()