from collections import deque def bfs(graph, start, end): queue = deque() queue.append((start, 0)) visited = set() while queue: curr_station, distance = queue.popleft() if curr_station == end: return distance if curr_station in visited: continue visited.add(curr_station) for neighbor in graph[curr_station]: queue.append((neighbor, distance+1)) return -1 def calculate_avg_distance(graph, n, distances): total_distance = 0 total_pairs = 0 for i in range(1, n+1): for j in range(i+1, n+1): if (i, j) in distances: distance = distances[(i, j)] elif (j, i) in distances: distance = distances[(j, i)] else: distance = bfs(graph, i, j) distances[(i, j)] = distance total_distance += distance total_pairs += 1 return total_distance / total_pairs def main(): t = int(input()) for case in range(1, t+1): w, e, c = map(int, input().split()) west_connections = list(map(int, input().split())) east_connections = list(map(int, input().split())) connections = [tuple(map(int, input().split())) for _ in range(c)] graph = {i: set() for i in range(1, w+e+1)} for i in range(w-1): graph[i+1].add(west_connections[i]) graph[west_connections[i]].add(i+1) for i in range(e-1): graph[i+w+1].add(east_connections[i]+w) graph[east_connections[i]+w].add(i+w+1) distances = {} avg_distances = [] for u, v in connections: graph[u].add(v+w) graph[v+w].add(u) distance = calculate_avg_distance(graph, w+e, distances) avg_distances.append(distance) graph[u].remove(v+w) graph[v+w].remove(u) print(f"Case #{case}: {' '.join(f'{x:.7f}' for x in avg_distances)}") if __name__ == "__main__": main()