#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF_MIN 100000000 #define INF 1145141919 #define INF_MAX 2147483647 #define LL_MAX 9223372036854775807 #define EPS 1e-10 #define PI acos(-1) #define LL long long using namespace std; #define MAX_N 101 #define MAX_M 10001 int N; int M[MAX_N]; bool prime[MAX_M]; vector primeList; int grundy[MAX_M]; void init(){ //素数を数え上げる for(int i = 2; i < MAX_M; i++){ if(!prime[i]){ primeList.push_back(i); for(int j = 2; i*j < MAX_M; j++){ prime[i*j] = true; } } } //grundy数を前計算しておく for(int m = 2; m < MAX_M; m++){ if(!prime[m]){ grundy[m] = 1; continue; } //遷移先 vector L; for(int n = 0; n < primeList.size() && primeList[n] <= m; n++){ if(m % primeList[n] == 0){ L.push_back(m/primeList[n]); } if(primeList[n] * primeList[n] <= m && m % (primeList[n] * primeList[n]) == 0){ L.push_back(m/(primeList[n] * primeList[n])); } } set S; for(int i = 0; i < L.size(); i++){ S.insert(grundy[L[i]]); } for(int n = 0; ; n++){ if(S.find(n) == S.end()){ grundy[m] = n; break; } } } } int main(){ init(); //入力 cin >> N; for(int i = 0; i < N; i++){ cin >> M[i]; } int ans = 0; for(int i = 0; i < N; i++){ ans ^= grundy[M[i]]; } if(ans != 0) cout << "Alice" << endl; else cout << "Bob" << endl; return 0; }