#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool d[10] = { false }; bool bo[5000050] = { false }; vector> vec(10); int main() { int n; cin >> n; for (int i = 0; i < n; i++) { int a; cin >> a; d[a] = true; } bo[1] = true; for (int i = 2; i <= 5000000; i++) { if (!bo[i]) { for (int j = i + i; j <= 5000000; j += i) { bo[j] = true; } int i1 = i; bool d1[10] = { false }; while (i1 > 0) { if (!d1[i1 % 10]) { vec[i1 % 10].emplace_back(i); d1[i1 % 10] = true; } i1 /= 10; } } } long long ans = -1; for (int i = 1; i <= 5000000; i++) { if (!bo[i - 1]) { long long m = 5000001; bool b = true; for (int j = 0; j < 10; j++) { if (!d[j]) { auto itr = lower_bound(vec[j].begin(), vec[j].end(), i); if (itr != vec[j].end()) { if (m > * itr) { m = *itr; } } } } for (int j = 0; j < 10; j++) { if (d[j]) { auto itr = lower_bound(vec[j].begin(), vec[j].end(), i); if (itr == vec[j].end()) { b = false; } else { if (*itr >= m) { b = false; } } } } if (b) { if (ans < m - i - 1) { ans = m - i - 1; } } } } cout << ans << endl; }