#include<bits/stdc++.h> template <typename Tp> inlinevoidread(Tp& x){ x = 0; bool fg = 0; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') fg ^= 1; ch = getchar();} while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (Tp)(ch ^ 48), ch = getchar(); if (fg) x = -x; } template <typename Tp, typename... Args> voidread(Tp& t, Args& ...args){ read(t); read(args...); } usingnamespace std; typedeflonglong ll; constint N = 500010; constint mod = 998244353; int head[N], pnt[N << 1], nxt[N << 1], E; int n, deg[N], cnt, rt1, rt2, len; int dep1[N], dep2[N]; ll f[N]; ll fpow(ll a, ll b = mod - 2, ll p = mod){ ll r = 1; for ( ; b; b >>= 1, a = a * a % mod) if (b & 1) r = (r * a) % mod; return r; }
voidadde(int u, int v){ ++E; pnt[E] = v; nxt[E] = head[u]; head[u] = E; }
voiddfs(int u, int f, int d, int *ds){ ds[u] = d; for (int i = head[u]; i; i = nxt[i]) { int v = pnt[i]; if (v == f) continue; dfs(v, u, d + 1, ds); } } int Count, tot; voidDFS(int u, int f, int d){ if (d == len / 2) ++Count; for (int i = head[u]; i; i = nxt[i]) { int v = pnt[i]; if (v == f) continue; DFS(v, u, d + 1); } } intmain(){ read(n); for (int i = 1; i < n; ++i) { int u, v; read(u, v); adde(u, v); adde(v, u); ++deg[u], ++deg[v]; } for (int i = 1; i <= n; ++i) if (deg[i] == 1) ++cnt; dfs(1, 0, 0, dep1); for (int i = 1; i <= n; ++i) if (dep1[i] > dep1[rt1]) rt1 = i; dfs(rt1, 0, 0, dep1); for (int i = 1; i <= n; ++i) if (dep1[i] > dep1[rt2]) rt2 = i; dfs(rt2, 0, 0, dep2); len = dep1[rt2]; vector<int> A; if (len % 2 == 0) { for (int i = 1; i <= n; ++i) { if (dep1[i] == dep2[i] && dep1[i] == len / 2) rt1 = i; } for (int i = head[rt1]; i; i = nxt[i]) { Count = 0; DFS(pnt[i], rt1, 1); if (Count != 0) tot += Count, A.push_back(Count); } } else { for (int i = 1; i <= E; i += 2) { int u = pnt[i], v = pnt[i + 1]; if (min(dep1[u], dep2[u]) == len / 2 && min(dep1[v], dep2[v]) == len / 2) rt1 = u, rt2 = v; } Count = 0; DFS(rt1, rt2, 0); if (Count) A.push_back(Count), tot += Count; Count = 0; DFS(rt2, rt1, 0); if (Count) A.push_back(Count), tot += Count; } for (int i = 1; i <= cnt; ++i) f[i] = (f[i - 1] + cnt * fpow(i)) % mod; ll ans = 0; for (int i = 0; i < (int)A.size(); ++i) { ans = (ans + f[tot - A[i]]) % mod; } ans = (ans - f[tot] * (A.size() - 1) % mod + mod) % mod; cout << ans << endl; return0; }