func_code_string: #include <bits/stdc++.h>   using namespace std;   const int c = 200002;   int n, m, maxi, pos = c, cnt, id[c], szint[c], kezd;   vector<int> sz[c];   bool v[c], v2[c], jo[c];   void dfs2(int a) {     v2[a] = true;     bool s = jo[a];     for (int x : sz[a]) {       if (!v2[x]) {         dfs2(x);         if (jo[x]) {           s = 1;         }       }     }     jo[a] = s;     cnt += jo[a] * 2;   }   void dfs(int a) {     if (!jo[a]) {       return;     }     v[a] = true;     int x1 = a, x2 = a;     for (int x : sz[a]) {       if (!v[x]) {         szint[x] = szint[a] + 1;         dfs(x);         int aa = szint[x1], bb = szint[x2], cc = szint[id[x]];         if (cc > bb || (cc == bb && id[x] < x2)) {           x2 = id[x];           if (cc > aa || (cc == aa && id[x] < x1)) {             swap(x1, x2);           }         }       }     }     id[a] = x1;     int s = szint[x1] + szint[x2] - 2 * szint[a];     if (s > maxi || (s == maxi && min(x1, x2) < pos)) {       maxi = s;       pos = min(x1, x2);     }   }   int main() {     ios_base::sync_with_stdio(false);     cin >> n >> m;     for (int i = 1; i < n; i++) {       int a, b;       cin >> a >> b;       sz[a].push_back(b), sz[b].push_back(a);     }     for (int i = 1; i <= m; i++) {       int x;       cin >> x;       kezd = x;       jo[x] = 1;     }     dfs2(kezd), cnt -= 2;     szint[kezd] = 1, dfs(kezd);     cout << pos <<   n  << cnt - maxi <<   n ;     return 0;   }   