#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct Edge {
  int u, v, nxt;
} edge[maxn << 1];
int head[maxn], cnt = -1;
inline void init() {
  memset(head, -1, sizeof(head));
  cnt = -1;
}
inline void add_edge(int u, int v) {
  edge[++cnt] = {u, v, head[u]};
  head[u] = cnt;
}
int leaf, dep;
int dis[maxn];
void dfs(int u, int fa, int depth) {
  if (dep < depth) leaf = u, dep = depth;
  for (int i = head[u]; ~i; i = edge[i].nxt) {
    Edge& e = edge[i];
    if (e.v != fa) {
      dis[e.v] = min(dis[e.v], dis[u] + 1);
      dfs(e.v, u, depth + 1);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    init();
    dep = 0, leaf = 1;
    int n, a, b, da, db;
    cin >> n >> a >> b >> da >> db;
    for (int i = 1; i < n; ++i) {
      int u, v;
      cin >> u >> v;
      add_edge(u, v);
      add_edge(v, u);
    }
    dfs(1, -1, 0);
    dep = 0;
    dfs(leaf, -1, 0);
    int maxlen = dep;
    memset(dis, 0x3f, sizeof(dis));
    dis[a] = 0;
    dfs(a, -1, 0);
    if (dis[b] <= da || maxlen <= 2 * da || db <= 2 * da) {
      cout << "Alice" << '\n';
    } else {
      cout << "Bob" << '\n';
    }
  }
  return 0;
}
