func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using pll = pair<ll, ll>;   using pii = pair<int, int>;   struct Node {     vector<ll> con;     ll h1, h2;   } g[100010];   ll dfs(ll n, ll p) {     g[n].h1 = g[n].h2 = 0;     for (auto &i : g[n].con) {       if (i == p) continue;       ll k = dfs(i, n) + 1;       if (k >= g[n].h1) {         g[n].h2 = g[n].h1;         g[n].h1 = k;       } else if (k >= g[n].h2) {         g[n].h2 = k;       }     }     return g[n].h1;   }   ll dist(ll n, ll p, ll t) {     if (n == t) return 0;     ll ans = (ll)(1e17);     for (auto &i : g[n].con) {       if (i == p) continue;       ans = min(ans, dist(i, n, t) + 1);     }     return ans;   }   int32_t main() {     ios::sync_with_stdio(false);     cin.tie(0);     ll N;     cin >> N;     while (N--) {       ll n, a, b, da, db;       cin >> n >> a >> b >> da >> db;       for (ll i = 0; i <= n - 1; i++) g[i].con.clear();       a--;       b--;       ll s, t;       for (ll i = 0; i <= n - 2; i++) {         cin >> s >> t;         s--;         t--;         g[s].con.emplace_back(t);         g[t].con.emplace_back(s);       }       dfs(0, 0);       ll height = 0;       for (ll i = 0; i <= n - 1; i++) height = max(height, g[i].h1 + g[i].h2);       ll dis = dist(a, a, b);       if (da * 2 < db && da * 2 < height && dis > da)         cout <<  Bob n ;       else         cout <<  Alice n ;     }     return 0;   }   