#include <bits/stdc++.h>
using namespace std;
void initialize(int a[], int n, int to = 0) {
  for (int i = 0; i < n; i++) a[i] = to;
}
int a_to_b(vector<int> tree[], int a, int b, int dist, int par) {
  int d = 1;
  for (auto node : tree[a]) {
    if (node == b) return dist;
    if (node != par) {
      d = max(a_to_b(tree, node, b, dist + 1, a), d);
    }
  }
  return d;
}
int visited[100005] = {0};
pair<int, int> pairs[100005];
pair<int, int> two_height(vector<int> tree[], int node, int parent) {
  pair<int, int> max2;
  max2.first = max2.second = 0;
  for (auto x : tree[node]) {
    int h = 1;
    if (x != parent) {
      if (visited[x])
        h += pairs[x].first;
      else
        h += two_height(tree, x, node).first;
      if (h > max2.first) {
        max2.second = max2.first;
        max2.first = h;
      } else if (h > max2.second) {
        max2.second = h;
      }
    }
  }
  visited[node] = 1;
  pairs[node] = max2;
  return max2;
}
int diameter(vector<int> tree[], int node, int parent, int n) {
  two_height(tree, node, parent);
  int diam = 0;
  for (int i = 0; i < n + 1; i++) {
    if (visited[i]) {
      diam = max(diam, pairs[i].first + pairs[i].second);
    }
  }
  return diam;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  cin >> t;
  int n;
  while (t--) {
    int a, b, da, db;
    cin >> n >> a >> b >> da >> db;
    initialize(visited, n + 1);
    vector<int> tree[n + 1];
    int u, v;
    for (int i = 0; i < n - 1; i++) {
      cin >> u >> v;
      tree[u].push_back(v);
      tree[v].push_back(u);
    }
    int dist = 1;
    dist = a_to_b(tree, a, b, dist, 0);
    if (dist > da && diameter(tree, 1, 0, n) > 2 * da && db > 2 * da)
      cout << "Bob";
    else
      cout << "Alice";
    cout << "\n";
  }
  return 0;
}
