def solve_case(west, east, overpasses, existing_west, existing_east, overpass_values): # Build the graph with existing connections graph = [[] for _ in range(west + east - 2)] for i in range(west - 1): u, v = i, existing_west[i] - 1 graph[u].append((v, 1)) graph[v].append((u, 1)) for j in range(east - 1): u, v = j + west - 1, existing_east[j] - 1 graph[u].append((v, 1)) graph[v].append((u, 1)) # Calculate the shortest paths without overpasses dist = floyd_warshall(graph) total_dist = sum(sum(row) for row in dist) / (west + east - 2) / (west + east - 3) * 2 # Add each overpass and calculate the new average distance result = [] for i in range(overpasses): u, v = overpass_values[i] u -= 1 v += west - 2 graph[u].append((v, 1)) graph[v].append((u, 1)) dist = floyd_warshall(graph) new_dist = sum(sum(row) for row in dist) / (west + east - 2) / (west + east - 3) * 2 result.append(new_dist) # Remove the overpass to restore the original graph graph[u].pop() graph[v].pop() return result t = int(input()) for case in range(1, t+1): west, east, overpasses = map(int, input().split()) existing_west = list(map(int, input().split())) existing_east = list(map(int, input().split())) overpass_values = [list(map(int, input().split())) for _ in range(overpasses)] result = solve_case(west, east, overpasses, existing_west, existing_east, overpass_values) print(f"Case #{case}: {' '.join(f'{x:.6f}' for x in result)}")