func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   const int NCARDS = 8;   const int NVALS = 5;   const int NSTATE = 495;   vector<vector<int> > states;   map<vector<int>, int> mp;   void genstates(vector<int> &v, int at, int rem) {     if (at >= ((int)(v).size())) {       if (rem == 0) {         int id = ((int)(states).size());         states.push_back(v);         mp[v] = id;       }       return;     }     for (v[at] = 0; v[at] <= rem; ++v[at]) genstates(v, at + 1, rem - v[at]);   }   int nxt[NSTATE][NVALS][NVALS];   vector<int> adj[NSTATE][NSTATE];   vector<int> radj[NSTATE][NSTATE];   int deg[NSTATE][NSTATE];   int dp[NSTATE][NSTATE];   int q[NSTATE * NSTATE], qhead, qtail;   void precalc() {     states.clear();     mp.clear();     vector<int> state(NVALS, 0);     genstates(state, 0, NCARDS);     for (int i = (0); i < (((int)(states).size())); ++i)       for (int a = (0); a < (NVALS); ++a)         for (int b = (0); b < (NVALS); ++b) {           if (states[i][a] == 0) {             nxt[i][a][b] = -1;             continue;           }           vector<int> tmp = states[i];           tmp[a]--;           tmp[b]++;           assert(mp.count(tmp));           nxt[i][a][b] = mp[tmp];         }     for (int i = (0); i < (((int)(states).size())); ++i)       for (int j = (0); j < (((int)(states).size())); ++j) {         for (int a = (0); a < (NVALS); ++a)           for (int b = (0); b < (NVALS); ++b)             if (a * b != 0 && states[i][a] != 0 && states[j][b] != 0) {               int c = (a + b) % NVALS;               int ni = j, nj = nxt[i][a][c];               assert(nj != -1);               adj[i][j].push_back(ni * NSTATE + nj);             }         sort(adj[i][j].begin(), adj[i][j].end());         adj[i][j].erase(unique(adj[i][j].begin(), adj[i][j].end()),                         adj[i][j].end());         for (int k = (0); k < (((int)(adj[i][j]).size())); ++k) {           int ii = adj[i][j][k] / NSTATE, jj = adj[i][j][k] % NSTATE;           radj[ii][jj].push_back(i * NSTATE + j);         }       }     int winid = ((int)(states).size()) - 1;     for (int i = (0); i < (((int)(states).size())); ++i)       for (int j = (0); j < (((int)(states).size())); ++j)         dp[i][j] = 0, deg[i][j] = ((int)(adj[i][j]).size());     qhead = qtail = 0;     for (int i = (0); i < (((int)(states).size())); ++i)       dp[i][winid] = -1, q[qhead++] = i * NSTATE + winid;     while (qtail < qhead) {       int i = q[qtail] / NSTATE, j = q[qtail] % NSTATE;       ++qtail;       for (int k = (0); k < (((int)(radj[i][j]).size())); ++k) {         int ii = radj[i][j][k] / NSTATE, jj = radj[i][j][k] % NSTATE;         if (dp[ii][jj] != 0) continue;         if (dp[i][j] == -1) {           dp[ii][jj] = 1;           q[qhead++] = ii * NSTATE + jj;           continue;         }         if (--deg[ii][jj] == 0) {           dp[ii][jj] = -1;           q[qhead++] = ii * NSTATE + jj;           continue;         }       }     }   }   int fst;   int a[NCARDS], b[NCARDS];   void run() {     int nq;     scanf( %d , &nq);     for (int qi = (0); qi < (nq); ++qi) {       scanf( %d , &fst);       for (int i = (0); i < (NCARDS); ++i) scanf( %d , &a[i]);       for (int i = (0); i < (NCARDS); ++i) scanf( %d , &b[i]);       vector<int> acnt(NVALS, 0), bcnt(NVALS, 0);       for (int i = (0); i < (NCARDS); ++i) acnt[a[i]]++, bcnt[b[i]]++;       assert(mp.count(acnt) && mp.count(bcnt));       int aid = mp[acnt], bid = mp[bcnt];       int ans = fst == 0 ? dp[aid][bid] : -dp[bid][aid];       printf( %s n , ans > 0 ?  Alice  : ans < 0 ?  Bob  :  Deal );     }   }   int main() {     precalc();     run();     return 0;   }   