func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100005;   const double inf = 1e10;   int n, m, q, Eu[N], Ev[N], all[N], vis[N];   vector<int> V;   map<pair<int, int>, int> F, S;   struct P {     double x, y;   } p[N];   inline P operator+(const P& a, const P& b) { return (P){a.x + b.x, a.y + b.y}; }   inline P operator-(const P& a, const P& b) { return (P){a.x - b.x, a.y - b.y}; }   inline double operator*(const P& a, const P& b) {     return a.x * b.y - b.x * a.y;   }   inline double operator/(const P& b, const P& a) {     return atan2(b.y - a.y, b.x - a.x);   }   inline bool operator<(const P& a, const P& b) {     return a.x != b.x ? a.x < b.x : a.y < b.y;   }   inline double crs(P p, P a, P b) { return (a - p) * (b - p); }   struct E {     int v;     double a;   };   inline bool operator<(const E& a, const E& b) { return a.a < b.a; }   vector<E> G[N];   inline void add(int u, int v) {     G[u].push_back((E){v, p[v] / p[u]});     F[make_pair(u, v)] = 0;   }   int dfs(int x, int p) {     vis[x] = 1;     int s = 1;     for (int i = 0; i < G[x].size(); i++) {       int y = G[x][i].v;       if (!vis[y]) s += dfs(y, x);     }     if (p) {       F[make_pair(p, x)] += s;       F[make_pair(x, p)] -= s;     }     return s;   }   inline int calc(int a, int b, int c) {     return ((p[b] / p[a]) < (p[c] / p[a]) ? 0 : all[a]) + S[make_pair(a, c)] -            S[make_pair(a, b)] - F[make_pair(a, c)];   }   int main() {     scanf( %d%d , &n, &m);     int T = n + 1;     p[T] = (P){-inf, 0};     for (int i = 1; i <= m; i++) scanf( %d%d , &Eu[i], &Ev[i]);     for (int i = 1; i <= n; i++) scanf( %lf%lf , &p[i].x, &p[i].y);     for (int i = 1; i <= m; i++) add(Eu[i], Ev[i]), add(Ev[i], Eu[i]);     int x = 1;     for (int i = 2; i <= n; i++)       if (p[i] < p[x]) x = i;     add(T, x);     add(x, T);     dfs(T, 0);     for (int i = 1; i <= n + 1; i++) sort(G[i].begin(), G[i].end());     for (int i = 1; i <= n + 1; i++) {       int x = i;       S[make_pair(i, i)] = 0;       for (int j = 0; j < G[i].size(); j++) {         int y = G[i][j].v;         all[i] += F[make_pair(i, y)];         S[make_pair(i, y)] = S[make_pair(i, x)] + F[make_pair(i, y)];         x = y;       }     }     scanf( %d , &q);     while (q--) {       int k;       scanf( %d , &k);       V.clear();       for (int i = 1, x; i <= k; i++) scanf( %d , &x), V.push_back(x);       int ans = 0, cc = V.size();       double s = 0;       p[0] = (P){0, 0};       for (int i = 0; i < cc; i++)         s += crs(p[0], p[V[i ? i - 1 : cc - 1]], p[V[i]]);       if (s > 0) reverse(V.begin(), V.end());       for (int i = 0; i < cc; i++)         ans += calc(V[i], V[i ? i - 1 : cc - 1], V[(i + 1) % cc]);       printf( %d n , ans + cc);     }     return 0;   }   