#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const long long MOD0 = 998244353;
const long long MOD1 = 998244352; // phi(MOD0) = 2^23 * 7 * 17
const long long MOD2 = 402653184; // phi(MOD1) = 3 * 2^27
const long long MOD3 = 67108864; // phi(2^27) = 2^26 (ước của MOD2)
const long long INV2 = (MOD0 + 1) / 2;
int n;
int parent_node[MAXN];
bool has_child[MAXN];
long long k1[MAXN]; // K(u) mod MOD1
long long k2[MAXN]; // K(u) mod MOD2
long long powerMod(long long base, long long exp, long long mod) {
long long res = 1;
base %= mod;
while (exp > 0) {
if (exp & 1) {
res = (res * base) % mod;
}
base = (base * base) % mod;
exp >>= 1;
}
return res;
}
void input() {
cin >> n;
for (int i = 2; i <= n; ++i) {
cin >> parent_node[i];
has_child[parent_node[i]] = true;
}
}
void solve() {
long long ans = 0;
// Duyệt ngược từ N về 2 (đảm bảo mọi đỉnh con đều được tính trước đỉnh cha vì p_i < i)
for (int u = n; u >= 2; --u) {
long long a0, a1, a2;
if (!has_child[u]) {
// u là lá => K(u) = 0 => 3^{K(u)} = 1
a0 = 1;
a1 = 1;
a2 = 1;
} else {
// u không phải lá => K(u) >= 1
a0 = powerMod(3, k1[u], MOD0);
a1 = powerMod(3, k2[u], MOD1);
long long exp2 = (k2[u] - 1 + MOD3) % MOD3 + 1;
a2 = powerMod(3, exp2, MOD2);
}
// Cộng số nhát chém để triệt tiêu các con của u: (3^{K(u)} - 1) / 2
long long cuts_u = (a0 - 1 + MOD0) % MOD0 * INV2 % MOD0;
ans = (ans + cuts_u) % MOD0;
int p = parent_node[u];
if (p == 1) {
// Nếu cha là gốc 1, đóng góp 3^{K(u)} vào K(1) (cũng chính là số nhát chém ở độ sâu 1)
ans = (ans + a0) % MOD0;
} else {
k1[p] = (k1[p] + a1) % MOD1;
k2[p] = (k2[p] + a2) % MOD2;
}
}
cout << ans << "\n";
}
int main() {
ios_base :: sync_with_stdio (false);
cin.tie (0);
cout.tie (0);
input();
solve();
return 0;
}