func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<vector<int> > numbersWithGrundy(1);   int a[200001], grundyValues[200001];   bool isPrime[200001], isMoveValid[200001];   vector<string> players{ Alice ,  Bob };   void PreProcess(int n, int m) {     vector<int> primes;     for (int i = 2; i <= n; ++i) {       isPrime[i] = 1;     }     for (int i = 2; i <= n; ++i) {       if (!isPrime[i]) {         continue;       }       for (int j = i + i; j <= n; j += i) {         isPrime[j] = 0;       }       primes.push_back(i);       for (int prime : primes) {         if (i * prime > n) {           break;         }         isMoveValid[i * prime] = 1;       }       isMoveValid[i] = 1;     }     isMoveValid[m] = 0;     numbersWithGrundy[0].push_back(0);     for (int i = 1; i <= n; ++i) {       int &k = grundyValues[i];       for (; k < numbersWithGrundy.size(); ++k) {         bool valid = 1;         for (int l = 0, r = numbersWithGrundy[k].size() - 1; l <= r && valid;              ++l, --r) {           valid = !(isMoveValid[i - numbersWithGrundy[k][l]] ||                     isMoveValid[i - numbersWithGrundy[k][r]]);         }         if (valid) {           break;         }       }       if (k >= numbersWithGrundy.size()) {         numbersWithGrundy.resize(k + 1);       }       numbersWithGrundy[k].push_back(i);     }   }   int main() {     int n, k;     scanf( %d%d , &n, &k);     for (int i = 1, j = 0; i <= n; ++i) {       int b, w, r;       scanf( %d%d%d , &b, &w, &r);       a[++j] = w - b - 1;       a[++j] = r - w - 1;     }     n = 2 * n;     int m = 0;     for (int i = 1; i <= n; ++i) {       m = max(m, a[i]);     }     PreProcess(m, k);     int ans = 0;     for (int i = 1; i <= n; ++i) {       ans ^= grundyValues[a[i]];     }     ans = (ans == 0) ? 1 : 0;     for (int i = 0; i < players.size(); ++i) {       cout << players[i ^ ans] <<   n ;     }     return 0;   }   