#include <bits/stdc++.h>
using namespace std;
long long t, n, a, b, da, db;
list<long long> graph[100005];
pair<long long, long long> get_end_point(long long node, long long par,
                                         long long dep) {
  if (graph[node].size() == 1 && *graph[node].begin() == par)
    return make_pair(node, dep);
  pair<long long, long long> ret = make_pair(0, 0);
  for (list<long long>::iterator it = graph[node].begin();
       it != graph[node].end(); it++) {
    if (*it == par) continue;
    pair<long long, long long> next = get_end_point(*it, node, dep + 1);
    if (ret.second < next.second) ret = next;
  }
  return ret;
}
long long get_tree_diameter() {
  long long end_point1 = get_end_point(1, -1, 0).first;
  return get_end_point(end_point1, -1, 0).second;
}
long long _get_distance_ab(long long node, long long par, long long dep) {
  if (node == b) return dep;
  for (list<long long>::iterator it = graph[node].begin();
       it != graph[node].end(); it++) {
    if (*it == par) continue;
    long long ret;
    if (ret = _get_distance_ab(*it, node, dep + 1)) return ret;
  }
  return 0;
}
long long get_distance_ab() { return _get_distance_ab(a, -1, 0); }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    for (long long i = 1; i <= n; i++) graph[i].clear();
    for (long long i = 1; i < n; i++) {
      long long x, y;
      cin >> x >> y;
      graph[x].push_back(y);
      graph[y].push_back(x);
    }
    long long diameter = get_tree_diameter();
    long long dist_ab = get_distance_ab();
    if (da >= dist_ab || min(db, diameter) <= da * 2)
      cout << "Alice\n";
    else
      cout << "Bob\n";
  }
  return 0;
}
