#include <bits/stdc++.h>
using namespace std;
int mx_d = 0;
int vvv = 0;
void dfs_ddd(int v, int p, const vector<vector<int>> &g, int depth) {
  if (depth >= mx_d) {
    mx_d = depth;
    vvv = v;
  }
  for (auto to : g[v]) {
    if (to != p) {
      dfs_ddd(to, v, g, depth + 1);
    }
  }
}
void dfs_dd(int v, int p, const vector<vector<int>> &g, const vector<bool> &win,
            int depth) {
  if (depth >= mx_d) {
    mx_d = depth;
    vvv = v;
  }
  for (auto to : g[v]) {
    if (to != p) {
      dfs_dd(to, v, g, win, depth + 1);
    }
  }
}
bool dfs_d(int v, int p, const vector<vector<int>> &g, int depth,
           int max_depth) {
  if (depth >= max_depth) return true;
  for (auto to : g[v]) {
    if (to != p) {
      if (dfs_d(to, v, g, depth + 1, max_depth)) return true;
    }
  }
  return false;
}
void dfs_win(int v, int p, const vector<vector<int>> &g, vector<bool> &win,
             int depth, int max_depth) {
  win[v] = false;
  if (depth == max_depth) return;
  for (auto to : g[v]) {
    if (to != p) {
      dfs_win(to, v, g, win, depth + 1, max_depth);
    }
  }
}
void solve() {
  mx_d = 0;
  vvv = 0;
  int n, a, b, da, db;
  cin >> n >> a >> b >> da >> db;
  a--;
  b--;
  vector<vector<int>> g(n);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    g[u - 1].push_back(v - 1);
    g[v - 1].push_back(u - 1);
  }
  if (db < 2 * da + 1) {
    cout << "Alice\n";
    return;
  }
  vector<bool> win(n, true);
  dfs_win(a, a, g, win, 0, da);
  if (!win[b]) {
    cout << "Alice\n";
    return;
  }
  dfs_win(a, a, g, win, 0, 2 * da);
  if (dfs_d(b, b, g, 0, 2 * da + 1)) {
    cout << "Bob\n";
    return;
  } else {
    dfs_dd(b, b, g, win, 0);
    mx_d = 0;
    int vv = vvv;
    vvv = 0;
    dfs_ddd(vv, vv, g, 0);
    if (mx_d >= 2 * da + 1) {
      cout << "Bob\n";
      return;
    }
    cout << "Alice\n";
    return;
  }
}
int main() {
  int t;
  cin >> t;
  for (int t1 = 0; t1 < t; t1++) {
    solve();
  }
  return 0;
}
