#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 300000;
vector<int> adj[MAXN+1];
vector<int> depths[MAXN+1];
int maxd;
void dfs(int u, int p, int d) {
// record node u at depth d
depths[d].push_back(u);
maxd = max(maxd, d);
// recurse on children
for (int v : adj[u]) {
if (v == p) continue;
dfs(v, u, d+1);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
// clear adjacency & depths
for (int i = 1; i <= n; i++) {
adj[i].clear();
depths[i].clear();
}
maxd = 0;
// read the tree
for (int i = 0; i < n-1; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
// bucket nodes by depth starting from node 1
dfs(1, 0, 0);
// dp[d] = number of ways to choose one node in each depth ≤ d
vector<ll> dp(maxd+1);
dp[0] = 1;
for (int d = 1; d <= maxd; d++) {
ll cnt = depths[d].size();
dp[d] = cnt * dp[d-1];
}
// sum up dp[0] + dp[1] + ... + dp[maxd]
ll res = 0;
for (int d = 0; d <= maxd; d++) {
res += dp[d];
}
cout << res << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKY29uc3QgaW50IE1BWE4gPSAzMDAwMDA7Cgp2ZWN0b3I8aW50PiBhZGpbTUFYTisxXTsKdmVjdG9yPGludD4gZGVwdGhzW01BWE4rMV07CmludCBtYXhkOwoKdm9pZCBkZnMoaW50IHUsIGludCBwLCBpbnQgZCkgewogICAgLy8gcmVjb3JkIG5vZGUgdSBhdCBkZXB0aCBkCiAgICBkZXB0aHNbZF0ucHVzaF9iYWNrKHUpOwogICAgbWF4ZCA9IG1heChtYXhkLCBkKTsKICAgIC8vIHJlY3Vyc2Ugb24gY2hpbGRyZW4KICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZTsKICAgICAgICBkZnModiwgdSwgZCsxKTsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICAvLyBjbGVhciBhZGphY2VuY3kgJiBkZXB0aHMKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgYWRqW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIGRlcHRoc1tpXS5jbGVhcigpOwogICAgICAgIH0KICAgICAgICBtYXhkID0gMDsKCiAgICAgICAgLy8gcmVhZCB0aGUgdHJlZQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspIHsKICAgICAgICAgICAgaW50IGEsIGI7CiAgICAgICAgICAgIGNpbiA+PiBhID4+IGI7CiAgICAgICAgICAgIGFkalthXS5wdXNoX2JhY2soYik7CiAgICAgICAgICAgIGFkaltiXS5wdXNoX2JhY2soYSk7CiAgICAgICAgfQoKICAgICAgICAvLyBidWNrZXQgbm9kZXMgYnkgZGVwdGggc3RhcnRpbmcgZnJvbSBub2RlIDEKICAgICAgICBkZnMoMSwgMCwgMCk7CgogICAgICAgIC8vIGRwW2RdID0gbnVtYmVyIG9mIHdheXMgdG8gY2hvb3NlIG9uZSBub2RlIGluIGVhY2ggZGVwdGgg4omkIGQKICAgICAgICB2ZWN0b3I8bGw+IGRwKG1heGQrMSk7CiAgICAgICAgZHBbMF0gPSAxOwogICAgICAgIGZvciAoaW50IGQgPSAxOyBkIDw9IG1heGQ7IGQrKykgewogICAgICAgICAgICBsbCBjbnQgPSBkZXB0aHNbZF0uc2l6ZSgpOwogICAgICAgICAgICBkcFtkXSA9IGNudCAqIGRwW2QtMV07CiAgICAgICAgfQoKICAgICAgICAvLyBzdW0gdXAgZHBbMF0gKyBkcFsxXSArIC4uLiArIGRwW21heGRdCiAgICAgICAgbGwgcmVzID0gMDsKICAgICAgICBmb3IgKGludCBkID0gMDsgZCA8PSBtYXhkOyBkKyspIHsKICAgICAgICAgICAgcmVzICs9IGRwW2RdOwogICAgICAgIH0KCiAgICAgICAgY291dCA8PCByZXMgPDwgIlxuIjsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==