#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int d[N], nxt[N << 1], to[N << 1], dp[N][2], tot;
inline void ins(int a, int b) { to[++tot] = b, nxt[tot] = d[a], d[a] = tot; }
int Maxd;
int dep[N], fa[N];
inline void dfs(int x) {
  dp[x][0] = 0, dp[x][1] = -1e9;
  for (int i = d[x]; i; i = nxt[i]) {
    int u = to[i];
    if (u == fa[x]) continue;
    dep[u] = dep[x] + 1;
    fa[u] = x;
    dfs(u);
    if (dp[u][0] + 1 > dp[x][0]) {
      swap(dp[x][0], dp[x][1]);
      dp[x][0] = dp[u][0] + 1;
    } else if (dp[u][0] + 1 > dp[x][1]) {
      dp[x][1] = dp[u][0] + 1;
    }
  }
  Maxd = max(Maxd, max(dp[x][0], dp[x][0] + dp[x][1]));
}
int T, a, b, da, db, n;
inline int get_d(int a, int b) {
  int dis = 0;
  while (a != b) {
    if (dep[a] < dep[b]) swap(a, b);
    ++dis, a = fa[a];
  }
  return dis;
}
int main() {
  scanf("%d", &T);
  while (T--) {
    memset(d, 0, sizeof(d)), tot = 0;
    scanf("%d%d%d%d%d", &n, &a, &b, &da, &db);
    int u, v;
    Maxd = 0;
    for (int i = 1; i < n; ++i) {
      scanf("%d%d", &u, &v);
      ins(u, v), ins(v, u);
    }
    dfs(1);
    if (da * 2 >= Maxd || da * 2 >= db || get_d(a, b) <= da)
      printf("Alice\n");
    else
      printf("Bob\n");
  }
  return 0;
}
