#include <bits/stdc++.h>
using namespace std;
double inff = 1.0 / 0.0;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
long long int x, y, n, i, z, j, k, w, u, q, m, ans;
vector<long long int> adj[200010], l;
void dfs(long long int src, long long int par, long long int lev) {
  l[src] = lev;
  for (auto a : adj[src]) {
    if (a != par) {
      dfs(a, src, lev + 1);
    }
  }
}
void init() {
  for (i = (long long int)0; i < (long long int)n; i++) adj[i].clear();
}
void solve() {
  cin >> n;
  init();
  long long int a, b, da, db, leaf;
  cin >> a >> b >> da >> db;
  a--, b--;
  for (i = (long long int)0; i < (long long int)n - 1; i++) {
    cin >> x >> y;
    x--, y--;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  if (2 * da >= db) {
    cout << "Alice"
         << "\n";
    return;
  }
  for (i = (long long int)0; i < (long long int)n; i++) {
    if ((long long int)adj[i].size() == 1) {
      leaf = i;
      break;
    }
  }
  l.assign(n, 0);
  dfs(a, -1, 0);
  if (l[b] <= da) {
    cout << "Alice"
         << "\n";
    return;
  }
  l.assign(n, 0);
  dfs(leaf, -1, 0);
  leaf = max_element(l.begin(), l.end()) - l.begin();
  l.assign(n, 0);
  dfs(leaf, -1, 0);
  w = *max_element(l.begin(), l.end());
  if (w <= 2 * da)
    cout << "Alice"
         << "\n";
  else
    cout << "Bob"
         << "\n";
}
int main() {
  ios::sync_with_stdio(false), cout.tie(0), cin.tie(0);
  ;
  int TESTS = 1;
  cin >> TESTS;
  while (TESTS--) {
    solve();
  }
}
