func_code_string: #include <bits/stdc++.h>   const int N = 1e5 + 10, M = 26;   template <typename T = int>   inline T read() {     T x = 0, f = 0;     char ch = getchar();     while (!isdigit(ch)) f |= ch ==  - , ch = getchar();     while (isdigit(ch)) x = x * 10 + ch -  0 , ch = getchar();     return f ? -x : x;   }   char s[N];   int a[N], pre[N][26], suf[N][26], f[N][26], g[N], dp[27];   inline int mex(int a) {     int res = 0;     while (a >> res & 1) ++res;     return res;   }   inline int solve(int l, int r, int c) {     if (l > r) return 0;     if (dp[c] != -1) return dp[c];     int sta = 0;     for (int i = 0; i < 26; ++i) {       int L = suf[l][i], R = pre[r][i];       if (R < L) continue;       sta |= 1 << (f[L - 1][c] ^ g[R] ^ g[L] ^ solve(R + 1, r, i));     }     return dp[c] = mex(sta);   }   inline int Solve(int l, int r, int c) {     if (l > r) return 0;     if (dp[c] != -1) return dp[c];     int sta = 0;     for (int i = 0; i < 26; ++i) {       int L = suf[l][i], R = pre[r][i];       if (R < L) continue;       sta |= 1 << (Solve(l, L - 1, i) ^ g[R] ^ g[L] ^ f[r][i]);     }     return dp[c] = mex(sta);   }   int main() {     scanf( %s , s + 1);     int n = strlen(s + 1);     for (int i = 1; i <= n; ++i) a[i] = s[i] -  a ;     for (int i = 0; i < 26; ++i) suf[n + 1][i] = n + 1;     for (int i = 1; i <= n; ++i)       memcpy(pre[i], pre[i - 1], sizeof(pre[i])), pre[i][a[i]] = i;     for (int i = n; i >= 1; --i)       memcpy(suf[i], suf[i + 1], sizeof(suf[i])), suf[i][a[i]] = i;     for (int i = 1; i <= n; ++i) {       memset(dp, -1, sizeof(dp)), g[i] = g[pre[i - 1][a[i]]] ^ f[i - 1][a[i]];       for (int c = 0; c < 26; ++c) f[i][c] = solve(pre[i][c] + 1, i, c);     }     for (int q = read(); q; --q) {       int l = read(), r = read();       memset(dp, -1, sizeof(dp));       puts(Solve(l, r, 26) ?  Alice  :  Bob );     }     return 0;   }   