#include <bits/stdc++.h>
using namespace std;
long long L[100005];
long long P[100005][40];
long long T[100005];
vector<long long> graph[100005];
long long mx = 0, hh;
void dfs(long long src, long long par) {
  if (src == -1)
    L[par] = 0;
  else
    L[par] = L[src] + 1;
  if (mx < L[par]) {
    hh = par;
    mx = max(mx, L[par]);
  }
  T[par] = src;
  long long len = graph[par].size();
  for (long long i = 0; i < (long long)graph[par].size(); i++) {
    long long v = graph[par][i];
    if (v != src) {
      dfs(par, v);
    }
  }
}
void dfs1(long long src, long long par) {
  if (src == -1)
    L[par] = 0;
  else
    L[par] = L[src] + 1;
  if (mx < L[par]) {
    hh = par;
    mx = max(mx, L[par]);
  }
  long long len = graph[par].size();
  for (long long i = 0; i < (long long)graph[par].size(); i++) {
    long long v = graph[par][i];
    if (v != src) {
      dfs1(par, v);
    }
  }
}
int main() {
  long long i, j, n, m, t, a, b, c, d, e, f, x, y;
  scanf("%lld", &t);
  for (long long cz = 0; cz < t; cz++) {
    scanf("%lld%lld%lld%lld%lld", &n, &a, &b, &c, &d);
    for (i = 0; i < n - 1; i++) {
      scanf("%lld%lld", &x, &y);
      graph[x].push_back(y);
      graph[y].push_back(x);
    }
    mx = 0;
    dfs(-1, a);
    long long cc, dd;
    cc = L[b];
    for (i = 0; i <= n; i++) {
      L[i] = 0;
    }
    mx = 0;
    dfs1(-1, hh);
    if (c * 2 >= min(d, mx) || cc <= c) {
      printf("Alice\n");
    } else
      printf("Bob\n");
    for (i = 0; i <= n; i++) {
      graph[i].clear();
      L[i] = 0;
    }
  }
}
