#include <bits/stdc++.h>
using namespace std;
bool chmin(int& a, int b) { return b < a ? a = b, true : false; }
bool chmax(int& a, int b) { return b > a ? a = b, true : false; }
bool chmin(long long& a, long long b) { return b < a ? a = b, true : false; }
bool chmax(long long& a, long long b) { return b > a ? a = b, true : false; }
const int inf = 1e09 + 5e3;
const long long linf = 2e18 + 5e3;
const int mod = 1e9 + 7;
const int mxn = 1e6 + 30;
int n, a, b, da, db, dl;
vector<vector<int> > adj;
pair<int, int> dfs1(int v, int p = -1, int d = 0) {
  pair<int, int> ret = {d, v};
  for (auto u : adj[v])
    if (u != p) ret = max(ret, dfs1(u, v, d + 1));
  return ret;
}
int dfs2(int v, int t, int p = -1, int d = 0) {
  if (v == t) return d;
  for (auto u : adj[v])
    if (u != p) {
      if (~dfs2(u, t, v, d + 1)) return dfs2(u, t, v, d + 1);
    }
  return -1;
}
void solve() {
  int u, v;
  cin >> n >> a >> b >> da >> db;
  a--, b--;
  adj.assign(n, vector<int>());
  for (int i = 1; i < n; i++) {
    cin >> u >> v;
    u--, v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  if (dfs2(a, b) <= da) {
    cout << "Alice" << '\n';
    return;
  }
  dl = dfs1(dfs1(0).second).first;
  int f = da <= (db - 1) / 2 && dl > 2 * da;
  cout << (f ? "Bob" : "Alice") << '\n';
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    solve();
  }
}
