#include <bits/stdc++.h>
using namespace std;
long long fastpow(long long a, long long b,
                  long long m = (long long)(1e9 + 7)) {
  long long res = 1;
  a %= m;
  while (b > 0) {
    if (b & 1) res = (res * a) % m;
    a = (a * a) % m;
    b >>= 1;
  }
  return res;
}
long long n, a, b, da, db;
const long long maxN = 1e5 + 5;
vector<long long> adj[maxN];
long long diameter;
long long dfs(long long u = 1, long long p = 1) {
  vector<long long> lens;
  for (auto x : adj[u]) {
    if (x != p) {
      long long curr = dfs(x, u);
      lens.push_back(curr);
    }
  }
  sort(lens.begin(), lens.end(), greater<long long>());
  long long val = 0;
  if ((long long)lens.size()) {
    val = lens[0];
  }
  if ((long long)lens.size() > 1) {
    val += lens[1];
  }
  diameter = max(diameter, val);
  if ((long long)lens.size()) return lens[0] + 1;
  return 1;
}
long long dist;
void dfs2(long long root, long long parent, long long d) {
  if (root == b) {
    dist = d;
  }
  for (auto x : adj[root]) {
    if (x != parent) {
      dfs2(x, root, d + 1);
    }
  }
}
int32_t main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  ;
  long long t;
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    for (long long i = 1; i <= n; i++) {
      adj[i].clear();
    }
    long long x, y;
    for (long long i = 1; i < n; i++) {
      cin >> x >> y;
      adj[x].push_back(y);
      adj[y].push_back(x);
    }
    diameter = 0;
    dfs();
    dist = 0;
    dfs2(a, a, 0);
    db = min(db, diameter);
    if (dist <= da) {
      cout << "Alice" << endl;
    } else if ((da * 2 + 1) <= db) {
      cout << "Bob" << endl;
    } else {
      cout << "Alice" << endl;
    }
  }
  return 0;
}
