#include <bits/stdc++.h>
using namespace std;
uint64_t rnd_data = 0xDEADBEEFDULL;
inline void my_srand(int seed) { rnd_data = ((uint64_t)seed << 16) | 0x330E; }
inline int my_rand() {
  rnd_data = rnd_data * 0x5DEECE66DULL + 0xB;
  return (rnd_data >> 17) & 0x7FFFFFFF;
}
template <typename T>
void my_random_shuffle(T b, T e) {
  for (int i = (1); i <= (int)((int)(e - b) - 1); i++) {
    swap(b[i], b[my_rand() % (i + 1)]);
  }
}
template <class _T>
inline _T sqr(const _T &x) {
  return x * x;
}
template <typename type_t, typename less_t = std::less<type_t>>
inline bool uin(type_t &a, const type_t &b, const less_t &ls = less_t()) {
  return ls(b, a) ? a = b, true : false;
}
template <typename type_t, typename less_t = std::less<type_t>>
inline bool uax(type_t &a, const type_t &b, const less_t &ls = less_t()) {
  return ls(a, b) ? a = b, true : false;
}
const long double PI = 3.1415926535897932384626433832795L;
const long double EPS = 1e-9;
int n, m;
char s[102400];
int b[102400][2];
int dl[102400][26];
int dr[102400][26];
vector<int> pos[26];
vector<int> tx[26];
int zx[26];
vector<pair<int, int>> sq;
int nextc[102400][26];
int prevc[102400][26];
int idx[102400];
inline void tadd(int j, int first, int k) {
  first += zx[j];
  while (first) {
    tx[j][first] ^= k;
    first >>= 1;
  }
}
inline int txor(int j, int l, int r) {
  int ans = 0;
  l += zx[j];
  r += zx[j];
  while (l <= r) {
    if (l & 1) ans ^= tx[j][l];
    if (!(r & 1)) ans ^= tx[j][r];
    l = (l + 1) >> 1;
    r = (r - 1) >> 1;
  }
  return ans;
}
int solvel(int l, int j, bool calc_tadd = false);
int solver(int r, int j, bool calc_tadd = false);
int solve0(int l, int r, bool calc_tadd = false) {
  if (r < l) return 0;
  int u = 0;
  for (int i = 0; i < (int)(26); i++) {
    int xpos = nextc[l][i];
    if (xpos >= n) continue;
    int first = idx[xpos];
    if (pos[i][first] > r) continue;
    int ypos = prevc[r][i];
    int second = idx[ypos];
    int cur = txor(i, first, second - 1);
    cur ^= solvel(l, i, calc_tadd);
    cur ^= solver(r, i, calc_tadd);
    u |= 1 << cur;
  }
  for (int i = 0; i < (int)(30); i++) {
    if (!(u & (1 << i))) {
      if (l > 0 && r < n - 1 && s[l - 1] == s[r + 1] && calc_tadd) {
        int ch = s[l - 1] - 'a';
        int first = idx[l - 1];
        if (pos[ch][first + 1] == r + 1) tadd(ch, first, i);
      }
      return i;
    }
  }
  assert(false);
  return -1;
}
int solvel(int l, int j, bool calc_tadd) {
  int &ans = dl[l][j];
  if (ans >= 0) return ans;
  int posj = nextc[l][j];
  int first = posj == n ? pos[j].size() - 1 : idx[posj];
  int r = pos[j][first] - 1;
  if (r < l) {
    return ans = 0;
  }
  return ans = solve0(l, r, calc_tadd);
}
int solver(int r, int j, bool calc_tadd) {
  int &ans = dr[r][j];
  if (ans >= 0) return ans;
  int posj = prevc[r][j];
  int first = posj == -1 ? 0 : idx[posj];
  int l = pos[j][first] + 1;
  if (r < l) {
    return ans = 0;
  }
  return ans = solve0(l, r, calc_tadd);
}
void precalc() {
  for (int i = (n)-1; i >= 0; i--) {
    for (int j = 0; j < (int)(26); j++) {
      solvel(i, j);
    }
  }
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(26); j++) {
      solver(i, j);
    }
  }
}
int main() {
  memset(dl, 0xff, sizeof(dl));
  memset(dr, 0xff, sizeof(dr));
  scanf("%s", s);
  n = strlen(s);
  for (int i = 0; i < (int)(26); i++) {
    pos[i].push_back(-1);
  }
  for (int i = 0; i < (int)(n); i++) {
    int first = s[i] - 'a';
    pos[first].push_back(i);
    idx[i] = pos[first].size() - 1;
  }
  for (int i = 0; i < (int)(26); i++) {
    pos[i].push_back(n);
  }
  for (int j = 0; j < (int)(26); j++) {
    nextc[n][j] = n;
    for (int i = (n)-1; i >= 0; i--) {
      nextc[i][j] = s[i] == 'a' + j ? i : nextc[i + 1][j];
    }
  }
  for (int j = 0; j < (int)(26); j++) {
    prevc[0][j] = s[0] == 'a' + j ? 0 : -1;
    for (int i = (1); i <= (int)(n); i++) {
      prevc[i][j] = s[i] == 'a' + j ? i : prevc[i - 1][j];
    }
  }
  for (int i = 0; i < (int)(26); i++) {
    zx[i] = 1;
    while ((int)pos[i].size() > zx[i]) zx[i] <<= 1;
    tx[i].resize(zx[i] * 2, 0);
  }
  scanf("%d", &m);
  for (int i = 0; i < (int)(m); i++) {
    scanf("%d%d", &b[i][0], &b[i][1]);
    b[i][0]--;
    b[i][1]--;
  }
  for (int i = 0; i < (int)(26); i++) {
    for (int j = 0; j < (int)(pos[i].size() - 1); j++) {
      if (pos[i][j] + 1 <= pos[i][j + 1] - 1)
        sq.push_back(make_pair(pos[i][j] + 1, pos[i][j + 1] - 1));
    }
  }
  sort((sq).begin(), (sq).end(), [](pair<int, int> l, pair<int, int> r) {
    return l.second - l.first < r.second - r.first;
  });
  for (auto &qq : sq) {
    solve0(qq.first, qq.second, true);
  }
  precalc();
  for (int i = 0; i < (int)(m); i++) {
    puts(solve0(b[i][0], b[i][1]) ? "Alice" : "Bob");
  }
  return 0;
}
