#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 MAXLEN = 100000;
const int MAXQ = 100000;
const int ALPH = 26;
const int MAXVAL = 31;
char s[MAXLEN + 1];
int slen;
int nq;
int ql[MAXQ], qr[MAXQ], qans[MAXQ];
int nxt[MAXLEN + 1][ALPH];
int prv[MAXLEN + 1][ALPH];
vector<int> need[MAXLEN];
vector<int> dp[MAXLEN];
int fstval[MAXLEN];
int suffval[MAXLEN + 1];
int nxtval[MAXLEN + 1][ALPH];
int prvval[MAXLEN + 1][ALPH];
int mark[MAXVAL + 1], curmark;
void solve() {
  for (int k = (0); k < (ALPH); ++k) {
    nxt[slen][k] = slen;
    for (int i = slen - 1; i >= 0; --i)
      nxt[i][k] = s[i] == 'a' + k ? i : nxt[i + 1][k];
  }
  for (int k = (0); k < (ALPH); ++k) {
    prv[0][k] = -1;
    for (int i = (0); i < (slen); ++i)
      prv[i + 1][k] = s[i] == 'a' + k ? i : prv[i][k];
  }
  for (int i = (0); i < (slen); ++i) need[i].clear();
  for (int i = (0); i < (nq); ++i) need[ql[i]].push_back(qr[i]);
  for (int i = (0); i < (slen); ++i)
    for (int k = (0); k < (ALPH); ++k)
      if (nxt[i][k] != i) need[i].push_back(nxt[i][k] - 1);
  for (int i = (1); i <= (slen); ++i)
    for (int k = (0); k < (ALPH); ++k)
      if (prv[i][k] != -1) need[prv[i][k] + 1].push_back(i - 1);
  for (int i = (0); i < (slen); ++i) {
    sort(need[i].begin(), need[i].end());
    need[i].erase(unique(need[i].begin(), need[i].end()), need[i].end());
  }
  for (int i = (0); i < (slen); ++i) fstval[i] = suffval[i] = -1;
  suffval[slen] = 0;
  for (int i = (0); i <= (slen); ++i)
    for (int k = (0); k < (ALPH); ++k) nxtval[i][k] = prvval[i][k] = -1;
  memset(mark, -1, sizeof(mark));
  curmark = -1;
  for (int l = slen - 1; l >= 0; --l) {
    fstval[l] =
        nxt[l + 1][s[l] - 'a'] == slen ? suffval[l + 1]
        : s[l + 1] == s[l]
            ? fstval[l + 1]
            : (nxtval[l + 1][s[l] - 'a'] ^ fstval[nxt[l + 1][s[l] - 'a']]);
    dp[l].resize(((int)(need[l]).size()));
    for (int i = (0); i < (((int)(need[l]).size())); ++i) {
      int r = need[l][i];
      ++curmark;
      for (int k = (0); k < (ALPH); ++k) {
        if (nxt[l][k] > r) continue;
        int L = nxt[l][k], R = prv[r + 1][k];
        assert(l <= L && L <= R && R <= r && s[L] == 'a' + k &&
               s[R] == 'a' + k);
        int kval = fstval[L] ^ fstval[R];
        if (L != l) {
          assert(nxtval[l][k] != -1);
          kval ^= nxtval[l][k];
        }
        if (R != r) {
          assert(prvval[r + 1][k] != -1);
          kval ^= prvval[r + 1][k];
        }
        mark[kval] = curmark;
      }
      int curval = 0;
      while (mark[curval] == curmark) ++curval;
      dp[l][i] = curval;
      if (r + 1 < slen && nxt[l][s[r + 1] - 'a'] == r + 1)
        nxtval[l][s[r + 1] - 'a'] = curval;
      if (l - 1 >= 0 && prv[r + 1][s[l - 1] - 'a'] == l - 1)
        prvval[r + 1][s[l - 1] - 'a'] = curval;
      if (r + 1 == slen) suffval[l] = curval;
    }
  }
  for (int i = (0); i < (nq); ++i) {
    int l = ql[i], r = qr[i];
    int idx = lower_bound(need[l].begin(), need[l].end(), r) - need[l].begin();
    assert(idx < ((int)(need[l]).size()) && need[l][idx] == r);
    qans[i] = dp[l][idx];
  }
}
void run() {
  scanf("%s", s);
  slen = strlen(s);
  scanf("%d", &nq);
  for (int i = (0); i < (nq); ++i)
    scanf("%d%d", &ql[i], &qr[i]), --ql[i], --qr[i];
  solve();
  for (int i = (0); i < (nq); ++i)
    printf("%s\n", qans[i] != 0 ? "Alice" : "Bob");
}
int main() {
  run();
  return 0;
}
