#include <bits/stdc++.h>
using namespace std;
void solve();
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int64_t t;
  cin >> t;
  while (t--) solve();
  return 0;
}
vector<vector<int64_t>> to;
vector<bool> bobCan, parcouru;
vector<int64_t> pId;
int64_t nbPar;
int64_t da, db, goal;
void dfsBob(int64_t n, int64_t dist) {
  if (bobCan[n]) return;
  bobCan[n] = true;
  goal++;
  if (dist == 0) return;
  for (int64_t &i : to[n]) dfsBob(i, dist - 1);
}
int64_t dfs2(int64_t n, int64_t dist, int64_t id) {
  if (pId[n] == id) return 0;
  pId[n] = id;
  int64_t score = 0;
  if (bobCan[n]) score = 1;
  if (dist == 0) return score;
  for (int64_t &i : to[n]) score += dfs2(i, dist - 1, id);
  return score;
}
bool dfs1(int64_t n, int64_t dist) {
  if (parcouru[n]) return false;
  parcouru[n] = true;
  if (dfs2(n, da, nbPar++) == goal) return true;
  if (dist == 0) return false;
  for (int64_t &i : to[n])
    if (dfs1(i, dist - 1)) return true;
  return false;
}
bool recherche(int64_t n, int64_t dist, int64_t m) {
  if (parcouru[n]) return false;
  parcouru[n] = true;
  if (n == m) return true;
  if (dist == 0) return false;
  for (int64_t &i : to[n])
    if (recherche(i, dist - 1, m)) return true;
  return false;
}
void solve() {
  int64_t n, a, b;
  cin >> n >> a >> b >> da >> db;
  to = vector<vector<int64_t>>(n + 1);
  bobCan = parcouru = vector<bool>(n + 1);
  for (int64_t i = 0; i < n - 1; i++) {
    pair<int64_t, int64_t> input;
    cin >> input.first >> input.second;
    to[input.first].push_back(input.second);
    to[input.second].push_back(input.first);
  }
  if (db <= 2 * da) {
    cout << "Alice\n";
    return;
  }
  if (recherche(a, da, b)) {
    cout << "Alice\n";
    return;
  }
  parcouru = vector<bool>(n + 1);
  goal = 0;
  dfsBob(b, db);
  parcouru = vector<bool>(n + 1);
  pId = vector<int64_t>(n + 1);
  nbPar = 1;
  if (dfs1(n, da)) {
    cout << "Alice\n";
    return;
  }
  {
    cout << "Bob\n";
    return;
  }
  return;
}
