func_code_string: #include <bits/stdc++.h>   using namespace std;   inline long long max3(long long a, long long b, long long c) {     return (a) > (b) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c));   }   inline long long min3(long long a, long long b, long long c) {     return (a) < (b) ? ((a) < (c) ? (a) : (c)) : ((b) < (c) ? (b) : (c));   }   long long extgcd(long long a, long long b, long long &x, long long &y) {     if (b == 0) {       x = 1;       y = 0;       return a;     }     long long d = extgcd(b, a % b, y, x);     y -= a / b * x;     return d;   }   inline long long mod(long long a, long long m) { return (a % m + m) % m; }   long long modinv(long long a) {     long long x, y;     extgcd(a, 1000000007, x, y);     return mod(x, 1000000007);   }   long long gcd(long long u, long long v) {     long long r;     while (0 != v) {       r = u % v;       u = v;       v = r;     }     return u;   }   long long lcm(long long u, long long v) { return u / gcd(u, v) * v; }   void get_all_factors(int a[], long long int n) {     long long int w = sqrt(n);     for (int i = 1; i <= w; i++) {       if (n % i == 0) {         a[i]++;         a[n / i]++;       }     }     long long int x = ceil(sqrt(n));     if (sqrt(n) == ceil(sqrt(n))) a[(int)sqrt(n)]--;   }   long long int memo[100000][110] = {0};   long long C(long long n, long long r) {     if (r == 0 || r == n) return 1;     if (memo[n][r] != -1) return memo[n][r];     return memo[n][r] =                (C(n - 1, r - 1) % 1000000007 + C(n - 1, r) % 1000000007) %                1000000007;   }   int valid(string s, int i) {     if (s ==  lol  or i == -1000050000) {       return 0;     }     return 1;   }   void status(string s1 =  lol , long long int i1 = -1000050000,               string s2 =  lol , long long int i2 = -1000050000,               string s3 =  lol , long long int i3 = -1000050000) {     if (1) {       if (valid(s1, i1)) {         cout << s1 <<  =  << i1 <<     ;       }       if (valid(s2, i2)) {         cout << s2 <<  =  << i2 <<     ;       }       if (valid(s3, i3)) {         cout << s3 <<  =  << i3 <<     ;       }       cout << endl;     }   }   long long int poww(long long b, long long e) {     if (e == 0)       return 1;     else if (e % 2 == 0) {       long long a = pow(b, e / 2);       return a * a;     } else {       long long a = pow(b, e / 2);       return b * a * a;     }   }   long long int powm(long long x, long long y, long long m = 1000000007) {     x = x % m;     long long res = 1;     while (y) {       if (y & 1) res = res * x;       res %= m;       y = y >> 1;       x = x * x;       x %= m;     }     return res;   }   vector<pair<int, int> > range(1000000);   vector<int> adj[1000000];   vector<int> d(1000000, 0);   int p[1000000] = {0};   int T = 0;   void dfs(int v, int pa = -1, int dep = 0) {     p[v] = pa;     d[v] = dep;     range[v].first = T;     T++;     for (auto i : adj[v]) {       if (i != pa) {         dfs(i, v, dep + 1);       }     }     range[v].second = T;     T++;   }   int main() {     int n, m;     cin >> n >> m;     for (int i = 0; i < n - 1; i++) {       int u, v;       cin >> u >> v;       adj[u].push_back(v);       adj[v].push_back(u);     }     dfs(1);     while (m--) {       int k;       cin >> k;       int a[k];       for (int i = 0; i < k; i++) {         cin >> a[i];       }       int it = a[0];       for (auto i : a) {         if (d[i] > d[it]) {           it = i;         }       }       for (auto &i : a) {         if (it == i) {           continue;         }         if (p[i] != -1) {           i = p[i];         }       }       int ok = 1;       for (auto i : a) {         if (range[i].first <= range[it].first and             range[i].second >= range[it].second) {         } else {           ok = 0;           break;         }       }       if (ok) {         cout <<  YES  << endl;       } else {         cout <<  NO  << endl;       }     }   }   