#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3f;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
inline int read() {
  char ch = getchar();
  int x = 0, f = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ('0' <= ch && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int maxn = 3e5 + 10;
int n, a, b, da, db;
int deep[maxn];
int dist, diam;
vector<int> G[maxn];
int root1, root2;
void dfs(int u, int fa, int &diam, int &root) {
  deep[u] = deep[fa] + 1;
  if (diam < deep[u]) {
    diam = deep[u];
    root = u;
  }
  for (auto it : G[u]) {
    if (it == fa) continue;
    dfs(it, u, diam, root);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int t;
  cin >> t;
  while (t--) {
    cin >> n >> a >> b >> da >> db;
    for (int i = 1; i <= n; ++i) G[i].clear();
    for (int i = 1; i <= n - 1; ++i) {
      int u, v;
      cin >> u >> v;
      G[u].push_back(v);
      G[v].push_back(u);
    }
    diam = 0;
    root1 = 0, root2 = 0;
    dfs(b, 0, diam, root1);
    dist = deep[a] - deep[b];
    dfs(root1, 0, diam, root2);
    diam--;
    if (dist > da && db >= 2 * da + 1 && diam >= 2 * da + 1)
      cout << "Bob" << endl;
    else
      cout << "Alice" << endl;
  }
  return 0;
}
