#include <bits/stdc++.h>
using namespace std;
struct piii {
  long long first, second, th;
  bool operator<(const piii &b) {
    if (first != b.first) return first < b.first;
    if (second != b.second) return second < b.second;
    return th < b.th;
  }
};
int t, n, a, b, da, db, dd;
vector<int> e[100005];
int d[100005], mx[100005];
deque<int> de;
void dfs(int u, int p) {
  mx[u] = 0;
  for (int v : e[u])
    if (v != p) {
      dfs(v, u);
      dd = max(dd, mx[u] + mx[v] + 1);
      mx[u] = max(mx[u], mx[v] + 1);
    }
}
int main() {
  cout << setprecision(2) << fixed;
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    int u, v;
    for (int i = 1; i <= n; i++) e[i].clear();
    for (int i = 1; i < n; i++) {
      cin >> u >> v;
      e[u].push_back(v);
      e[v].push_back(u);
    }
    for (int i = 1; i <= n; i++) d[i] = 1e9;
    d[a] = 0;
    de.push_back(a);
    while (!de.empty()) {
      u = de.front();
      de.pop_front();
      for (int v : e[u])
        if (d[u] + 1 < d[v]) {
          d[v] = d[u] + 1;
          de.push_back(v);
        }
    }
    if (d[b] <= da) {
      cout << "Alice\n";
      continue;
    }
    dd = 0;
    dfs(1, 0);
    db = min(db, dd);
    if (da >= (db + 1) / 2)
      cout << "Alice\n";
    else
      cout << "Bob\n";
  }
  return 0;
}
