#include #define broken cerr << "running on " << __FUNCTION__ <<" "<< __LINE__ << endl #define x first #define y second #define mp make_pair #define sz(a) int((a).size()) #define par pair #define poly vector #define i64 long long #define u64 unsigned long long using namespace std; const int N = 1e5 + 10, P = 998244353; int n, cnt[N], mxd = 0, sze = 0; vector g[N]; void dfs1(int u, int fa, int dep) { if(dep > mxd) { sze = 1, mxd = dep; } else if(dep == mxd) { sze++; } for(int &v : g[u]) { if(v == fa) continue; dfs1(v, u, dep + 1); } return; } void dfs2(int u, int fa, int dep) { cnt[dep]++; for(int &v : g[u]) { if(v == fa) continue; dfs2(v, u, dep + 1); } return; } void solve() { cin >> n; for(int i = 1; i <= n; i++) g[i].clear(); for(int i = 2, u, v; i <= n; i++) { cin >> u >> v; g[u].push_back(v), g[v].push_back(u); } mxd = sze = 0; for(int u = 1; u <= n; u++) { dfs1(u, 0, 0); } int ans = 0; for(int u = 1; u <= n; u++) { for(int i = 0; i <= mxd; i++) cnt[i] = 0; dfs2(u, 0, 0); int prod = 1; for(int i = 0; i <= mxd; i++) prod = 1ll * prod * cnt[i] % P; ans = (ans + prod) % P; } ans = (ans - sze / 2 + P) % P; cout << mxd + 1 <<" " << ans << endl; return ; } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int T; cin >> T; while(T--) solve(); return 0; }