#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > graph;
vector<int> visited;
int distance(int u, int v) {
  visited[u] = true;
  if (u == v) {
    return 0;
  } else {
    int k;
    for (auto i : graph[u]) {
      if (!visited[i]) {
        k = distance(i, v);
        if (k != -1) {
          return k + 1;
        }
      }
    }
    return -1;
  }
}
vector<int> diam(int u) {
  visited[u] = true;
  vector<int> res(2);
  vector<int> k;
  res[0] = -1;
  res[1] = u;
  for (auto i : graph[u]) {
    if (!visited[i]) {
      k = diam(i);
      res = (res[0] < k[0]) ? k : res;
    }
  }
  res[0]++;
  return res;
}
int main() {
  int t;
  cin >> t;
  int n, a, b, da, db;
  int u, v;
  int d, diameter;
  vector<int> temporary;
  while (t--) {
    cin >> n;
    graph.resize(n);
    visited.resize(n);
    cin >> a >> b >> da >> db;
    for (int i = 0; i < n - 1; i++) {
      cin >> u >> v;
      graph[u - 1].push_back(v - 1);
      graph[v - 1].push_back(u - 1);
    }
    temporary = diam(0);
    for (int i = 0; i < n; i++) {
      visited[i] = false;
    }
    diameter = diam(temporary[1])[0];
    for (int i = 0; i < n; i++) {
      visited[i] = false;
    }
    d = distance(a - 1, b - 1);
    if (d <= da) {
      cout << "Alice" << endl;
    } else if (2 * da >= diameter) {
      cout << "Alice" << endl;
    } else if (db <= 2 * da) {
      cout << "Alice" << endl;
    } else {
      cout << "Bob" << endl;
    }
    graph.clear();
    visited.clear();
  }
  return 0;
}
