#include <bits/stdc++.h>
using namespace std;
std::vector<std::vector<int>> adj;
std::vector<bool> visited1;
std::vector<bool> visited2;
int dab;
int n, a, b;
int h = 0;
int p = 0;
pair<int, int> mx = {INT_MIN, -1};
int diam = INT_MIN;
void dfs1(int x) {
  visited1[x] = true;
  if (x == b) dab = h;
  if (mx.first < h) {
    mx = {h, x};
  }
  h++;
  for (auto& i : adj[x]) {
    if (visited1[i] == false) {
      dfs1(i);
    }
  }
  h--;
}
void dfs2(int x) {
  visited2[x] = true;
  diam = max(diam, p);
  p++;
  for (auto& i : adj[x]) {
    if (visited2[i] == false) {
      dfs2(i);
    }
  }
  p--;
}
void solve() {
  int da, db;
  cin >> n >> a >> b >> da >> db;
  a--;
  b--;
  h = 0;
  p = 0;
  diam = INT_MIN;
  mx = {INT_MIN, -1};
  adj.assign(n, std::vector<int>(0));
  visited2.assign(n, 0);
  visited1.assign(n, 0);
  for (long long int i = 0; i < n - 1; i++) {
    int c, d;
    cin >> c >> d;
    adj[c - 1].push_back(d - 1);
    adj[d - 1].push_back(c - 1);
  }
  dfs1(a);
  dfs2(mx.second);
  if (dab <= da) {
    cout << "Alice\n";
    return;
  }
  if (2 * da >= diam) {
    cout << "Alice\n";
    return;
  }
  if (db > 2 * da) {
    cout << "Bob\n";
    return;
  } else {
    cout << "Alice\n";
    return;
  }
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  int ttt;
  cin >> ttt;
  while (ttt--) solve();
}
