// Problem ID - 1527D

#include <vector>
#define debug(...)
#include <bits/stdc++.h>
using namespace std;
void solve();

#define ll long long

const int MAX_N = 200001;
const int MOD = 1000*1000*1000 + 7;
const int INF = 1000*1000*1000;
const ll LINF = 1ll*1000000*1000000*1000000;

int main() {

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int t=1;
	/*is Single Test case?*/cin >> t;
	for (int i = 0; i < t; ++i) {
		solve();
		cout << "\n";
	}

	cerr << "time taken : " << (float)clock()/CLOCKS_PER_SEC << " secs" << "\n";
	return 0;
}



void solve() {

	ll n; cin >> n;

	vector<ll> adj[n+1];
	vector<ll> children(n+1, 0);

	vector<ll> parent(n+1, 0);

	function<void(ll,ll)> dfs;

	dfs = [&] (ll u, ll par){

		children[u] = 1;
		parent[u] = par;

		for (auto v: adj[u]){
			if (v != par){
				dfs(v, u);
				children[u] += children[v];
			}
		}
	};

	for (ll i = 0; i < n-1; ++i){
		ll u, v; cin >> u >> v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}

	dfs(0, -1);

	ll endpt1 = 0, endpt2 = 0;

	vector<ll> covered(n, 0);
	covered[0] = 1;
	vector<ll> ans(n, 0);

	ll note1 = -1;
	ll note = -1;

	ll i = 1;
	for (; i < n; ++i){
		if (covered[i]){
			ans[i] = 0;
			continue;
		}

		ll j = i;

		while (!covered[j]){
			covered[j] = 1;
			if (parent[j] == 0) note = j;
			if (parent[j] == 0 and i == 1) note1 = note;
			debug(j);
			j = parent[j];
		}
		

		debug(endpt1, endpt2, note);		
		if (j != endpt1 and j != endpt2){
			covered[i] = 0;
			break;
		}

		if (endpt1 != 0 and endpt2 != 0){
			if (j == endpt1)
				ans[i] = (children[j] - children[i])*children[endpt2];
			else
				ans[i] = (children[j] - children[i])*children[endpt1];
		}

		else if (endpt1 != 0 or endpt2 != 0){
			if (j != 0){
				ans[i] = (children[j] - children[i])*(n - children[note]); 
			}

			else{
				ll k = endpt1 == 0? endpt2: endpt1;
				ll temp = -1;
				for (auto next: adj[0]){
					if (next != note and covered[next])
						temp = next;
				}

				ans[i] = children[k] * (n - children[i] - children[temp]);
			}
		}

		else {

		}

		j == endpt1? endpt1 = i: endpt2 = i;

	}

	// debug(children);
	for (auto next: adj[0]){
		ans[0] += children[next]*(children[next] - 1) / 2;
	}

	debug(note1);
	ll sum = 0;
	ll temp = children[1];
	children[note1] -= children[1];

	ll sum2 = 0;
	for (auto next: adj[0]){
		sum += children[next];
		sum2 += children[next]*children[next];
	}

	debug(sum, sum2, sum);

	ans[1] = (sum*sum - sum2)/2 + sum;

	children[note1] += temp;

	if (i < n){
		debug(endpt1, endpt2, note);
		if (endpt1 != 0 and endpt2 != 0)
			ans[i] = children[endpt1]*children[endpt2];
		else{
			ll k = endpt1 == 0? endpt2: endpt1;
			debug(k, children[k], children[note]);
			ans[i] = children[k]*(n - children[note]);
		}
	}

	for (auto a: ans){
		cout << a << " ";
	}

	for (auto c: covered){
		if (c == 0){
			cout << 0;
			return;
		}
	}

	cout << 1;


}