#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define sqr(x) ((x)*(x)) #define fz1(i,n) for ((i)=1;(i)<=(n);(i)++) #define fd1(i,n) for ((i)=(n);(i)>=1;(i)--) #define fz0g(i,n) for ((i)=0;(i)<=(n);(i)++) #define fd0g(i,n) for ((i)=(n);(i)>=0;(i)--) #define fz0k(i,n) for ((i)=0;(i)<(n);(i)++) #define fd0k(i,n) for ((i)=(long long)((n)-1);(i)>=0;(i)--) #define fz(i,x,y) for ((i)=(x);(i)<=(y);(i)++) #define fd(i,y,x) for ((i)=(y);(i)>=(x);(i)--) #define fzin fz1(i,n) #define fzim fz1(i,m) #define fzjn fz1(j,n) #define fzjm fz1(j,m) #define ff(c,itr) for (__typeof((c).begin()) itr=(c).begin();itr!=(c).end();++itr) #define pb push_back #define mk make_pair #define rdst(st,len){static char ss[len];scanf(" %s",ss);(st)=ss;} #define spln(i,n) (i==n?'\n':' ') #define fac_init(n){fac[0]=fac[1]=inv[1]=fi[0]=fi[1]=1;fz(i,2,n){fac[i]=1ll*fac[i-1]*i%mod;inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;fi[i]=1ll*fi[i-1]*inv[i]%mod;}} using namespace std; const int mod=998244353; int qp(int x,int y){int z=1;while(y){if(y&1)z=1ll*z*x%mod;x=1ll*x*x%mod;y/=2;}return z;} inline void read(int &x) { char c;int f=1; while(!isdigit(c=getchar()))if(c=='-')f=-1; x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15); x*=f; } inline void read(long long &x) { char c;int f=1; while(!isdigit(c=getchar()))if(c=='-')f=-1; x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15); x*=f; } int n,i,j,dis[2005],dis2[2005],pre[2005],ans,c[2005]; vector bi[2005]; void dfs(int x,int fa) { ff(bi[x],it)if(*it!=fa){ dis[*it]=dis[x]+1; pre[*it]=x; dfs(*it,x); } } void dfs1(int x,int fa) { ff(bi[x],it)if(*it!=fa){ dis2[*it]=dis2[x]+1; dfs1(*it,x); } } int c1,c2,sc,sx,sy; void dfs2(int x,int fa) { if(dis2[x]==sc||dis[x]==sc) c2++; ff(bi[x],it)if(*it!=fa){ dfs2(*it,x); } } void solve() { read(n);fz1(i,n)bi[i].clear(); fz1(i,n-1){ int x,y;read(x);read(y); bi[x].push_back(y); bi[y].push_back(x); } sx=0,sy=0,sc=0; fz1(i,n){ dis[i]=0;dfs(i,0); fz1(j,n)if(dis[j]>sc){ sx=i;sy=j;sc=dis[j]; } } ans=0; printf("%d ",sc+1); fz1(i,n){ dis[i]=0;dfs(i,0); fz0g(j,sc)c[j]=0; fz1(j,n)c[dis[j]]++; int tmp=1; fz0g(j,sc)tmp=1ll*tmp*c[j]%mod; ans=(ans+tmp)%mod; } c1=c2=0; if(sc%2==1){ int cx=0,cy=0; dfs(sx,0);fz1(i,n) if(dis[i]==sc) cy++; dfs(sy,0);fz1(i,n) if(dis[i]==sc) cx++; ans=(ans+1ll*(mod-cx)*cy)%mod; } else{ dis[sx]=0;dfs(sx,0);int t=sy;fz1(i,sc/2)t=pre[t]; dis2[sy]=0;dfs1(sy,0); ff(bi[t],it){ c2=0;dfs2(*it,t); ans=(ans+1ll*(mod-c1)*c2)%mod; c1+=c2; } } printf("%d\n",ans); } int main() { int t;read(t); while(t--){ solve(); } return 0; }