func_code_string: #include <bits/stdc++.h>   using namespace std;   unsigned long long min(unsigned long long x, unsigned long long y) {     if (x < y) return x;     return y;   }   unsigned long long max(unsigned long long x, unsigned long long y) {     if (x < y) return y;     return x;   }   long long min(long long x, long long y) {     if (x < y) return x;     return y;   }   long long max(long long x, long long y) {     if (x < y) return y;     return x;   }   double min(double x, double y) {     if (x < y) return x;     return y;   }   double max(double x, double y) {     if (x < y) return y;     return x;   }   unsigned long long gcd(unsigned long long x, unsigned long long y) {     if (!x) return y;     if (!y) return x;     if (x > y) swap(x, y);     return gcd(x, y % x);   }   unsigned long long inv(unsigned long long a, unsigned long long c) {     if (a == 1) {       return 1;     }     return ((c - (c / a)) * inv(c % a, c)) % c;   }   void printv(vector<int> &a) {     int n = a.size();     for (int i = 0; i < n; ++i) {       cout << a[i] <<    ;     }     cout <<   END n ;   }   pair<int, int> dfs(int u, int pre, vector<int> adj[]) {     vector<int> d;     int maxd = 0, diameter = 0;     for (int i = 0; i < adj[u].size(); ++i) {       int v = adj[u][i];       if (v != pre) {         pair<int, int> cur = dfs(v, u, adj);         diameter = max(diameter, cur.first);         maxd = max(maxd, cur.second);         d.push_back(cur.second);       }     }     sort(d.begin(), d.end());     maxd++;     if (d.size() > 1) {       int m = d.size();       diameter = max(diameter, d[m - 1] + 1 + d[m - 2]);     } else {       diameter = max(diameter, maxd);     }     return make_pair(diameter, maxd);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     int t;     cin >> t;     while (t--) {       int n, a, b, da, db;       cin >> n >> a >> b >> da >> db;       a--;       b--;       vector<int> adj[n];       for (int i = 0; i < n - 1; ++i) {         int u, v;         cin >> u >> v;         u--;         v--;         adj[u].push_back(v);         adj[v].push_back(u);       }       vector<int> dist(n, INT_MAX);       queue<int> q;       q.push(a);       dist[a] = 0;       while (!q.empty()) {         int u = q.front();         q.pop();         for (int i = 0; i < adj[u].size(); ++i) {           int v = adj[u][i];           if (dist[v] == INT_MAX) {             dist[v] = dist[u] + 1;             q.push(v);           }         }       }       pair<int, int> pp = dfs(0, -1, adj);       int longest_path = pp.first;       if ((dist[b] > da) && (db > 2 * da) && (longest_path > 2 * da + 1)) {         cout <<  Bob n ;       } else {         cout <<  Alice n ;       }     }     return 0;   }   