func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 1e-10;   int n, m, Q, a[300006][2], fa[300006], dep[300006], siz[300006], b[300006], D;   bool vis[300006];   map<int, int> mp[300006];   vector<int> v[300006], s[300006];   const double pi = acos(-1.0);   void df5(int te, int la) {     vis[te] = 1;     siz[te] = 1;     for (int i = 0; i < v[te].size(); i++) {       int j = v[te][i];       if (j == la) continue;       if (vis[j]) continue;       dep[j] = dep[te] + 1;       fa[j] = te;       df5(j, te);       siz[te] += siz[j];     }   }   inline double getde(int x, int y) {     double ret = atan2(1.0 * a[y][1] - a[x][1], 1.0 * a[y][0] - a[x][0]);     if (ret < 0) ret += 2.0 * pi;     return ret;   }   inline bool cmp(int x, int y) { return getde(D, x) < getde(D, y); }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= m; i++) {       int x, y;       scanf( %d%d , &x, &y);       v[x].push_back(y), v[y].push_back(x);     }     for (int i = 1; i <= n; i++) scanf( %d%d , &a[i][0], &a[i][1]);     df5(1, 1);     for (int i = 1; i <= n; i++) {       D = i;       sort(v[i].begin(), v[i].end(), cmp);       for (int j = 0; j < v[i].size(); j++) mp[i][v[i][j]] = j;       if (!v[i].empty()) {         if (v[i][0] == fa[i])           s[i].push_back(-siz[i]);         else if (fa[v[i][0]] == i)           s[i].push_back(siz[v[i][0]]);         else           s[i].push_back(0);       }       for (int j = 1; j < v[i].size(); j++) {         int x = v[i][j], la = s[i][j - 1];         if (x == fa[i])           s[i].push_back(la - siz[i]);         else if (fa[x] == i)           s[i].push_back(la + siz[x]);         else           s[i].push_back(la);       }     }     scanf( %d , &Q);     while (Q--) {       int k;       scanf( %d , &k);       bool hv1 = false;       for (int i = 1; i <= k; i++) scanf( %d , &b[i]);       for (int i = 1; i <= k; i++)         if (b[i] == 1) {           hv1 = true;           break;         }       long long sum = 0;       bool flag = false;       for (int i = 1; i <= k; i++) {         int ii = i % k + 1;         sum += (1ll * (a[b[i]][0] - a[b[ii]][0]) * a[b[i]][1] -                 1ll * a[b[i]][0] * (a[b[i]][1] - a[b[ii]][1]));       }       if (sum > 0) flag = true;       long long ans = 0;       if (!flag) {         for (int i = 2, j = k; i < j; i++, j--) swap(b[i], b[j]);       }       for (int i = 1; i <= k; i++) {         int la = i - 1;         if (!la) la = k;         int nx = i % k + 1;         int ts1 = mp[b[i]][b[la]], ts2 = mp[b[i]][b[nx]],             tt = ((int)v[b[i]].size()) - 1;         if (ts1 >= ts2) {           if (ts1) ans += s[b[i]][ts1];           if (ts2) ans -= s[b[i]][ts2 - 1];         } else {           ans += s[b[i]][ts1];           if (ts2) ans += s[b[i]][tt] - s[b[i]][ts2 - 1];         }       }       ans += k;       if (ans <= 0) ans += n;       printf( %lld n , ans);     }   }   