#include <bits/stdc++.h>
using namespace std;
const long long maxn = 100000 + 5;
const long long mod = 998244353;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long double PI = acos(-1.0);
const long double eps = 1e-5;
inline long long read() {
  long long ans = 0, flag = 1;
  char c;
  c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') flag = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + (long long)(c - '0');
    c = getchar();
  }
  return ans * flag;
}
long long quickpow(long long x, long long y, long long mod) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = ans * x % mod;
    x = x * x % mod;
    y >>= 1;
  }
  return ans;
}
struct edge {
  int next, to, w;
} G[maxn << 1];
int head[maxn];
int vis[maxn];
int cnt, x, sum, dis = maxn;
int a, b, n, da, db;
void add(int u, int v, int w) {
  G[++cnt].next = head[u];
  G[cnt].to = v;
  G[cnt].w = w;
  head[u] = cnt;
}
void dfs(int u, int fa, int va) {
  for (int i = head[u]; i; i = G[i].next) {
    int v = G[i].to;
    if (v == fa) continue;
    dfs(v, u, va + G[i].w);
  }
  if (va > sum) {
    sum = va;
    x = u;
  }
}
void dfs2(int u, int fa, int va) {
  vis[u] = 1;
  if (u == b) {
    dis = va;
    return;
  }
  for (int i = head[u]; i; i = G[i].next) {
    int v = G[i].to;
    if (vis[v] || v == fa) continue;
    dfs2(v, u, va + 1);
  }
}
int main() {
  int T;
  scanf("%d", &T);
  int kase = 1;
  while (T--) {
    memset(head, 0, sizeof(head));
    scanf("%d%d%d%d%d", &n, &a, &b, &da, &db);
    for (int i = 1; i < n; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      add(u, v, 1);
      add(v, u, 1);
    }
    cnt = 0;
    sum = -1;
    if (da * 2 >= db) {
      printf("Alice\n");
      continue;
    }
    memset(vis, 0, sizeof(vis));
    dfs2(a, -1, 0);
    if (da >= dis) {
      printf("Alice\n");
      continue;
    }
    dfs(1, -1, 0);
    dfs(x, -1, 0);
    if (da * 2 >= sum) {
      printf("Alice\n");
    } else {
      printf("Bob\n");
    }
  }
  return 0;
}
