package main import ( "bufio" "fmt" "os" "strconv" ) var sc = bufio.NewScanner(os.Stdin) func Scanner() string { sc.Scan() return sc.Text() } func main() { buf := make([]byte, 0) sc.Buffer(buf, 100000007) sc.Split(bufio.ScanWords) inf := 5000000 n, _ := strconv.Atoi(Scanner()) a := make([]bool, 10) num := 0 for i := 0; i < n; i++ { num, _ = strconv.Atoi(Scanner()) a[num] = true } if n == 10 { fmt.Println(4999999) return } p := prime(5000000) var max, min int ans := -1 for i := 0; i < len(p); i++ { if !judge(a, p[i]) { continue } else { if i == 0 { min = 1 } else { min = p[i-1] + 1 } } for j := i; j < len(p); j++ { if !judge(a, p[j]) { num = j break } if j+1 >= len(p) { max = inf } else { max = p[j+1] - 1 } } count := make([]int, 10) for k := i; k < num; k++ { add(count, p[k]) } if !judge2(a, count) { continue } ans = big(ans, max-min) } fmt.Println(ans) } func prime(n int) []int { notprime := make([]bool, n+1) prime := make([]int, 0) notprime[0] = true notprime[1] = true for i := 2; i <= n; i++ { if notprime[i] { continue } for j := 2 * i; j <= n; j += i { notprime[j] = true } } for i, j := range notprime { if !j { prime = append(prime, i) } } return prime } func judge(a []bool, n int) bool { count := make([]int, 10) add(count, n) for i := 0; i < 10; i++ { if !a[i] && count[i] > 0 { return false } } return true } func judge2(a []bool, count []int) bool { for i := 0; i < 10; i++ { if !a[i] && count[i] > 0 { return false } else if a[i] && count[i] == 0 { return false } } return true } func add(count []int, n int) { for n > 0 { count[n%10]++ n /= 10 } } func big(x int, y int) int { if x >= y { return x } else { return y } }