#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
using vvvvll = vector<vvvll>;
constexpr ll INF = 1LL << 60;
struct Fast {
  Fast() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(std::numeric_limits<double>::max_digits10);
  }
} fast;
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline T MaxE(vector<T> &v, ll S, ll E) {
  T m = v[S];
  for (ll i = (S); i <= (E); i++) chmax(m, v[i]);
  return m;
}
template <class T>
inline T MinE(vector<T> &v, ll S, ll E) {
  T m = v[S];
  for (ll i = (S); i <= (E); i++) chmin(m, v[i]);
  return m;
}
template <class T>
inline T MaxE(vector<T> &v) {
  return MaxE(v, 0, (ll)v.size() - 1);
}
template <class T>
inline T MinE(vector<T> &v) {
  return MinE(v, 0, (ll)v.size() - 1);
}
template <class T>
inline T Sum(vector<T> &v, ll S, ll E) {
  T s = T();
  for (ll i = (S); i <= (E); i++) s += v[i];
  return s;
}
template <class T>
inline T Sum(vector<T> &v) {
  return Sum(v, 0, v.size() - 1);
}
template <class T>
inline ll sz(T &v) {
  return (ll)v.size();
}
template <class T>
inline T POW(T a, ll n) {
  T r = 1;
  for (; n > 0; n >>= 1, a *= a) {
    if (n & 1) r *= a;
  }
  return r;
}
inline ll POW(int a, ll n) { return POW((ll)a, n); }
inline ll CEIL(ll a, ll b) { return (a + b - 1) / b; }
template <class T>
inline ll MaxI(vector<T> &v, ll S, ll E) {
  ll m = S;
  for (ll i = (S); i <= (E); i++)
    if (v[i] > v[m]) m = i;
  return m;
}
template <class T>
inline ll MinI(vector<T> &v, ll S, ll E) {
  ll m = S;
  for (ll i = (S); i <= (E); i++)
    if (v[i] < v[m]) m = i;
  return m;
}
template <class T>
inline ll MaxI(vector<T> &v) {
  return MaxI(v, 0, (ll)v.size() - 1);
}
template <class T>
inline ll MinI(vector<T> &v) {
  return MinI(v, 0, (ll)v.size() - 1);
}
vvll cinGraph(ll nodeNum, ll edgeNum, bool isDirected) {
  vvll to(nodeNum);
  for (ll i = (0); i <= (edgeNum - 1); i++) {
    ll v, u;
    cin >> v >> u;
    v--;
    u--;
    to[v].push_back(u);
    if (!isDirected) to[u].push_back(v);
  }
  return move(to);
}
vll bfs(vvll &to, ll s) {
  vll dist(to.size(), INF);
  queue<ll> Q;
  dist[s] = 0;
  Q.push(s);
  while (!Q.empty()) {
    ll v = Q.front();
    Q.pop();
    for (auto &&u : to[v])
      if (chmin(dist[u], dist[v] + 1)) Q.push(u);
  }
  return move(dist);
}
void solve() {
  ll n, a, b, da, db;
  cin >> n >> a >> b >> da >> db;
  a--;
  b--;
  vvll to = cinGraph(n, n - 1, false);
  vll dist1 = bfs(to, a);
  ll en = MaxI(dist1);
  vll dist2 = bfs(to, en);
  ll st = MaxI(dist2);
  ll diameter = dist2[st];
  ll dab = dist1[b];
  if (dab > da and db >= da * 2 + 1 and diameter >= da * 2 + 1) {
    cout << "Bob" << '\n';
  } else {
    cout << "Alice" << '\n';
  }
}
int main() {
  ll t;
  cin >> t;
  for (ll i = (0); i <= (t - 1); i++) {
    solve();
  }
  return 0;
}
