#include <bits/stdc++.h>
using namespace std;
inline int rd() {
  int x = 0, fl = 1;
  char ch = getchar();
  for (; ch < 48 || ch > 57; ch = getchar())
    if (ch == '-') fl = -1;
  for (; 48 <= ch && ch <= 57; ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ 48);
  return x * fl;
}
inline void wri(int x) {
  if (x < 0) putchar(45), x = -x;
  if (x > 9) wri(x / 10);
  putchar(x % 10 | 48);
}
inline void wln(int x) { wri(x), putchar(10); }
const int N = 100002;
struct node {
  int to, ne;
} e[N << 1];
int n, a, b, da, db, x, y, i, dis, dep[N], mx, k, T, h[N], tot;
void add(int x, int y) { e[++tot] = {y, h[x]}, h[x] = tot; }
void dfs(int u, int fa) {
  for (int i = h[u], v; i; i = e[i].ne)
    if ((v = e[i].to) != fa) {
      dep[v] = dep[u] + 1;
      dfs(v, u);
    }
}
void solve() {
  n = rd(), a = rd(), b = rd(), da = rd(), db = rd();
  tot = 0;
  memset(h, 0, sizeof(h));
  for (i = 1; i < n; i++) x = rd(), y = rd(), add(x, y), add(y, x);
  dep[a] = 0;
  dfs(a, 0);
  dis = dep[b];
  mx = 0;
  for (i = 1; i <= n; i++)
    if (dep[i] > mx) mx = dep[i], k = i;
  dep[k] = 0;
  dfs(k, 0);
  mx = 0;
  for (i = 1; i <= n; i++)
    if (dep[i] > mx) mx = dep[i];
  puts(min(mx, db) > da * 2 && dis > da ? "Bob" : "Alice");
}
signed main() {
  T = rd();
  for (; T--;) solve();
}
