#include <bits/stdc++.h>
#define pb push_back
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
const int maxn=50001;
typedef long long LL;

int n;
vector<int> sd[maxn];
LL fu[maxn],fd[maxn];  //fup, fdown   //fu[1],fd[1]不合法
int fa[maxn][17],dep[maxn]; LL sup[maxn][17],sdn[maxn][17];
void init() {
	FOR (i,1,n) sd[i].clear();
}
void dfs1(int u,int fa) {
	fu[u]=1;
	for (int &v:sd[u]) if (v!=fa) {  //可以在这里把fa这条边给删了...
		dfs1(v,u);
		fu[u]+=fu[v]+1;
	}
}
void dfs2(int u,int fa,LL d) {
	fd[u]=d;
	LL sum=1;
	if (fa!=-1) sum+=d+1;
	for (int &v:sd[u]) if (v!=fa)
		sum+=fu[v]+1;
	for (int &v:sd[u]) if (v!=fa)
		dfs2(v,u,sum-(fu[v]+1));
}
void bfs() {
	queue<int> q; q.push(1);
	fa[1][0]=0; dep[1]=0;
	while (q.size()) {
		int u=q.front(); q.pop();
		for (int &v:sd[u]) if (v!=fa[u][0]) {
			fa[v][0]=u; dep[v]=dep[u]+1; sup[v][0]=fu[v]; sdn[v][0]=fd[v];
			for (int i=1;i<=16;i++) {
				fa[v][i]=fa[fa[v][i-1]][i-1];
				sup[v][i]=sup[v][i-1]+sup[fa[v][i-1]][i-1];
				sdn[v][i]=sdn[v][i-1]+sdn[fa[v][i-1]][i-1];
			}
			q.push(v);
		}
	}
}
LL gotolca(int x,int y,LL (*fx)[17],LL (*fy)[17]) {  //不太熟悉
	if (dep[x]<dep[y]) swap(x,y),swap(fx,fy);
	LL ret=0;
	for (int i=16;~i;i--)
		if (1<<i<=dep[x]-dep[y]) ret+=fx[x][i],x=fa[x][i];
	if (x==y) return ret;
	for (int i=16;~i;i--)
		if (fa[x][i]!=fa[y][i]) {
			ret+=fx[x][i],x=fa[x][i];
			ret+=fy[y][i],y=fa[y][i];
		}
	return ret+fx[x][0]+fy[y][0];
}
int main() {
	int T; scanf("%d",&T);
	for (;T--;) {
		scanf("%d",&n);
		init();
		for (int i=1,u,v;i<n;i++) {
			scanf("%d%d",&u,&v); u++,v++;
			sd[u].pb(v); sd[v].pb(u);
		}
		dfs1(1,-1);
		dfs2(1,-1,0);
		bfs();

		int q; scanf("%d",&q);
		for (int z=1,p,prev,v;z<=q;z++) {
			scanf("%d%d",&p,&prev); prev++;
			LL ans=0;
			for (int i=1;i<=p;i++,prev=v) {
				scanf("%d",&v); v++;
				ans+=gotolca(prev,v,sup,sdn);
			}
			printf("%lld.0000\n",ans);
		}
		if (T) puts("");
	}
    return 0;
}

