from collections import defaultdict def calculate_distances(graph, nodes): distances = defaultdict(lambda: float('inf')) for node in nodes: visited = set() stack = [(node, 0)] while stack: current, distance = stack.pop() if current in visited: continue visited.add(current) distances[(node, current)] = distance for neighbor in graph[current]: if neighbor not in visited: stack.append((neighbor, distance+1)) return distances def calculate_average_distance(graph, nodes, distances): total_distance = 0 count = 0 for i, node1 in enumerate(nodes): for node2 in nodes[i+1:]: path_distance = distances[(node1, node2)] total_distance += path_distance count += 1 return total_distance / count def solve_case(case_num, w, e, c, western_connections, eastern_connections, overpass_options): western_graph = defaultdict(list) for i in range(w-1): western_graph[i+1].append(western_connections[i]) western_graph[western_connections[i]].append(i+1) eastern_graph = defaultdict(list) for i in range(e-1): eastern_graph[i+1].append(eastern_connections[i]) eastern_graph[eastern_connections[i]].append(i+1) western_nodes = set(range(1, w+1)) eastern_nodes = set(range(1, e+1)) all_nodes = western_nodes.union(eastern_nodes) initial_distances = calculate_distances(western_graph, western_nodes) initial_distances.update(calculate_distances(eastern_graph, eastern_nodes)) results = [] for a, b in overpass_options: graph = defaultdict(list, western_graph) graph[a].append(b) graph[b].append(a) nodes = all_nodes distances = defaultdict(lambda: float('inf'), initial_distances) distances.update(calculate_distances(graph, nodes)) avg_distance = calculate_average_distance(graph, nodes, distances) results.append(avg_distance) result_str = ' '.join(f'{x:.6f}' for x in results) print(f'Case #{case_num}: {result_str}') t = int(input()) for case_num in range(1, t+1): w, e, c = map(int, input().split()) western_connections = list(map(int, input().split())) eastern_connections = list(map(int, input().split())) overpass_options = [tuple(map(int, input().split())) for _ in range(c)] solve_case(case_num, w, e, c, western_connections, eastern_connections, overpass_options)