#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  register long long x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 3) + (x << 1) + ch - '0';
    ch = getchar();
  }
  return (f == 1) ? x : -x;
}
struct edge {
  int to, nxt;
} g[1010101];
int head[1010101], tot, n, A, B, da, db;
inline void made(int from, int to) {
  g[++tot].to = to;
  g[tot].nxt = head[from];
  head[from] = tot;
}
int fa[1010101], dep[1010101], dp[1010101], ans;
void dfs(int u, int faa) {
  fa[u] = faa, dep[u] = dep[faa] + 1;
  dp[u] = 0;
  for (int i = head[u]; i; i = g[i].nxt) {
    int v = g[i].to;
    if (v == faa) continue;
    dfs(v, u);
    ans = max(ans, dp[v] + 1 + dp[u]);
    dp[u] = max(dp[u], dp[v] + 1);
  }
}
signed main() {
  int T = read();
  while (T--) {
    n = read(), A = read(), B = read(), da = read(), db = read();
    for (int i = 1; i < n; i++) {
      int x = read(), y = read();
      made(x, y);
      made(y, x);
    }
    if (da * 2 >= db) {
      puts("Alice");
    } else {
      ans = 0;
      dfs(1, 0);
      int aa = A, bb = B, dis = 0;
      if (dep[aa] < dep[bb]) swap(aa, bb);
      while (dep[aa] > dep[bb]) {
        aa = fa[aa];
        dis++;
      }
      while (aa != bb && fa[aa] != fa[bb]) {
        aa = fa[aa], bb = fa[bb];
        dis += 2;
      }
      if (aa != bb) dis += 2;
      if (dis <= da) {
        puts("Alice");
      } else {
        if (ans >= da * 2 + 1)
          puts("Bob");
        else
          puts("Alice");
      }
    }
    for (int i = 1; i <= n; i++) dep[i] = head[i] = fa[i] = tot = 0;
  }
  return 0;
}
