from collections import defaultdict def bfs(src, adj_list): dist = {src: 0} q = [src] while q: u = q.pop(0) for v in adj_list[u]: if v not in dist: dist[v] = dist[u] + 1 q.append(v) return dist def solve_case(w, e, c, w_cons, e_cons, options, case_num): # create adjacency list for western and eastern stations w_adj_list = defaultdict(list) e_adj_list = defaultdict(list) for i in range(w-1): w_adj_list[i+1].append(w_cons[i]) w_adj_list[w_cons[i]].append(i+1) for i in range(e-1): e_adj_list[i+1].append(e_cons[i]) e_adj_list[e_cons[i]].append(i+1) # find shortest distances between all western and eastern stations w_dists = {} for i in range(1, w+1): w_dists[i] = bfs(i, w_adj_list) e_dists = {} for i in range(1, e+1): e_dists[i] = bfs(i, e_adj_list) # calculate average distance for each option res = [] for i in range(c): w_opt, e_opt = options[i] avg_dist = 0 # add up shortest distances for all pairs of stations for u in range(1, w+1): for v in range(1, e+1): dist = min(w_dists[u][w_opt] + e_dists[v][e_opt] + 1, w_dists[u][e_opt] + e_dists[v][w_opt] + 1) avg_dist += dist # calculate average distance and add to results avg_dist /= w * e res.append(avg_dist) # format and print results print("Case #{}: {}".format(case_num, " ".join("{:.6f}".format(d) for d in res))) # read input and solve test cases t = int(input()) for i in range(1, t+1): w, e, c = map(int, input().split()) w_cons = list(map(int, input().split())) e_cons = list(map(int, input().split())) options = [tuple(map(int, input().split())) for j in range(c)] solve_case(w, e, c, w_cons, e_cons, options, i)