#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; std::map primeFactorize(int n) { std::map res; for (int i = 2; i*i <= n; ++i) { while (n%i==0) { ++res[i]; n /= i; } } if (n!= 1) res[n] = 1; return std::move(res); } class PrimeGameReturns { public: void solve(void) { int N; cin>>N; int det = 0; REP(i,N) { int m; cin>>m; // 素数を山の種類、冪を山の高さとする Nim と考える auto primes = primeFactorize(m); for (auto pk : primes) { int p,k; tie(p,k) = pk; // 初期の勝ち負け状態をたもったまま k%3 まで遷移させることができる // 1 -> 2 // 2 -> 1 det = det ^ (k % 3); } } if (det) cout<<"Alice"<solve(); delete obj; return 0; } #endif