#include <bits/stdc++.h>   using namespace std;   const int N = 1e6;   vector<long long int> adj[N];   long long int depth[N];   void dfs(long long int n, long long int p) {     for (auto x : adj[n]) {       if (x != p) {         depth[x] = depth[n] + 1;         dfs(x, n);       }     }   }   void solve() {     long long int n, a, b, da, db;     cin >> n >> a >> b >> da >> db;     for (long long int i = 1; i <= n; ++i) {       adj[i].clear();       depth[i] = 0;     }     for (long long int i = 1; i < n; ++i) {       long long int x, y;       cin >> x >> y;       adj[x].push_back(y);       adj[y].push_back(x);     }     long long int maxi = -1, idx = -1;     dfs(1, -1);     for (long long int i = 1; i <= n; ++i) {       if (depth[i] > maxi) {         idx = i;         maxi = depth[i];       }     }     for (long long int i = 1; i <= n; ++i) {       depth[i] = 0;     }     dfs(idx, -1);     for (long long int i = 1; i <= n; ++i) {       if (depth[i] > maxi) {         idx = i;         maxi = depth[i];       }     }     for (long long int i = 1; i <= n; ++i) {       depth[i] = 0;     }     if (2 * da >= min(maxi, db)) {       cout <<  Alice  << endl;       return;     }     dfs(a, -1);     if (da >= depth[b]) {       cout <<  Alice  << endl;     } else {       cout <<  Bob  << endl;     }   }   int main() {     ios_base::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL);     int t = 1;     cin >> t;     while (t--) {       solve();     }   }   