#include <bits/stdc++.h>
using namespace std;
const int M = 1e6 + 4;
struct node {
  int v, w, nextt;
} e[M << 1];
int deep[M];
int head[M], book[M], dis[M], n, flag, maxx, tot, b;
void bfs(int s) {
  if (!flag)
    flag = 1;
  else {
    for (int i = 0; i <= n; i++) book[i] = 0, dis[i] = 0;
  }
  book[s] = 1;
  queue<int> que;
  que.push(s);
  b = s;
  maxx = 0;
  while (!que.empty()) {
    int u = que.front();
    que.pop();
    for (int i = head[u]; ~i; i = e[i].nextt) {
      int v = e[i].v;
      if (!book[v]) {
        book[v] = 1;
        que.push(v);
        dis[v] = dis[u] + e[i].w;
        if (dis[v] > maxx) {
          maxx = dis[v];
          b = v;
        }
      }
    }
  }
}
void addedge(int u, int v, int w) {
  e[tot].v = v;
  e[tot].w = w;
  e[tot].nextt = head[u];
  head[u] = tot++;
}
void dfs(int u, int fa) {
  deep[u] = deep[fa] + 1;
  for (int i = head[u]; ~i; i = e[i].nextt) {
    int v = e[i].v;
    if (v != fa) {
      dfs(v, u);
    }
  }
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    int A, B, dA, dB;
    tot = maxx = flag = 0;
    scanf("%d%d%d%d%d", &n, &A, &B, &dA, &dB);
    for (int i = 0; i <= n; i++)
      head[i] = -1, book[i] = 0, dis[i] = 0, deep[i] = 0;
    for (int i = 1; i < n; i++) {
      int u, v, w;
      scanf("%d%d", &u, &v);
      w = 1;
      addedge(u, v, w);
      addedge(v, u, w);
    }
    bfs(1);
    bfs(b);
    dfs(A, 0);
    int distan = deep[B] - deep[A];
    if (distan <= dA || dA > dB)
      puts("Alice");
    else {
      if (maxx >= 2 * dA + 1 && dB >= 2 * dA + 1)
        puts("Bob");
      else
        puts("Alice");
    }
  }
  return 0;
}
