#include #include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = uint32_t; using namespace std; template constexpr T INF = ::numeric_limits::max()/32*15+208; vector get_prime(int n){ if(n <= 1) return vector(); vector is_prime(n+1, true); vector prime; is_prime[0] = is_prime[1] = 0; for (int i = 2; i <= n; ++i) { if(is_prime[i]) prime.emplace_back(i); for (auto &&j : prime){ if(i*j > n) break; is_prime[i*j] = false; if(i % j == 0) break; } } return prime; } const auto primes = get_prime(100); template vector prime_factor(T n){ vector res; for (auto &&i : primes) { while (n % i == 0){ res.emplace_back(i); n /= i; } } if(n != 1) res.emplace_back(n); return res; } int main() { int n; cin >> n; int ans = 0; for (int i = 0; i < n; ++i) { int x; scanf("%d", &x); auto v = prime_factor(x); vector> z; z.emplace_back(v[0], 1); for (int j = 1; j < v.size(); ++j) { if(v[j] == z.back().first) z.back().second++; else z.emplace_back(v[j], 1); } for (auto &&k : z) { ans ^= (k.second%3); } } puts(ans ? "Alice" : "Bob"); return 0; }