#include <bits/stdc++.h>
using namespace std;
struct vect {
  int x, y, w, f;
  vect() {}
  vect(int x, int y, int f)
      : x(x), y(y), w(x < 0 || (!x && y < 0) ? 0 : 1), f(f) {}
  bool operator<(vect const &T) const {
    if (w != T.w) return w < T.w;
    return x * 1LL * T.y > y * 1LL * T.x;
  };
};
int n, m, x, y, ed, t, cnt, len, ret;
int l[100005], px[100005], py[100005], deg[100005], vis[100005], cyc[100005],
    des[100005];
int qd[200005], qn[200005], flow[200005];
int *sum[100005];
int MLC2[200005];
vect MLC1[200005], buf[100005];
vect *adj[100005];
long long area;
void bd(int x, int y) { qd[++ed] = y, qn[ed] = l[x], l[x] = ed; }
void dfs(int x) {
  vis[x] = 1;
  des[x] = 0;
  for (int i = (l[x]); i; i = qn[i]) {
    if (vis[qd[i]]) continue;
    dfs(qd[i]);
    flow[i] = des[qd[i]] + 1;
    flow[i ^ 1] = -flow[i];
    des[x] += flow[i];
  }
}
int locate(int x, int y) {
  return lower_bound(adj[x], adj[x] + deg[x],
                     vect(px[y] - px[x], py[y] - py[x], 0)) -
         adj[x];
}
int main() {
  scanf("%d%d", &n, &m);
  ed = 1;
  for (int i = (0); i < (m); i++) {
    scanf("%d%d", &x, &y);
    x--, y--;
    bd(x, y), bd(y, x);
  }
  for (int i = (0); i < (n); i++) scanf("%d%d", &px[i], &py[i]);
  t = 0;
  for (int i = (0); i < (n); i++) {
    if (px[i] < px[t]) t = i;
  }
  dfs(t);
  cnt = 0;
  for (int i = (0); i < (n); i++) {
    t = 0;
    for (int j = (l[i]); j; j = qn[j])
      buf[t++] = vect(px[qd[j]] - px[i], py[qd[j]] - py[i], flow[j]);
    sort(buf, buf + t);
    deg[i] = t;
    adj[i] = &MLC1[cnt];
    sum[i] = &MLC2[cnt];
    cnt += t;
    for (int j = (0); j < (t); j++) {
      adj[i][j] = buf[j];
      sum[i][j] = buf[j].f;
      if (j) sum[i][j] += sum[i][j - 1];
    }
  }
  scanf("%d", &m);
  while (m--) {
    scanf("%d", &len);
    for (int i = (0); i < (len); i++) scanf("%d", &cyc[i]), cyc[i]--;
    cyc[len] = cyc[0];
    area = 0;
    for (int i = (0); i < (len); i++)
      area +=
          px[cyc[i]] * 1LL * py[cyc[i + 1]] - px[cyc[i + 1]] * 1LL * py[cyc[i]];
    if (area < 0) reverse(cyc, cyc + len), cyc[len] = cyc[0];
    ret = len;
    for (int i = (0); i < (len); i++) {
      t = cyc[i];
      x = locate(t, cyc[(i + len - 1) % len]);
      y = locate(t, cyc[i + 1]);
      if (x >= y)
        ret += sum[t][x - 1] - sum[t][y];
      else
        ret += sum[t][deg[t] - 1] - sum[t][y] + (x ? sum[t][x - 1] : 0);
    }
    printf("%d\n", ret);
  }
  return 0;
}
