#include <bits/stdc++.h>
using namespace std;
vector<vector<long long>> adj, v;
void dfs(long long n, long long p) {
  for (long long i = 0; i < adj[n].size(); i++) {
    long long nxt = adj[n][i];
    if (nxt == p) {
      continue;
    }
    v[n].push_back(nxt);
    dfs(nxt, n);
  }
}
long long dda = 0;
long long sdfs(long long i) {
  long long len = v[i].size();
  if (len == 0) return 0;
  if (len == 1) return 1 + sdfs(v[i][0]);
  long long da1 = 0, da2 = 0;
  for (long long ii = 0; ii < len; ii++) {
    long long now = 1 + sdfs(v[i][ii]);
    if (now > da1) {
      da2 = da1;
      da1 = now;
    } else if (now > da2)
      da2 = now;
  }
  if (da1 + da2 > dda) dda = da1 + da2;
  return da1;
}
long long dist = 0;
void chk(long long a, long long p, long long d, long long b) {
  if (a == b) {
    dist = d;
    return;
  }
  for (long long i = 0; i < adj[a].size(); i++) {
    long long nxt = adj[a][i];
    if (nxt == p) {
      continue;
    }
    chk(nxt, a, d + 1, b);
  }
}
signed main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long TEST_CASE;
  cin >> TEST_CASE;
  for (long long TEST_NUM = 1; TEST_NUM <= TEST_CASE; TEST_NUM++) {
    long long n, a, b, da, db;
    cin >> n >> a >> b >> da >> db;
    dda = 0;
    adj = vector<vector<long long>>(n + 1);
    v = vector<vector<long long>>(n + 1);
    for (long long i = 1, x, y; i < n; i++) {
      cin >> x >> y;
      adj[x].push_back(y);
      adj[y].push_back(x);
    }
    if (2 * da >= db) {
      cout << "Alice" << '\n';
      continue;
    }
    chk(a, 0, 0, b);
    if (dist <= da) {
      cout << "Alice" << '\n';
      continue;
    }
    dfs(1, 0);
    long long rst = sdfs(1);
    rst = max(rst, dda);
    if (rst > 2 * da) {
      cout << "Bob" << '\n';
    } else {
      cout << "Alice" << '\n';
    }
  }
}
