#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ii pair<int,int>
#define all(x) x.begin(),x.end()
#define fo(i, a, b) for (int i=(a),_b=(int)(b);i<=_b;++i)
#define fd(i, a, b) for (int i=(a),_b=(int)(b);i>=_b;--i)
#define umax(a, b) a=max(a, b)
#define umin(a, b) a=min(a, b)
#define ve vector
#define vi ve<int>
#define vl ve<ll>
#define vvi ve<vi>
#define ar array
#define fi first
#define se second
const int N = 1e6+5, mod = 998244353;
template <const int32_t MOD>
struct modint {
int32_t value;
modint() = default;
modint(int32_t value_) : value(value_) {}
inline modint<MOD> operator + (modint<MOD> other) const { int32_t c = this->value + other.value; return modint<MOD>(c >= MOD ? c - MOD : c); }
inline modint<MOD> operator - (modint<MOD> other) const { int32_t c = this->value - other.value; return modint<MOD>(c < 0 ? c + MOD : c); }
inline modint<MOD> operator * (modint<MOD> other) const { int32_t c = (int64_t)this->value * other.value % MOD; return modint<MOD>(c < 0 ? c + MOD : c); }
inline modint<MOD> & operator += (modint<MOD> other) { this->value += other.value; if (this->value >= MOD) this->value -= MOD; return *this; }
inline modint<MOD> & operator -= (modint<MOD> other) { this->value -= other.value; if (this->value < 0) this->value += MOD; return *this; }
inline modint<MOD> & operator *= (modint<MOD> other) { this->value = (int64_t)this->value * other.value % MOD; if (this->value < 0) this->value += MOD; return *this; }
inline modint<MOD> operator - () const { return modint<MOD>(this->value ? MOD - this->value : 0); }
modint<MOD> pow(uint64_t k) const { modint<MOD> x = *this, y = 1; for (; k; k >>= 1) { if (k & 1) y *= x; x *= x; } return y; }
modint<MOD> inv() const { return pow(MOD - 2); } // MOD must be a prime
inline modint<MOD> operator / (modint<MOD> other) const { return *this * other.inv(); }
inline modint<MOD> operator /= (modint<MOD> other) { return *this *= other.inv(); }
inline bool operator == (modint<MOD> other) const { return value == other.value; }
inline bool operator != (modint<MOD> other) const { return value != other.value; }
inline bool operator < (modint<MOD> other) const { return value < other.value; }
inline bool operator > (modint<MOD> other) const { return value > other.value; }
};
template <int32_t MOD> modint<MOD> operator * (int64_t value, modint<MOD> n) { return modint<MOD>(value) * n; }
template <int32_t MOD> modint<MOD> operator * (int32_t value, modint<MOD> n) { return modint<MOD>(value % MOD) * n; }
template <int32_t MOD> istream & operator >> (istream & in, modint<MOD> &n) { return in >> n.value; }
template <int32_t MOD> ostream & operator << (ostream & out, modint<MOD> n) { return out << n.value; }
using mint = modint<mod>;
int n, h[N], fa[N];
ve<int> g[N];
mint dp[N], dp1[N];
bool vis[N];
void sol(int tc) {
cin >> n;
fo(i,1,n) g[i].clear(), dp[i] = dp1[i] = vis[i] = 0;
fo(i,2,n) {
int p; cin >> p;
fa[i] = p;
g[i].pb(p), g[p].pb(i);
}
queue<int> q; q.push(1); vis[1] = 0;
while (q.size()) {
int u = q.front(); q.pop();
for (int v : g[u]) if (!vis[v]) {
q.push(v);
vis[v] = 1;
h[v] = h[u] + 1;
}
if (u == 1) continue;
else if (fa[u] == 1) {
dp[u] = 1;
} else {
dp[u] = dp1[h[u]-1] - dp[fa[u]];
}
dp1[h[u]] += dp[u];
}
mint ans = 1;
fo(i,1,n) ans += dp[i];
cout << ans << '\n';
}
signed main() {
cin.tie(0) -> sync_with_stdio(0);
if (fopen("A.inp", "r")) freopen("A.inp", "r", stdin);
int tc = 1; cin >> tc;
fo(i,1,tc) sol(i);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCkseC5lbmQoKQojZGVmaW5lIGZvKGksIGEsIGIpIGZvciAoaW50IGk9KGEpLF9iPShpbnQpKGIpO2k8PV9iOysraSkKI2RlZmluZSBmZChpLCBhLCBiKSBmb3IgKGludCBpPShhKSxfYj0oaW50KShiKTtpPj1fYjstLWkpCiNkZWZpbmUgdW1heChhLCBiKSBhPW1heChhLCBiKQojZGVmaW5lIHVtaW4oYSwgYikgYT1taW4oYSwgYikKI2RlZmluZSB2ZSB2ZWN0b3IKI2RlZmluZSB2aSB2ZTxpbnQ+CiNkZWZpbmUgdmwgdmU8bGw+CiNkZWZpbmUgdnZpIHZlPHZpPgojZGVmaW5lIGFyIGFycmF5CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKY29uc3QgaW50IE4gPSAxZTYrNSwgbW9kID0gOTk4MjQ0MzUzOwoKdGVtcGxhdGUgPGNvbnN0IGludDMyX3QgTU9EPgpzdHJ1Y3QgbW9kaW50IHsKICBpbnQzMl90IHZhbHVlOwogIG1vZGludCgpID0gZGVmYXVsdDsKICBtb2RpbnQoaW50MzJfdCB2YWx1ZV8pIDogdmFsdWUodmFsdWVfKSB7fQogIGlubGluZSBtb2RpbnQ8TU9EPiBvcGVyYXRvciArIChtb2RpbnQ8TU9EPiBvdGhlcikgY29uc3QgeyBpbnQzMl90IGMgPSB0aGlzLT52YWx1ZSArIG90aGVyLnZhbHVlOyByZXR1cm4gbW9kaW50PE1PRD4oYyA+PSBNT0QgPyBjIC0gTU9EIDogYyk7IH0KICBpbmxpbmUgbW9kaW50PE1PRD4gb3BlcmF0b3IgLSAobW9kaW50PE1PRD4gb3RoZXIpIGNvbnN0IHsgaW50MzJfdCBjID0gdGhpcy0+dmFsdWUgLSBvdGhlci52YWx1ZTsgcmV0dXJuIG1vZGludDxNT0Q+KGMgPCAgICAwID8gYyArIE1PRCA6IGMpOyB9CiAgaW5saW5lIG1vZGludDxNT0Q+IG9wZXJhdG9yICogKG1vZGludDxNT0Q+IG90aGVyKSBjb25zdCB7IGludDMyX3QgYyA9IChpbnQ2NF90KXRoaXMtPnZhbHVlICogb3RoZXIudmFsdWUgJSBNT0Q7IHJldHVybiBtb2RpbnQ8TU9EPihjIDwgMCA/IGMgKyBNT0QgOiBjKTsgfQogIGlubGluZSBtb2RpbnQ8TU9EPiAmIG9wZXJhdG9yICs9IChtb2RpbnQ8TU9EPiBvdGhlcikgeyB0aGlzLT52YWx1ZSArPSBvdGhlci52YWx1ZTsgaWYgKHRoaXMtPnZhbHVlID49IE1PRCkgdGhpcy0+dmFsdWUgLT0gTU9EOyByZXR1cm4gKnRoaXM7IH0KICBpbmxpbmUgbW9kaW50PE1PRD4gJiBvcGVyYXRvciAtPSAobW9kaW50PE1PRD4gb3RoZXIpIHsgdGhpcy0+dmFsdWUgLT0gb3RoZXIudmFsdWU7IGlmICh0aGlzLT52YWx1ZSA8ICAgIDApIHRoaXMtPnZhbHVlICs9IE1PRDsgcmV0dXJuICp0aGlzOyB9CiAgaW5saW5lIG1vZGludDxNT0Q+ICYgb3BlcmF0b3IgKj0gKG1vZGludDxNT0Q+IG90aGVyKSB7IHRoaXMtPnZhbHVlID0gKGludDY0X3QpdGhpcy0+dmFsdWUgKiBvdGhlci52YWx1ZSAlIE1PRDsgaWYgKHRoaXMtPnZhbHVlIDwgMCkgdGhpcy0+dmFsdWUgKz0gTU9EOyByZXR1cm4gKnRoaXM7IH0KICBpbmxpbmUgbW9kaW50PE1PRD4gb3BlcmF0b3IgLSAoKSBjb25zdCB7IHJldHVybiBtb2RpbnQ8TU9EPih0aGlzLT52YWx1ZSA/IE1PRCAtIHRoaXMtPnZhbHVlIDogMCk7IH0KICBtb2RpbnQ8TU9EPiBwb3codWludDY0X3QgaykgY29uc3QgeyBtb2RpbnQ8TU9EPiB4ID0gKnRoaXMsIHkgPSAxOyBmb3IgKDsgazsgayA+Pj0gMSkgeyBpZiAoayAmIDEpIHkgKj0geDsgeCAqPSB4OyB9IHJldHVybiB5OyB9CiAgbW9kaW50PE1PRD4gaW52KCkgY29uc3QgeyByZXR1cm4gcG93KE1PRCAtIDIpOyB9ICAvLyBNT0QgbXVzdCBiZSBhIHByaW1lCiAgaW5saW5lIG1vZGludDxNT0Q+IG9wZXJhdG9yIC8gIChtb2RpbnQ8TU9EPiBvdGhlcikgY29uc3QgeyByZXR1cm4gKnRoaXMgKiAgb3RoZXIuaW52KCk7IH0KICBpbmxpbmUgbW9kaW50PE1PRD4gb3BlcmF0b3IgLz0gKG1vZGludDxNT0Q+IG90aGVyKSAgICAgICB7IHJldHVybiAqdGhpcyAqPSBvdGhlci5pbnYoKTsgfQogIGlubGluZSBib29sIG9wZXJhdG9yID09IChtb2RpbnQ8TU9EPiBvdGhlcikgY29uc3QgeyByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7IH0KICBpbmxpbmUgYm9vbCBvcGVyYXRvciAhPSAobW9kaW50PE1PRD4gb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHZhbHVlICE9IG90aGVyLnZhbHVlOyB9CiAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPCAobW9kaW50PE1PRD4gb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHZhbHVlIDwgb3RoZXIudmFsdWU7IH0KICBpbmxpbmUgYm9vbCBvcGVyYXRvciA+IChtb2RpbnQ8TU9EPiBvdGhlcikgY29uc3QgeyByZXR1cm4gdmFsdWUgPiBvdGhlci52YWx1ZTsgfQp9Owp0ZW1wbGF0ZSA8aW50MzJfdCBNT0Q+IG1vZGludDxNT0Q+IG9wZXJhdG9yICogKGludDY0X3QgdmFsdWUsIG1vZGludDxNT0Q+IG4pIHsgcmV0dXJuIG1vZGludDxNT0Q+KHZhbHVlKSAqIG47IH0KdGVtcGxhdGUgPGludDMyX3QgTU9EPiBtb2RpbnQ8TU9EPiBvcGVyYXRvciAqIChpbnQzMl90IHZhbHVlLCBtb2RpbnQ8TU9EPiBuKSB7IHJldHVybiBtb2RpbnQ8TU9EPih2YWx1ZSAlIE1PRCkgKiBuOyB9CnRlbXBsYXRlIDxpbnQzMl90IE1PRD4gaXN0cmVhbSAmIG9wZXJhdG9yID4+IChpc3RyZWFtICYgaW4sIG1vZGludDxNT0Q+ICZuKSB7IHJldHVybiBpbiA+PiBuLnZhbHVlOyB9CnRlbXBsYXRlIDxpbnQzMl90IE1PRD4gb3N0cmVhbSAmIG9wZXJhdG9yIDw8IChvc3RyZWFtICYgb3V0LCBtb2RpbnQ8TU9EPiBuKSB7IHJldHVybiBvdXQgPDwgbi52YWx1ZTsgfQoKdXNpbmcgbWludCA9IG1vZGludDxtb2Q+OwoKaW50IG4sIGhbTl0sIGZhW05dOwp2ZTxpbnQ+IGdbTl07Cm1pbnQgZHBbTl0sIGRwMVtOXTsKYm9vbCB2aXNbTl07Cgp2b2lkIHNvbChpbnQgdGMpIHsKICAgIGNpbiA+PiBuOwogICAgZm8oaSwxLG4pIGdbaV0uY2xlYXIoKSwgZHBbaV0gPSBkcDFbaV0gPSB2aXNbaV0gPSAwOwogICAgZm8oaSwyLG4pIHsKICAgICAgICBpbnQgcDsgY2luID4+IHA7CiAgICAgICAgZmFbaV0gPSBwOwogICAgICAgIGdbaV0ucGIocCksIGdbcF0ucGIoaSk7CiAgICB9CiAgICBxdWV1ZTxpbnQ+IHE7IHEucHVzaCgxKTsgdmlzWzFdID0gMDsKICAgIHdoaWxlIChxLnNpemUoKSkgewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgIGZvciAoaW50IHYgOiBnW3VdKSBpZiAoIXZpc1t2XSkgewogICAgICAgICAgICBxLnB1c2godik7CiAgICAgICAgICAgIHZpc1t2XSA9IDE7CiAgICAgICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICB9CiAgICAgICAgaWYgKHUgPT0gMSkgY29udGludWU7CiAgICAgICAgZWxzZSBpZiAoZmFbdV0gPT0gMSkgewogICAgICAgICAgICBkcFt1XSA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZHBbdV0gPSBkcDFbaFt1XS0xXSAtIGRwW2ZhW3VdXTsKICAgICAgICB9CiAgICAgICAgZHAxW2hbdV1dICs9IGRwW3VdOwogICAgfQogICAgbWludCBhbnMgPSAxOwogICAgZm8oaSwxLG4pIGFucyArPSBkcFtpXTsKICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgY2luLnRpZSgwKSAtPiBzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBpZiAoZm9wZW4oIkEuaW5wIiwgInIiKSkgZnJlb3BlbigiQS5pbnAiLCAiciIsIHN0ZGluKTsKICAgIGludCB0YyA9IDE7IGNpbiA+PiB0YzsKICAgIGZvKGksMSx0Yykgc29sKGkpOwp9Cg==