#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const int mod = 998244353;
const long long inv2 = (mod + 1) >> 1;
const double eps = 1e-6;
const int N = 1e6 + 10;
void extend_gcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return;
  }
  extend_gcd(b, a % b, x, y);
  long long temp = x;
  x = y;
  y = temp - (a / b) * y;
}
long long mod_inverse(long long a, long long m) {
  long long x, y;
  extend_gcd(a, m, x, y);
  return (x % m + m) % m;
}
long long fastpow(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res % mod;
}
int t, n, a, b, da, db, dep[maxn], cur;
vector<int> mp[maxn];
void dfs(int u, int f) {
  for (auto i : mp[u]) {
    if (i != f) {
      dep[i] = dep[u] + 1;
      if (dep[i] > dep[cur]) cur = i;
      dfs(i, u);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    for (int i = 0; i <= n; ++i) mp[i].clear();
    int x, y;
    for (int i = 0; i < n - 1; ++i) {
      cin >> x >> y;
      mp[x].push_back(y);
      mp[y].push_back(x);
    }
    dep[a] = 0;
    cur = a;
    dfs(a, 0);
    if (da >= dep[b])
      printf("Alice\n");
    else {
      dep[cur] = 0;
      dfs(cur, 0);
      int ma = dep[cur];
      if (2 * da >= ma)
        printf("Alice\n");
      else {
        if (db > 2 * da)
          printf("Bob\n");
        else
          printf("Alice\n");
      }
    }
  }
  return 0;
}
