#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long md = MOD;
const long long N = 2e5 + 5;
void ipgraph(long long n, long long m);
void dfs(long long u, long long par);
void bfs(long long start);
void iptree(long long n);
vector<long long> topological_sort(const vector<vector<long long> > &a);
vector<vector<long long> > adj;
vector<bool> visited;
vector<long long> dist1;
vector<long long> dist2;
void dfs(long long u, long long par) {
  for (long long v : adj[u]) {
    if (v == par) continue;
    dist1[v] = dist1[u] + 1;
    dfs(v, u);
  }
}
int32_t main() {
  clock_t begin = clock();
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  long long test_case;
  cin >> test_case;
  while (test_case--) {
    long long n, a, b, da, db;
    cin >> n >> a >> b >> da >> db;
    a--;
    b--;
    adj = vector<vector<long long> >(n);
    dist1 = vector<long long>(n);
    dist2 = vector<long long>(n);
    ipgraph(n, n - 1);
    dist1[0] = 0;
    dfs(b, -1);
    long long a_b = dist1[a];
    long long maxDistindex =
        max_element(dist1.begin(), dist1.end()) - dist1.begin();
    long long maxDist = *max_element(dist1.begin(), dist1.end());
    if (a_b <= da) {
      cout << "Alice"
           << "\n";
      continue;
    }
    dist1[maxDistindex] = 1;
    dfs(maxDistindex, -1);
    long long diameter = *max_element(dist1.begin(), dist1.end());
    if (diameter <= 2 * da + 1) {
      cout << "Alice"
           << "\n";
      continue;
    } else if (db > 2 * da) {
      cout << "Bob"
           << "\n";
      continue;
    }
    cout << "Alice"
         << "\n";
  }
  return 0;
}
void ipgraph(long long n, long long m) {
  long long i, u, v;
  while (m--) {
    cin >> u >> v;
    u--, v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
}
