#include #include #include #include #include #include #include #include #include #include using namespace std; vector > prime_factorization(long long N){ vector< pair > ret; for(long long i=2; i*i<=N; i++){ long long tmp = 0; while(N%i==0){ tmp++; N/=i; } if(tmp>0){ ret.push_back( make_pair(i, tmp) ); } } if(N!=1){ ret.push_back( make_pair(N, 1) ); } return ret; } int grundy(vector &memo, int x){ if(memo[x] >= 0) return memo[x]; set s; auto p = prime_factorization(x); for(int i=0; i= 2) s.insert( grundy(memo, x/(p[i].first*p[i].first)) ); } int res = 0; while( s.count(res) ) res++; memo[x] = res; return res; } int main(){ int n; cin >> n; vector m(n); for(int i=0; i> m[i]; int ans = 0; vector memo( *max_element(m.begin(), m.end()) + 1, -1); memo[1] = 0; for(int i=0; i