import sys input = sys.stdin.readline T=int(input()) for tests in range(T): W,E,C=map(int,input().split()) X=list(map(int,input().split())) Y=list(map(int,input().split())) Q=[list(map(int,input().split())) for i in range(C)] ANS=[] for a,b in Q: EDGE=[[] for i in range(W+E)] for i in range(W-1): EDGE[i].append(X[i]-1) EDGE[X[i]-1].append(i) for i in range(E-1): EDGE[i+W].append(Y[i]-1+W) EDGE[Y[i]-1+W].append(i+W) EDGE[a-1].append(b-1+W) EDGE[b-1+W].append(a-1) #print(EDGE) ROOT=0 N=W+E QUE=[ROOT] Parent=[-1]*N Parent[ROOT]=N # ROOTの親を定めておく. Child=[[] for i in range(N)] TOP_SORT=[] # トポロジカルソート while QUE: # トポロジカルソートと同時に親を見つける x=QUE.pop() TOP_SORT.append(x) for to in EDGE[x]: if Parent[to]==-1: Parent[to]=x Child[x].append(to) QUE.append(to) Children=[1]*N for x in TOP_SORT[::-1]: #(自分を含む)子ノードの数を調べる if x==ROOT: break Children[Parent[x]]+=Children[x] #print(Children) score=0 for x in TOP_SORT[::-1]: #(自分を含む)子ノードの数を調べる if x==ROOT: break p=Parent[x] score+=Children[x]*(N-Children[x]) #print(N,score) ANS.append(score/(N*(N-1)//2)) ANS=" ".join(map(str,ANS)) print("Case #"+str(tests+1)+": "+str(ANS))