#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 = 2 ; i <= n; i++) {
int p ; cin >> p ;
adj[p].push_back(i);
}
// 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];
}
ll res = 0;
for (int d = 0; d <= maxd; d++) {
res += dp[d];
}
// does thsi realyl wewor kw
cout << res << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKY29uc3QgaW50IE1BWE4gPSAzMDAwMDA7Cgp2ZWN0b3I8aW50PiBhZGpbTUFYTisxXTsKdmVjdG9yPGludD4gZGVwdGhzW01BWE4rMV07CmludCBtYXhkOwoKdm9pZCBkZnMoaW50IHUsIGludCBwLCBpbnQgZCkgewogICAgLy8gcmVjb3JkIG5vZGUgdSBhdCBkZXB0aCBkCiAgICBkZXB0aHNbZF0ucHVzaF9iYWNrKHUpOwogICAgbWF4ZCA9IG1heChtYXhkLCBkKTsKICAgIC8vIHJlY3Vyc2Ugb24gY2hpbGRyZW4KICAgIGZvciAoaW50IHYgOiBhZGpbdV0pIHsKICAgICAgICBpZiAodiA9PSBwKSBjb250aW51ZTsKICAgICAgICBkZnModiwgdSwgZCsxKTsKICAgIH0KfQoKCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBUOwogICAgY2luID4+IFQ7CiAgICB3aGlsZSAoVC0tKSB7CiAgICAgICAgaW50IG47CiAgICAgICAgY2luID4+IG47CiAgICAgICAgLy8gY2xlYXIgYWRqYWNlbmN5ICYgZGVwdGhzCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGFkaltpXS5jbGVhcigpOwogICAgICAgICAgICBkZXB0aHNbaV0uY2xlYXIoKTsKICAgICAgICB9CiAgICAgICAgbWF4ZCA9IDA7CgogICAgICAgIC8vIHJlYWQgdGhlIHRyZWUKICAgICAgICBmb3IgKGludCBpID0gMiA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGludCBwIDsgY2luID4+IHAgOwogICAgICAgICAgICBhZGpbcF0ucHVzaF9iYWNrKGkpOyAKICAgICAgICB9CgogICAgICAgIC8vIGJ1Y2tldCBub2RlcyBieSBkZXB0aCBzdGFydGluZyBmcm9tIG5vZGUgMQogICAgICAgIGRmcygxLCAwLCAwKTsKCiAgICAgICAgLy8gZHBbZF0gPSBudW1iZXIgb2Ygd2F5cyB0byBjaG9vc2Ugb25lIG5vZGUgaW4gZWFjaCBkZXB0aCDiiaQgZAogICAgICAgIHZlY3RvcjxsbD4gZHAobWF4ZCsxKTsKICAgICAgICBkcFswXSA9IDE7CiAgICAgICAgZm9yIChpbnQgZCA9IDE7IGQgPD0gbWF4ZDsgZCsrKSB7CiAgICAgICAgICAgIGxsIGNudCA9IGRlcHRoc1tkXS5zaXplKCk7CiAgICAgICAgICAgIGRwW2RdID0gY250ICogZHBbZC0xXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgbGwgcmVzID0gMDsKICAgICAgICBmb3IgKGludCBkID0gMDsgZCA8PSBtYXhkOyBkKyspIHsKICAgICAgICAgICAgcmVzICs9IGRwW2RdOwogICAgICAgIH0KICAgICAgICAvLyBkb2VzIHRoc2kgcmVhbHlsIHdld29yIGt3CiAgICAgICAgY291dCA8PCByZXMgPDwgIlxuIjsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==