#include <bits/stdc++.h>
using namespace std;
const int limit = 100005;
void add(int pos, int val, int sx[limit]) {
  for (; pos < limit; pos += pos & -pos) sx[pos] ^= val;
}
int xbefore(int pos, int sx[limit]) {
  int x = 0;
  for (; pos; pos -= pos & -pos) x ^= sx[pos];
  return x;
}
int n;
int s[limit];
int cases;
int tiempo;
int posle[26][limit];
int posri[26][limit];
int precomputed[2][limit][26];
int sx[26][limit];
struct elem {
  int side, pos, car;
  elem() {}
  elem(int side, int pos, int car) : side(side), pos(pos), car(car) {}
};
int getposri(const elem &e) {
  int pos = e.pos;
  int c = e.car;
  return posri[c][pos];
}
int getposle(const elem &e) {
  int pos = e.pos;
  int c = e.car;
  return posle[c][pos];
}
int size(const elem &e) {
  if (e.side) return e.pos - getposle(e);
  return getposri(e) - e.pos;
}
bool operator<(const elem &e1, const elem &e2) { return size(e1) < size(e2); }
vector<elem> lista[limit];
void add(elem e) { lista[size(e)].push_back(e); }
int tiempocompute;
int seencompute[limit];
int compute(int l, int r) {
  if (l > r) return 0;
  if (l == r) return 1;
  tiempocompute++;
  for (int c = 0; c < 26; c++) {
    if (posri[c][l] <= r) {
      int pl = posri[c][l];
      int pr = posle[c][r];
      int solact = 0;
      if (l < pl) solact ^= precomputed[0][l][c];
      if (pr < r) solact ^= precomputed[1][r][c];
      solact ^= xbefore(pr, sx[c]) ^ xbefore(pl, sx[c]);
      seencompute[solact] = tiempocompute;
    }
  }
  int sol = 0;
  while (seencompute[sol] == tiempocompute) sol++;
  return sol;
}
void precompute(elem e) {
  int side = e.side;
  int pos = e.pos;
  int car = e.car;
  int &precom = precomputed[side][pos][car];
  if (e.side == 0) {
    precom = compute(pos, posri[car][pos] - 1);
    if (pos == 1 or s[pos - 1] == car) add(posri[car][pos], precom, sx[car]);
  } else {
    precom = compute(posle[car][pos] + 1, pos);
  }
}
char ss[limit];
int main() {
  ios::sync_with_stdio(false);
  scanf("%s", ss);
  scanf("%d", &cases);
  n = strlen(ss);
  for (int i = 1; i <= n; i++) s[i] = ss[i - 1] - 'a';
  for (int C = 0; C < 26; C++) posri[C][n + 1] = n + 1;
  for (int C = 0; C < 26; C++) {
    for (int i = 1; i <= n; i++) posle[C][i] = s[i] == C ? i : posle[C][i - 1];
    for (int i = n; i >= 1; i--) posri[C][i] = s[i] == C ? i : posri[C][i + 1];
  }
  for (int i = 1; i <= n; i++) {
    for (int C = 0; C < 26; C++) {
      add(elem(0, i, C));
      add(elem(1, i, C));
    }
  }
  for (int j = 0; j < limit; j++) {
    vector<elem> &v = lista[j];
    for (int i = 0; i < int(v.size()); i++) precompute(v[i]);
  }
  for (int cas = 0; cas < cases; cas++) {
    int l, r;
    scanf("%d%d", &l, &r);
    if (compute(l, r))
      printf("Alice\n");
    else
      printf("Bob\n");
  }
}
