#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
vector<int> edges[N];
int n, a, b, da, db;
int node, maDepth, farthest;
void dfs(int s, int p, int depth) {
  if (maDepth < depth) {
    maDepth = depth;
    farthest = s;
  }
  for (auto x : edges[s]) {
    if (x == p) continue;
    dfs(x, s, depth + 1);
  }
}
int dist;
void dfs2(int s, int p, int d, int dest) {
  if (s == dest) {
    dist = d;
  }
  for (auto x : edges[s]) {
    if (x == p) continue;
    dfs2(x, s, d + 1, dest);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t;
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    for (int i = 1; i <= n; i++) {
      edges[i].clear();
    }
    for (int i = 0; i < n - 1; i++) {
      int u, v;
      cin >> u >> v;
      edges[u].push_back(v);
      edges[v].push_back(u);
    }
    dfs2(b, -1, 0, a);
    if (dist <= da) {
      cout << "Alice\n";
      continue;
    }
    maDepth = 0;
    dfs(1, -1, 0);
    maDepth = 0;
    int daim1 = farthest;
    dfs(farthest, -1, 0);
    int daim2 = farthest;
    if (maDepth <= 2 * da || db <= 2 * da) {
      cout << "Alice\n";
      continue;
    }
    int steps1, steps2;
    dfs2(b, -1, 0, daim1);
    steps1 = (dist + db - 1) / db;
    dfs2(a, -1, 0, daim1);
    steps2 = (dist + da - 1) / da;
    if (steps1 < steps2) {
      cout << "Bob\n";
      continue;
    }
    dfs2(b, -1, 0, daim2);
    steps1 = (dist + db - 1) / db;
    dfs2(a, -1, 0, daim2);
    steps2 = (dist + da - 1) / da;
    if (steps1 < steps2) {
      cout << "Bob\n";
      continue;
    }
    cout << "Alice\n";
  }
}
