import sys from sys import stdin sys.setrecursionlimit(1 << 25) MOD = 998244353 def main(): n = int(stdin.readline()) edges = [[] for _ in range(n + 1)] stored_edges = [] for _ in range(n - 1): u, v = map(int, stdin.readline().split()) edges[u].append(v) edges[v].append(u) stored_edges.append((u, v)) # Compute parents and sizes using DFS post-order traversal parents = [0] * (n + 1) sizes = [1] * (n + 1) visited = [False] * (n + 1) stack = [(1, False)] parents[1] = -1 # Root has no parent while stack: node, processed = stack.pop() if processed: for neighbor in edges[node]: if parents[neighbor] == node: sizes[node] += sizes[neighbor] continue if visited[node]: continue visited[node] = True stack.append((node, True)) for neighbor in edges[node]: if not visited[neighbor] and neighbor != parents[node]: parents[neighbor] = node stack.append((neighbor, False)) sum_num_numerator = 0 for u, v in stored_edges: if parents[v] == u: s = sizes[v] elif parents[u] == v: s = sizes[u] else: assert False, "Edge not in parent-child relationship" term = s * (s - 1) + (n - s) * (n - s - 1) sum_num_numerator += term sum_num = sum_num_numerator // 2 # Compute denominator mod MOD: (n*(n-1)^2) / 2 if n == 0 or n == 1: den_mod = 0 else: n_mod = n % MOD n_minus_1_mod = (n - 1) % MOD inv2 = (MOD + 1) // 2 # Modular inverse of 2 denominator = (n_mod * pow(n_minus_1_mod, 2, MOD)) % MOD denominator = (denominator * inv2) % MOD inv_den = pow(denominator, MOD - 2, MOD) if denominator != 0 else 0 result = (sum_num % MOD) * inv_den % MOD print(result) if __name__ == "__main__": main()