← Home
#include<bits/stdc++.h>
#ifdef ONLINE_JUDGE
	#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
	char buf[1<<21],*p1=buf,*p2=buf;
#endif
using namespace std;typedef double db;int read(){int num=0,f=1;char c;while(!isdigit(c=getchar()))if(c=='-')f=-1;while(isdigit(c))num=num*10+(c&15),c=getchar();return num*f;}void write(int x,char ch=' '){int F[20],cnt=0;if(!x)putchar('0');if(x<0)putchar('-'),x=-x;while(x)F[cnt++]=x%10+'0',x/=10;while(cnt)putchar(F[--cnt]);putchar(ch);}
namespace Main
{
    const int N=100010;int n,m,rt,T,b[N],fa[N],sz[N],x,y,z,xx,yy,zz;vector<int>e[N],c[N],s[N];long long sum,ans;unordered_map<int,int>p[N];db A[N];struct pt{int x,y;}a[N];bool operator<(pt x,pt y){return x.x!=y.x?x.x<y.x:x.y<y.y;}
    void dfs0(int x){sz[x]=1;for(int y:e[x])if(!sz[y])fa[y]=x,dfs0(y),sz[x]+=sz[y];}bool cmp(int x,int y){return A[x]<A[y];}
    void main()
    {
        n=read(),m=read();for(int i=1;i<=m;++i)x=read(),y=read(),e[x].emplace_back(y),e[y].emplace_back(x);for(int i=1;i<=n;++i)a[i].x=read(),a[i].y=read(),rt=(!rt||a[i]<a[rt]?i:rt);
        dfs0(rt),T=read();for(int x=1;x<=n;++x){s[x].resize((m=(int)e[x].size())+1),c[x]=e[x];for(int y:e[x])A[y]=atan2(a[y].y-a[x].y,a[y].x-a[x].x);sort(c[x].begin(),c[x].end(),cmp);
        for(int i=0;i<m;++i)y=c[x][i],s[x][i+1]=s[x][i]+(fa[y]==x?sz[y]:(fa[x]==y?-sz[x]:0)),p[x][y]=i;}for(;T--;){ans=m=read(),sum=0;for(int i=1;i<=m;++i)b[i]=read();
        b[m+1]=b[1],b[0]=b[m];for(int i=1;i<=m;++i)sum+=1ll*a[b[i]].x*a[b[i+1]].y-1ll*a[b[i+1]].x*a[b[i]].y;if(sum<0)reverse(b,b+m+2);for(int i=1;i<=m;++i)x=b[i],xx=p[x][b[i+1]],yy=p[x][b[i-1]],ans+=(xx<=yy?s[x][yy+1]-s[x][xx]:s[x].back()-(s[x][xx]-s[x][yy+1]));write(ans,'\n');}
    }
}
int main()
{
    const bool base=0,IO=1;int T;if(!base)T=1;else if(IO)T=read();else ios::sync_with_stdio(0),cin>>T;for(;T--;)Main::main();
    return 0;
}