#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "testlib.h" using namespace std; #define rep(i,n,c) for (int i=0;i using vec = vector; template using vvec = vec>; template using vvvec = vec>; using ll = long long; using pii = pair; using pll = pair; template bool chmin(T &a, T b){ if (a>b){ a = b; return true; } return false; } template bool chmax(T &a, T b){ if (a T sum(vec x){ T res=0; for (auto e:x){ res += e; } return res; } template void printv(vec x){ for (auto e:x){ cout<>= 1; } return res; } map factorization(int n){ assert (1 <= n); assert (n <= M); map res; int p,cnt; while (n!=1){ p = spf[n]; cnt = 0; while (n%p==0){ cnt += 1; n /= p; } res[p] = cnt; } return res; } const int MIN_N = 1; const int MAX_N = 1000000; int main(int argc, char* argv[]){ registerValidation(argc,argv); ios::sync_with_stdio(false); std::cin.tie(nullptr); calc_spf(); map all_prime; int N; N = inf.readInt(MIN_N,MAX_N); inf.readEoln(); vec A(N,0); vec C(M+1,0); set check; for (int i=0;i P(0); for (auto [p,cnt]:all_prime){ P.append(pow(p,cnt)); } int n = P.size(); sort(all(P)); deque deq; deq.append({1ll,-1}); ll break_point = -1; while (!deq.empty()){ auto [v,k] = deq.front(); deq.pop_front(); for (int i=k+1;i M){ break_point = v * (ll)(P[i]); deq = {}; break; } if (C[v*P[i]]==0){ break_point = v * (ll)(P[i]); deq = {}; break; } deq.append({v*P[i],i}); } } if (break_point==-1){ cout<<-1< select_P={}; for (int i=0;i> S(k,vec(0)); for (auto a:A){ for (int i=0;i