#include <bits/stdc++.h>
using namespace std;
int T, n, a, b, da, db, dis[100005], max1, max2, maxn1, maxn2;
bool bj[100005], now;
vector<int> path[100005];
void dfs(int x) {
  for (int i = 0; i < (int)path[x].size(); i++) {
    int to = path[x][i];
    if (bj[to]) continue;
    bj[to] = 1;
    dis[to] = dis[x] + 1;
    if (now) {
      if (maxn2 < dis[to]) {
        maxn2 = dis[to];
        max2 = to;
      }
    } else {
      if (maxn1 < dis[to]) {
        maxn1 = dis[to];
        max1 = to;
      }
    }
    dfs(to);
  }
}
int main() {
  cin >> T;
  int u, v;
  while (T--) {
    maxn1 = maxn2 = 0;
    scanf("%d%d%d%d%d", &n, &a, &b, &da, &db);
    for (int i = 0; i <= n; i++) path[i].clear();
    for (int i = 1; i < n; i++) {
      scanf("%d%d", &u, &v);
      path[u].push_back(v);
      path[v].push_back(u);
    }
    if (da * 2 >= db) {
      cout << "Alice" << endl;
      continue;
    }
    memset(dis, 0, sizeof(dis));
    memset(bj, 0, sizeof(bj));
    dis[a] = 0;
    bj[a] = 1;
    now = 0;
    dfs(a);
    if (dis[b] <= da) {
      cout << "Alice" << endl;
      continue;
    }
    now = 1;
    memset(dis, 0, sizeof(dis));
    memset(bj, 0, sizeof(bj));
    dfs(max1);
    if ((dis[max2] + 1) >> 1 <= da) {
      cout << "Alice" << endl;
    } else
      cout << "Bob" << endl;
  }
}
