#define PROBLEM "https://yukicoder.me/problems/no/103"
//#include"../../template/template.hpp"//#include"../../math/grundy-number.hpp"
#include"../../prime/fast-factorize.hpp"//usingnamespaceNyaan;voidNyaan::solve(){ini(n);vim(n);in(m);vvig(10001);rep1(i,10000){autofc=factor_count(i);for(auto[p,c]:fc){g[i].push_back(i/p);if(c>=2)g[i].push_back(i/(p*p));}}autogn=GrundyNumber(g);llx=0;each(i,m)x^=gn[i];out(x?"Alice":"Bob");}
#line 1 "verify/verify-yuki/yuki-0103.test.cpp"
#define PROBLEM "https://yukicoder.me/problems/no/103"
//#line 2 "template/template.hpp"
usingnamespacestd;// intrinstic#include<immintrin.h>#include<algorithm>
#include<array>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cfenv>
#include<cfloat>
#include<chrono>
#include<cinttypes>
#include<climits>
#include<cmath>
#include<complex>
#include<cstdarg>
#include<cstddef>
#include<cstdint>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
#include<fstream>
#include<functional>
#include<initializer_list>
#include<iomanip>
#include<ios>
#include<iostream>
#include<istream>
#include<iterator>
#include<limits>
#include<list>
#include<map>
#include<memory>
#include<new>
#include<numeric>
#include<ostream>
#include<queue>
#include<random>
#include<set>
#include<sstream>
#include<stack>
#include<streambuf>
#include<string>
#include<tuple>
#include<type_traits>
#include<typeinfo>
#include<unordered_map>
#include<unordered_set>
#include<utility>
#include<vector>// utility#line 1 "template/util.hpp"
namespaceNyaan{usingll=longlong;usingi64=longlong;usingu64=unsignedlonglong;usingi128=__int128_t;usingu128=__uint128_t;template<typenameT>usingV=vector<T>;template<typenameT>usingVV=vector<vector<T>>;usingvi=vector<int>;usingvl=vector<longlong>;usingvd=V<double>;usingvs=V<string>;usingvvi=vector<vector<int>>;usingvvl=vector<vector<longlong>>;template<typenameT>usingminpq=priority_queue<T,vector<T>,greater<T>>;template<typenameT,typenameU>structP:pair<T,U>{template<typename...Args>P(Args...args):pair<T,U>(args...){}usingpair<T,U>::first;usingpair<T,U>::second;P&operator+=(constP&r){first+=r.first;second+=r.second;return*this;}P&operator-=(constP&r){first-=r.first;second-=r.second;return*this;}P&operator*=(constP&r){first*=r.first;second*=r.second;return*this;}template<typenameS>P&operator*=(constS&r){first*=r,second*=r;return*this;}Poperator+(constP&r)const{returnP(*this)+=r;}Poperator-(constP&r)const{returnP(*this)-=r;}Poperator*(constP&r)const{returnP(*this)*=r;}template<typenameS>Poperator*(constS&r)const{returnP(*this)*=r;}Poperator-()const{returnP{-first,-second};}};usingpl=P<ll,ll>;usingpi=P<int,int>;usingvp=V<pl>;constexprintinf=1001001001;constexprlonglonginfLL=4004004004004004004LL;template<typenameT>intsz(constT&t){returnt.size();}template<typenameT,typenameU>inlineboolamin(T&x,Uy){return(y<x)?(x=y,true):false;}template<typenameT,typenameU>inlineboolamax(T&x,Uy){return(x<y)?(x=y,true):false;}template<typenameT>inlineTMax(constvector<T>&v){return*max_element(begin(v),end(v));}template<typenameT>inlineTMin(constvector<T>&v){return*min_element(begin(v),end(v));}template<typenameT>inlinelonglongSum(constvector<T>&v){returnaccumulate(begin(v),end(v),0LL);}template<typenameT>intlb(constvector<T>&v,constT&a){returnlower_bound(begin(v),end(v),a)-begin(v);}template<typenameT>intub(constvector<T>&v,constT&a){returnupper_bound(begin(v),end(v),a)-begin(v);}constexprlonglongTEN(intn){longlongret=1,x=10;for(;n;x*=x,n>>=1)ret*=(n&1?x:1);returnret;}template<typenameT,typenameU>pair<T,U>mkp(constT&t,constU&u){returnmake_pair(t,u);}template<typenameT>vector<T>mkrui(constvector<T>&v,boolrev=false){vector<T>ret(v.size()+1);if(rev){for(inti=int(v.size())-1;i>=0;i--)ret[i]=v[i]+ret[i+1];}else{for(inti=0;i<int(v.size());i++)ret[i+1]=ret[i]+v[i];}returnret;};template<typenameT>vector<T>mkuni(constvector<T>&v){vector<T>ret(v);sort(ret.begin(),ret.end());ret.erase(unique(ret.begin(),ret.end()),ret.end());returnret;}template<typenameF>vector<int>mkord(intN,Ff){vector<int>ord(N);iota(begin(ord),end(ord),0);sort(begin(ord),end(ord),f);returnord;}template<typenameT>vector<int>mkinv(vector<T>&v){intmax_val=*max_element(begin(v),end(v));vector<int>inv(max_val+1,-1);for(inti=0;i<(int)v.size();i++)inv[v[i]]=i;returninv;}vector<int>mkiota(intn){vector<int>ret(n);iota(begin(ret),end(ret),0);returnret;}template<typenameT>Tmkrev(constT&v){Tw{v};reverse(begin(w),end(w));returnw;}template<typenameT>boolnxp(T&v){returnnext_permutation(begin(v),end(v));}// 返り値の型は入力の T に依存// i 要素目 : [0, a[i])template<typenameT>vector<vector<T>>product(constvector<T>&a){vector<vector<T>>ret;vector<T>v;autodfs=[&](autorc,inti)->void{if(i==(int)a.size()){ret.push_back(v);return;}for(intj=0;j<a[i];j++)v.push_back(j),rc(rc,i+1),v.pop_back();};dfs(dfs,0);returnret;}// F : function(void(T&)), mod を取る操作// T : 整数型のときはオーバーフローに注意するtemplate<typenameT>TPower(Ta,longlongn,constT&I,constfunction<void(T&)>&f){Tres=I;for(;n;f(a=a*a),n>>=1){if(n&1)f(res=res*a);}returnres;}// T : 整数型のときはオーバーフローに注意するtemplate<typenameT>TPower(Ta,longlongn,constT&I=T{1}){returnPower(a,n,I,function<void(T&)>{[](T&)->void{}});}template<typenameT>TRev(constT&v){Tres=v;reverse(begin(res),end(res));returnres;}template<typenameT>vector<T>Transpose(constvector<T>&v){usingU=typenameT::value_type;if(v.empty())return{};intH=v.size(),W=v[0].size();vectorres(W,T(H,U{}));for(inti=0;i<H;i++){for(intj=0;j<W;j++){res[j][i]=v[i][j];}}returnres;}template<typenameT>vector<T>Rotate(constvector<T>&v,intclockwise=true){usingU=typenameT::value_type;intH=v.size(),W=v[0].size();vectorres(W,T(H,U{}));for(inti=0;i<H;i++){for(intj=0;j<W;j++){if(clockwise){res[W-1-j][i]=v[i][j];}else{res[j][H-1-i]=v[i][j];}}}returnres;}}// namespace Nyaan#line 58 "template/template.hpp"
// bit operation#line 1 "template/bitop.hpp"
namespaceNyaan{__attribute__((target("popcnt")))inlineintpopcnt(constu64&a){return__builtin_popcountll(a);}inlineintlsb(constu64&a){returna?__builtin_ctzll(a):64;}inlineintctz(constu64&a){returna?__builtin_ctzll(a):64;}inlineintmsb(constu64&a){returna?63-__builtin_clzll(a):-1;}template<typenameT>inlineintgbit(constT&a,inti){return(a>>i)&1;}template<typenameT>inlinevoidsbit(T&a,inti,boolb){if(gbit(a,i)!=b)a^=T(1)<<i;}constexprlonglongPW(intn){return1LL<<n;}constexprlonglongMSK(intn){return(1LL<<n)-1;}}// namespace Nyaan#line 61 "template/template.hpp"
// inout#line 1 "template/inout.hpp"
namespaceNyaan{template<typenameT,typenameU>ostream&operator<<(ostream&os,constpair<T,U>&p){os<<p.first<<" "<<p.second;returnos;}template<typenameT,typenameU>istream&operator>>(istream&is,pair<T,U>&p){is>>p.first>>p.second;returnis;}template<typenameT>ostream&operator<<(ostream&os,constvector<T>&v){ints=(int)v.size();for(inti=0;i<s;i++)os<<(i?" ":"")<<v[i];returnos;}template<typenameT>istream&operator>>(istream&is,vector<T>&v){for(auto&x:v)is>>x;returnis;}istream&operator>>(istream&is,__int128_t&x){stringS;is>>S;x=0;intflag=0;for(auto&c:S){if(c=='-'){flag=true;continue;}x*=10;x+=c-'0';}if(flag)x=-x;returnis;}istream&operator>>(istream&is,__uint128_t&x){stringS;is>>S;x=0;for(auto&c:S){x*=10;x+=c-'0';}returnis;}ostream&operator<<(ostream&os,__int128_tx){if(x==0)returnos<<0;if(x<0)os<<'-',x=-x;stringS;while(x)S.push_back('0'+x%10),x/=10;reverse(begin(S),end(S));returnos<<S;}ostream&operator<<(ostream&os,__uint128_tx){if(x==0)returnos<<0;stringS;while(x)S.push_back('0'+x%10),x/=10;reverse(begin(S),end(S));returnos<<S;}voidin(){}template<typenameT,class...U>voidin(T&t,U&...u){cin>>t;in(u...);}voidout(){cout<<"\n";}template<typenameT,class...U,charsep=' '>voidout(constT&t,constU&...u){cout<<t;if(sizeof...(u))cout<<sep;out(u...);}structIoSetupNya{IoSetupNya(){cin.tie(nullptr);ios::sync_with_stdio(false);cout<<fixed<<setprecision(15);cerr<<fixed<<setprecision(7);}}iosetupnya;}// namespace Nyaan#line 64 "template/template.hpp"
// debug#line 1 "template/debug.hpp"
namespaceDebugImpl{template<typenameU,typename=void>structis_specialize:false_type{};template<typenameU>structis_specialize<U,typenameconditional<false,typenameU::iterator,void>::type>:true_type{};template<typenameU>structis_specialize<U,typenameconditional<false,decltype(U::first),void>::type>:true_type{};template<typenameU>structis_specialize<U,enable_if_t<is_integral<U>::value,void>>:true_type{};voiddump(constchar&t){cerr<<t;}voiddump(conststring&t){cerr<<t;}voiddump(constbool&t){cerr<<(t?"true":"false");}voiddump(__int128_tt){if(t==0)cerr<<0;if(t<0)cerr<<'-',t=-t;stringS;while(t)S.push_back('0'+t%10),t/=10;reverse(begin(S),end(S));cerr<<S;}voiddump(__uint128_tt){if(t==0)cerr<<0;stringS;while(t)S.push_back('0'+t%10),t/=10;reverse(begin(S),end(S));cerr<<S;}template<typenameU,enable_if_t<!is_specialize<U>::value,nullptr_t>=nullptr>voiddump(constU&t){cerr<<t;}template<typenameT>voiddump(constT&t,enable_if_t<is_integral<T>::value>*=nullptr){stringres;if(t==Nyaan::inf)res="inf";ifconstexpr(is_signed<T>::value){if(t==-Nyaan::inf)res="-inf";}ifconstexpr(sizeof(T)==8){if(t==Nyaan::infLL)res="inf";ifconstexpr(is_signed<T>::value){if(t==-Nyaan::infLL)res="-inf";}}if(res.empty())res=to_string(t);cerr<<res;}template<typenameT,typenameU>voiddump(constpair<T,U>&);template<typenameT>voiddump(constpair<T*,int>&);template<typenameT>voiddump(constT&t,enable_if_t<!is_void<typenameT::iterator>::value>*=nullptr){cerr<<"[ ";for(autoit=t.begin();it!=t.end();){dump(*it);cerr<<(++it==t.end()?"":", ");}cerr<<" ]";}template<typenameT,typenameU>voiddump(constpair<T,U>&t){cerr<<"( ";dump(t.first);cerr<<", ";dump(t.second);cerr<<" )";}template<typenameT>voiddump(constpair<T*,int>&t){cerr<<"[ ";for(inti=0;i<t.second;i++){dump(t.first[i]);cerr<<(i==t.second-1?"":", ");}cerr<<" ]";}voidtrace(){cerr<<endl;}template<typenameHead,typename...Tail>voidtrace(Head&&head,Tail&&...tail){cerr<<" ";dump(head);if(sizeof...(tail)!=0)cerr<<",";trace(std::forward<Tail>(tail)...);}}// namespace DebugImpl#ifdef NyaanDebug
#define trc(...) \
do { \
cerr << "## " << #__VA_ARGS__ << " = "; \
DebugImpl::trace(__VA_ARGS__); \
} while (0)
#else
#define trc(...) (void(0))
#endif
#ifdef NyaanLocal
#define trc2(...) \
do { \
cerr << "## " << #__VA_ARGS__ << " = "; \
DebugImpl::trace(__VA_ARGS__); \
} while (0)
#else
#define trc2(...) (void(0))
#endif
#line 67 "template/template.hpp"
// macro#line 1 "template/macro.hpp"
#define each(x, v) for (auto&& x : v)
#define each2(x, y, v) for (auto&& [x, y] : v)
#define all(v) (v).begin(), (v).end()
#define rep(i, N) for (long long i = 0; i < (long long)(N); i++)
#define repr(i, N) for (long long i = (long long)(N)-1; i >= 0; i--)
#define rep1(i, N) for (long long i = 1; i <= (long long)(N); i++)
#define repr1(i, N) for (long long i = (N); (long long)(i) > 0; i--)
#define reg(i, a, b) for (long long i = (a); i < (b); i++)
#define regr(i, a, b) for (long long i = (b)-1; i >= (a); i--)
#define fi first
#define se second
#define ini(...) \
int __VA_ARGS__; \
in(__VA_ARGS__)
#define inl(...) \
long long __VA_ARGS__; \
in(__VA_ARGS__)
#define ins(...) \
string __VA_ARGS__; \
in(__VA_ARGS__)
#define in2(s, t) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i]); \
}
#define in3(s, t, u) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i], u[i]); \
}
#define in4(s, t, u, v) \
for (int i = 0; i < (int)s.size(); i++) { \
in(s[i], t[i], u[i], v[i]); \
}
#define die(...) \
do { \
Nyaan::out(__VA_ARGS__); \
return; \
} while (0)
#line 70 "template/template.hpp"
namespaceNyaan{voidsolve();}intmain(){Nyaan::solve();}#line 4 "verify/verify-yuki/yuki-0103.test.cpp"
//#line 2 "math/grundy-number.hpp"
#line 2 "graph/topological-sort.hpp"
#line 2 "graph/graph-template.hpp"
template<typenameT>structedge{intsrc,to;Tcost;edge(int_to,T_cost):src(-1),to(_to),cost(_cost){}edge(int_src,int_to,T_cost):src(_src),to(_to),cost(_cost){}edge&operator=(constint&x){to=x;return*this;}operatorint()const{returnto;}};template<typenameT>usingEdges=vector<edge<T>>;template<typenameT>usingWeightedGraph=vector<Edges<T>>;usingUnweightedGraph=vector<vector<int>>;// Input of (Unweighted) GraphUnweightedGraphgraph(intN,intM=-1,boolis_directed=false,boolis_1origin=true){UnweightedGraphg(N);if(M==-1)M=N-1;for(int_=0;_<M;_++){intx,y;cin>>x>>y;if(is_1origin)x--,y--;g[x].push_back(y);if(!is_directed)g[y].push_back(x);}returng;}// Input of Weighted Graphtemplate<typenameT>WeightedGraph<T>wgraph(intN,intM=-1,boolis_directed=false,boolis_1origin=true){WeightedGraph<T>g(N);if(M==-1)M=N-1;for(int_=0;_<M;_++){intx,y;cin>>x>>y;Tc;cin>>c;if(is_1origin)x--,y--;g[x].emplace_back(x,y,c);if(!is_directed)g[y].emplace_back(y,x,c);}returng;}// Input of Edgestemplate<typenameT>Edges<T>esgraph([[maybe_unused]]intN,intM,intis_weighted=true,boolis_1origin=true){Edges<T>es;for(int_=0;_<M;_++){intx,y;cin>>x>>y;Tc;if(is_weighted)cin>>c;elsec=1;if(is_1origin)x--,y--;es.emplace_back(x,y,c);}returnes;}// Input of Adjacency Matrixtemplate<typenameT>vector<vector<T>>adjgraph(intN,intM,TINF,intis_weighted=true,boolis_directed=false,boolis_1origin=true){vector<vector<T>>d(N,vector<T>(N,INF));for(int_=0;_<M;_++){intx,y;cin>>x>>y;Tc;if(is_weighted)cin>>c;elsec=1;if(is_1origin)x--,y--;d[x][y]=c;if(!is_directed)d[y][x]=c;}returnd;}/**
* @brief グラフテンプレート
* @docs docs/graph/graph-template.md
*/#line 4 "graph/topological-sort.hpp"
// if the graph is not DAG, return empty vectortemplate<typenameT>vector<int>TopologicalSort(T&g){intN=g.size();vector<int>marked(N,0),temp(N,0),v;autovisit=[&](autof,inti)->bool{if(temp[i]==1)returnfalse;if(marked[i]==0){temp[i]=1;for(auto&e:g[i]){if(f(f,e)==false)returnfalse;}marked[i]=1;v.push_back(i);temp[i]=0;}returntrue;};for(inti=0;i<N;i++){if(marked[i]==0){if(visit(visit,i)==false)returnvector<int>();}}reverse(v.begin(),v.end());returnv;}#line 6 "math/grundy-number.hpp"
vector<int>GrundyNumber(vector<vector<int>>&g){vector<int>topo=TopologicalSort(g);if((int)topo.size()==0)returnvector<int>();vector<int>grundy(g.size(),0);vector<int>memo(g.size()+1,0);for(int_=(int)g.size()-1;_>=0;_--){inti=topo[_];if(g[i].size()==0)continue;for(auto&x:g[i]){memo[grundy[x]]++;}while(memo[grundy[i]]>0)grundy[i]++;for(auto&x:g[i]){memo[grundy[x]]--;}}returngrundy;};/**
* @brief Grundy Number
*/#line 2 "prime/fast-factorize.hpp"
#line 6 "prime/fast-factorize.hpp"
usingnamespacestd;#line 2 "internal/internal-math.hpp"
#line 2 "internal/internal-type-traits.hpp"
#line 4 "internal/internal-type-traits.hpp"
usingnamespacestd;namespaceinternal{template<typenameT>usingis_broadly_integral=typenameconditional_t<is_integral_v<T>||is_same_v<T,__int128_t>||is_same_v<T,__uint128_t>,true_type,false_type>::type;template<typenameT>usingis_broadly_signed=typenameconditional_t<is_signed_v<T>||is_same_v<T,__int128_t>,true_type,false_type>::type;template<typenameT>usingis_broadly_unsigned=typenameconditional_t<is_unsigned_v<T>||is_same_v<T,__uint128_t>,true_type,false_type>::type;#define ENABLE_VALUE(x) \
template <typename T> \
constexpr bool x##_v = x<T>::value;
ENABLE_VALUE(is_broadly_integral);ENABLE_VALUE(is_broadly_signed);ENABLE_VALUE(is_broadly_unsigned);#undef ENABLE_VALUE
#define ENABLE_HAS_TYPE(var) \
template <class, class = void> \
struct has_##var : false_type {}; \
template <class T> \
struct has_##var<T, void_t<typename T::var>> : true_type {}; \
template <class T> \
constexpr auto has_##var##_v = has_##var<T>::value;
#define ENABLE_HAS_VAR(var) \
template <class, class = void> \
struct has_##var : false_type {}; \
template <class T> \
struct has_##var<T, void_t<decltype(T::var)>> : true_type {}; \
template <class T> \
constexpr auto has_##var##_v = has_##var<T>::value;
}// namespace internal#line 4 "internal/internal-math.hpp"
namespaceinternal{#line 10 "internal/internal-math.hpp"
usingnamespacestd;// a mod ptemplate<typenameT>Tsafe_mod(Ta,Tp){a%=p;ifconstexpr(is_broadly_signed_v<T>){if(a<0)a+=p;}returna;}// 返り値:pair(g, x)// s.t. g = gcd(a, b), xa = g (mod b), 0 <= x < b/gtemplate<typenameT>pair<T,T>inv_gcd(Ta,Tp){static_assert(is_broadly_signed_v<T>);a=safe_mod(a,p);if(a==0)return{p,0};Tb=p,x=1,y=0;while(a!=0){Tq=b/a;swap(a,b%=a);swap(x,y-=q*x);}if(y<0)y+=p/b;return{b,y};}// 返り値 : a^{-1} mod p// gcd(a, p) != 1 が必要template<typenameT>Tinv(Ta,Tp){static_assert(is_broadly_signed_v<T>);a=safe_mod(a,p);Tb=p,x=1,y=0;while(a!=0){Tq=b/a;swap(a,b%=a);swap(x,y-=q*x);}assert(b==1);returny<0?y+p:y;}// T : 底の型// U : T*T がオーバーフローしない かつ 指数の型template<typenameT,typenameU>Tmodpow(Ta,Un,Tp){a=safe_mod(a,p);Tret=1%p;while(n!=0){if(n%2==1)ret=U(ret)*a%p;a=U(a)*a%p;n/=2;}returnret;}// 返り値 : pair(rem, mod)// 解なしのときは {0, 0} を返すtemplate<typenameT>pair<T,T>crt(constvector<T>&r,constvector<T>&m){static_assert(is_broadly_signed_v<T>);assert(r.size()==m.size());intn=int(r.size());Tr0=0,m0=1;for(inti=0;i<n;i++){assert(1<=m[i]);Tr1=safe_mod(r[i],m[i]),m1=m[i];if(m0<m1)swap(r0,r1),swap(m0,m1);if(m0%m1==0){if(r0%m1!=r1)return{0,0};continue;}auto[g,im]=inv_gcd(m0,m1);Tu1=m1/g;if((r1-r0)%g)return{0,0};Tx=(r1-r0)/g%u1*im%u1;r0+=x*m0;m0*=u1;if(r0<0)r0+=m0;}return{r0,m0};}}// namespace internal#line 2 "misc/rng.hpp"
#line 2 "internal/internal-seed.hpp"
#line 4 "internal/internal-seed.hpp"
usingnamespacestd;namespaceinternal{unsignedlonglongnon_deterministic_seed(){unsignedlonglongm=chrono::duration_cast<chrono::nanoseconds>(chrono::high_resolution_clock::now().time_since_epoch()).count();m^=9845834732710364265uLL;m^=m<<24,m^=m>>31,m^=m<<35;returnm;}unsignedlonglongdeterministic_seed(){return88172645463325252UL;}// 64 bit の seed 値を生成 (手元では seed 固定)// 連続で呼び出すと同じ値が何度も返ってくるので注意// #define RANDOMIZED_SEED するとシードがランダムになるunsignedlonglongseed(){#if defined(NyaanLocal) && !defined(RANDOMIZED_SEED)
returndeterministic_seed();#else
returnnon_deterministic_seed();#endif
}}// namespace internal#line 4 "misc/rng.hpp"
namespacemy_rand{usingi64=longlong;usingu64=unsignedlonglong;// [0, 2^64 - 1)u64rng(){staticu64_x=internal::seed();return_x^=_x<<7,_x^=_x>>9;}// [l, r]i64rng(i64l,i64r){assert(l<=r);returnl+rng()%u64(r-l+1);}// [l, r)i64randint(i64l,i64r){assert(l<r);returnl+rng()%u64(r-l);}// choose n numbers from [l, r) without overlappingvector<i64>randset(i64l,i64r,i64n){assert(l<=r&&n<=r-l);unordered_set<i64>s;for(i64i=n;i;--i){i64m=randint(l,r+1-i);if(s.find(m)!=s.end())m=r-i;s.insert(m);}vector<i64>ret;for(auto&x:s)ret.push_back(x);sort(begin(ret),end(ret));returnret;}// [0.0, 1.0)doublernd(){returnrng()*5.42101086242752217004e-20;}// [l, r)doublernd(doublel,doubler){assert(l<r);returnl+rnd()*(r-l);}template<typenameT>voidrandshf(vector<T>&v){intn=v.size();for(inti=1;i<n;i++)swap(v[i],v[randint(0,i+1)]);}}// namespace my_randusingmy_rand::randint;usingmy_rand::randset;usingmy_rand::randshf;usingmy_rand::rnd;usingmy_rand::rng;#line 2 "modint/arbitrary-montgomery-modint.hpp"
#line 4 "modint/arbitrary-montgomery-modint.hpp"
usingnamespacestd;template<typenameInt,typenameUInt,typenameLong,typenameULong,intid>structArbitraryLazyMontgomeryModIntBase{usingmint=ArbitraryLazyMontgomeryModIntBase;inlinestaticUIntmod;inlinestaticUIntr;inlinestaticUIntn2;staticconstexprintbit_length=sizeof(UInt)*8;staticUIntget_r(){UIntret=mod;while(mod*ret!=1)ret*=UInt(2)-mod*ret;returnret;}staticvoidset_mod(UIntm){assert(m<(UInt(1u)<<(bit_length-2)));assert((m&1)==1);mod=m,n2=-ULong(m)%m,r=get_r();}UInta;ArbitraryLazyMontgomeryModIntBase():a(0){}ArbitraryLazyMontgomeryModIntBase(constLong&b):a(reduce(ULong(b%mod+mod)*n2)){};staticUIntreduce(constULong&b){return(b+ULong(UInt(b)*UInt(-r))*mod)>>bit_length;}mint&operator+=(constmint&b){if(Int(a+=b.a-2*mod)<0)a+=2*mod;return*this;}mint&operator-=(constmint&b){if(Int(a-=b.a)<0)a+=2*mod;return*this;}mint&operator*=(constmint&b){a=reduce(ULong(a)*b.a);return*this;}mint&operator/=(constmint&b){*this*=b.inverse();return*this;}mintoperator+(constmint&b)const{returnmint(*this)+=b;}mintoperator-(constmint&b)const{returnmint(*this)-=b;}mintoperator*(constmint&b)const{returnmint(*this)*=b;}mintoperator/(constmint&b)const{returnmint(*this)/=b;}booloperator==(constmint&b)const{return(a>=mod?a-mod:a)==(b.a>=mod?b.a-mod:b.a);}booloperator!=(constmint&b)const{return(a>=mod?a-mod:a)!=(b.a>=mod?b.a-mod:b.a);}mintoperator-()const{returnmint(0)-mint(*this);}mintoperator+()const{returnmint(*this);}mintpow(ULongn)const{mintret(1),mul(*this);while(n>0){if(n&1)ret*=mul;mul*=mul,n>>=1;}returnret;}friendostream&operator<<(ostream&os,constmint&b){returnos<<b.get();}friendistream&operator>>(istream&is,mint&b){Longt;is>>t;b=ArbitraryLazyMontgomeryModIntBase(t);return(is);}mintinverse()const{Intx=get(),y=get_mod(),u=1,v=0;while(y>0){Intt=x/y;swap(x-=t*y,y);swap(u-=t*v,v);}returnmint{u};}UIntget()const{UIntret=reduce(a);returnret>=mod?ret-mod:ret;}staticUIntget_mod(){returnmod;}};// id に適当な乱数を割り当てて使うtemplate<intid>usingArbitraryLazyMontgomeryModInt=ArbitraryLazyMontgomeryModIntBase<int,unsignedint,longlong,unsignedlonglong,id>;template<intid>usingArbitraryLazyMontgomeryModInt64bit=ArbitraryLazyMontgomeryModIntBase<longlong,unsignedlonglong,__int128_t,__uint128_t,id>;#line 2 "prime/miller-rabin.hpp"
#line 4 "prime/miller-rabin.hpp"
usingnamespacestd;#line 8 "prime/miller-rabin.hpp"
namespacefast_factorize{template<typenameT,typenameU>boolmiller_rabin(constT&n,vector<T>ws){if(n<=2)returnn==2;if(n%2==0)returnfalse;Td=n-1;while(d%2==0)d/=2;Ue=1,rev=n-1;for(Tw:ws){if(w%n==0)continue;Tt=d;Uy=internal::modpow<T,U>(w,t,n);while(t!=n-1&&y!=e&&y!=rev)y=y*y%n,t*=2;if(y!=rev&&t%2==0)returnfalse;}returntrue;}boolmiller_rabin_u64(unsignedlonglongn){returnmiller_rabin<unsignedlonglong,__uint128_t>(n,{2,325,9375,28178,450775,9780504,1795265022});}template<typenamemint>boolmiller_rabin(unsignedlonglongn,vector<unsignedlonglong>ws){if(n<=2)returnn==2;if(n%2==0)returnfalse;if(mint::get_mod()!=n)mint::set_mod(n);unsignedlonglongd=n-1;while(~d&1)d>>=1;minte=1,rev=n-1;for(unsignedlonglongw:ws){if(w%n==0)continue;unsignedlonglongt=d;minty=mint(w).pow(t);while(t!=n-1&&y!=e&&y!=rev)y*=y,t*=2;if(y!=rev&&t%2==0)returnfalse;}returntrue;}boolis_prime(unsignedlonglongn){usingmint32=ArbitraryLazyMontgomeryModInt<96229631>;usingmint64=ArbitraryLazyMontgomeryModInt64bit<622196072>;if(n<=2)returnn==2;if(n%2==0)returnfalse;if(n<(1uLL<<30)){returnmiller_rabin<mint32>(n,{2,7,61});}elseif(n<(1uLL<<62)){returnmiller_rabin<mint64>(n,{2,325,9375,28178,450775,9780504,1795265022});}else{returnmiller_rabin_u64(n);}}}// namespace fast_factorizeusingfast_factorize::is_prime;/**
* @brief Miller-Rabin primality test
*/#line 12 "prime/fast-factorize.hpp"
namespacefast_factorize{usingu64=uint64_t;template<typenamemint,typenameT>Tpollard_rho(Tn){if(~n&1)return2;if(is_prime(n))returnn;if(mint::get_mod()!=n)mint::set_mod(n);mintR,one=1;autof=[&](mintx){returnx*x+R;};autornd_=[&](){returnrng()%(n-2)+2;};while(1){mintx,y,ys,q=one;R=rnd_(),y=rnd_();Tg=1;constexprintm=128;for(intr=1;g==1;r<<=1){x=y;for(inti=0;i<r;++i)y=f(y);for(intk=0;g==1&&k<r;k+=m){ys=y;for(inti=0;i<m&&i<r-k;++i)q*=x-(y=f(y));g=gcd(q.get(),n);}}if(g==n)dog=gcd((x-(ys=f(ys))).get(),n);while(g==1);if(g!=n)returng;}exit(1);}usingi64=longlong;vector<i64>inner_factorize(u64n){usingmint32=ArbitraryLazyMontgomeryModInt<452288976>;usingmint64=ArbitraryLazyMontgomeryModInt64bit<401243123>;if(n<=1)return{};u64p;if(n<=(1LL<<30)){p=pollard_rho<mint32,uint32_t>(n);}elseif(n<=(1LL<<62)){p=pollard_rho<mint64,uint64_t>(n);}else{exit(1);}if(p==n)return{i64(p)};autol=inner_factorize(p);autor=inner_factorize(n/p);copy(begin(r),end(r),back_inserter(l));returnl;}vector<i64>factorize(u64n){autoret=inner_factorize(n);sort(begin(ret),end(ret));returnret;}map<i64,i64>factor_count(u64n){map<i64,i64>mp;for(auto&x:factorize(n))mp[x]++;returnmp;}vector<i64>divisors(u64n){if(n==0)return{};vector<pair<i64,i64>>v;for(auto&p:factorize(n)){if(v.empty()||v.back().first!=p){v.emplace_back(p,1);}else{v.back().second++;}}vector<i64>ret;autof=[&](autorc,inti,i64x)->void{if(i==(int)v.size()){ret.push_back(x);return;}rc(rc,i+1,x);for(intj=0;j<v[i].second;j++)rc(rc,i+1,x*=v[i].first);};f(f,0,1);sort(begin(ret),end(ret));returnret;}}// namespace fast_factorizeusingfast_factorize::divisors;usingfast_factorize::factor_count;usingfast_factorize::factorize;/**
* @brief 高速素因数分解(Miller Rabin/Pollard's Rho)
* @docs docs/prime/fast-factorize.md
*/#line 7 "verify/verify-yuki/yuki-0103.test.cpp"
//usingnamespaceNyaan;voidNyaan::solve(){ini(n);vim(n);in(m);vvig(10001);rep1(i,10000){autofc=factor_count(i);for(auto[p,c]:fc){g[i].push_back(i/p);if(c>=2)g[i].push_back(i/(p*p));}}autogn=GrundyNumber(g);llx=0;each(i,m)x^=gn[i];out(x?"Alice":"Bob");}