// Problem: D. MEX Tree
// Contest: Codeforces - Codeforces Round #721 (Div. 2)
// URL: https://codeforces.com/contest/1527/problem/D
// Memory Limit: 256 MB
// Time Limit: 1500 ms
// Author: abhidot

#include <bits/stdc++.h>
#define int long long
#define IOS std::ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL);
#define pb push_back
#define mod 1000000007 //998244353
#define lld long double
#define pii pair<int, int>
#define ff first
#define ss second
#define all(x) (x).begin(), (x).end()
#define rep(i,x,y) for(int i=x; i<y; i++)
#define fill(a,b) memset(a, b, sizeof(a))
#define vi vector<int>
#define setbits(x) __builtin_popcountll(x)
#define w(x)  int x; cin>>x; while(x--)
using namespace std;
const long long N=200005, INF=2000000000000000000;

/*------------- Modular exponentiation -------------*/
int power(int a, int b, int p)
    {
        if(a==0)
        return 0;
        int res=1;
        a%=p;
        while(b>0)
        {
            if(b&1)
            res=(res*a)%p;
            b>>=1;
            a=(a*a)%p;
        }
        return res;
    }
	

/*------------- Sieve --------------*/	
vector <int> prime;
bool is_composite[N];

void sieve (int n) {
	fill (is_composite, false);
	for (int i = 2; i < n; ++i) {
		if (!is_composite[i]) prime.push_back (i);
		for (int j = 0; j < prime.size () && i * prime[j] < n; ++j) {
			is_composite[i * prime[j]] = true;
			if (i % prime[j] == 0) break;
		}
	}
}


/*------------ Utitlity function ---------------*/
void print(bool n){
    if(n){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
}

vector<vector<int>> g;
vector<int> sum, tin, tout;

int tim;


void init(int n){
	g.clear();
	g.resize(n);
	
	sum.clear();
	sum.resize(n);
	
	tin.clear();
	tin.resize(n);
	
	tout.clear();
	tout.resize(n);
	
	tim=0;
}

void dfs(int u, int p){
	tin[u] = ++tim;
	sum[u]=1;
	for(auto v:g[u]){
		if(v==p) continue;
		dfs(v, u);
		sum[u]+=sum[v];
	}
	
	tout[u] = ++tim;
}

int anc = -1;
bool is_ancestor(int par, int child){
	return tin[par]<=tin[child]&&tout[par]>=tout[child];
}

int32_t main()
{
    IOS;
    w(T){
    	int n;
    	cin>>n;
    	init(n);
    	for(int i=1;i<n;i++){
    		int u, v;
    		cin>>u>>v;
    		g[u].pb(v);
    		g[v].pb(u);
    	}
    	
    	
    	vector<int> ans(n+1,0);
    	if(n==2){
    		ans[2]=1;
    		for(int i=0;i<=n;i++){
    			cout<<ans[i]<<" ";
    		}
    		cout<<"\n";
    		continue;
    	}
    	dfs(0, -1);
    	int pairs = 1LL*n*(n-1)/2;
    	ans[0] = ans[1] = pairs;
    	for(auto v:g[0]){
    		ans[1]-=(sum[v]-1)*sum[v]/2;
    		if(is_ancestor(v, 1)) anc=v;
    	}
    	int u = 1, v=-1;
    	int sz = n - sum[anc];
    	for(int i=1;i<n;i++){
    		bool ok = is_ancestor(i, u) || (v!=-1&&is_ancestor(i, v));
    		if(!ok){
    			if(is_ancestor(u, i)) u = i;
    			else if((v==-1&&!is_ancestor(anc, i))||(v!=-1&&is_ancestor(v, i))) v = i;
    			else break;
    		}
    		
    		if(v==-1) ans[i+1] = sum[u]*sz;
    		else ans[i+1] = sum[u]*sum[v];
    	}
    	for(int i=0;i<n;i++) ans[i]-=ans[i+1];
    	for(int i=0;i<=n;i++)	cout<<ans[i]<<" \n"[i==n];
    }
}

// Written by abhidot