#include <bits/stdc++.h>
using namespace std;

const int maxn = 4e5 + 233;
int f[maxn][21];
vector<int> G[maxn];
int n, T;
typedef long long ll;
int sz[maxn];
int d[maxn];

void dfs(int u, int fa){
    sz[u] = 1;
    f[u][0] = fa;
    d[u] = d[fa] + 1;
    for (int i = 1; i <= 20; i += 1){
        f[u][i] = f[f[u][i - 1]][i - 1];
    }
    for(auto v : G[u]){
        if(v == fa) continue;
        dfs(v, u);
        sz[u] += sz[v];
    }
}

int lca(int x, int y){
    if(d[x] > d[y]) swap(x, y);
    for(int i = 20; i >= 0; i -= 1){
        if(d[f[y][i]] >= d[x]) y = f[y][i];
    }
    if(x == y) return x;
    for(int i = 20; i >= 0; i -= 1){
        if(f[x][i] != f[y][i]) x = f[x][i], y = f[y][i];
    }
    return f[x][0];
}

int get(int x, int y){
    if(d[x] > d[y]) swap(x, y);
    for(int i = 20; i >= 0; i -= 1){
        if(d[f[y][i]] > d[x]) y = f[y][i]; 
    }
    return y;
}

bool ispar(int x, int y){
    int lc = lca(x, y);
    if(lc == x || lc == y) return true;
    return false;
}

ll cal(int x, int y){
    if(d[x] > d[y]) swap(x, y);
    if(ispar(x, y)) {
        return 1ll * (n - sz[get(x, y)]) * sz[y];
    }
    return 1ll * sz[x] * sz[y];
}

ll res[maxn];

int main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> T;
    while(T--){
        cin >> n;
        for (int i = 1; i <= n; i += 1){
            G[i].clear();
            res[i] = 0;
        }
        for (int i = 1; i < n; i += 1){
            int u, v;
            cin >> u >> v;
            u += 1;
            v += 1;
            G[u].emplace_back(v);
            G[v].emplace_back(u);
        }
        dfs(1, 0);
        int p[2] = {1, 2};
        {
            ll tmp = 1;
            for(auto u : G[1]){
                res[1] += tmp * sz[u];
                tmp += sz[u];
            }
        }
        
        res[2] += cal(p[0], p[1]);
        res[1] -= cal(p[0], p[1]);

        for(int i = 3; i <= n; i += 1){
            if(d[p[0]] < d[p[1]]) swap(p[0], p[1]);
            if(ispar(i, p[0]) && ispar(i, p[1])){
                if(d[p[0]] < d[i]) p[0] = i;
            }
            else if(ispar(i, p[0])){
                if(d[p[0]] < d[i]) p[0] = i;
            }
            else if(ispar(i, p[1]) && (!ispar(p[0], p[1]) || lca(i, p[0]) == p[1])){
                if(d[p[1]] < d[i]) p[1] = i;
            }
            else{
                break;
            }
            res[i] += cal(p[0], p[1]);
            res[i - 1] -= cal(p[0], p[1]);
        }
        res[0] = 1ll * n * (n - 1) / 2;
        for(int i = 1; i <= n; i += 1){
            res[0] -= res[i];
        }
        for (int i = 0; i <= n; i += 1){
            cout << res[i] << " \n"[i == n];
        }
    }
    return 0;
}