#include <bits/stdc++.h>
using namespace std;
int to[200010], nxt[200010], last[200010], len = 0;
long long f[200010][2];
void add(int x, int y) {
  to[++len] = y;
  nxt[len] = last[x];
  last[x] = len;
}
long long ksm(long long x, long long y) {
  if (!y) return 1;
  long long l = ksm(x, y / 2);
  if (y % 2) return l * l % 998244353 * x % 998244353;
  return l * l % 998244353;
}
void dfs(int k) {
  long long s = 1, s0 = 1;
  for (int i = last[k]; i; i = nxt[i]) {
    int x = to[i];
    dfs(x);
    s = s * (f[x][0] + f[x][1]) % 998244353;
    s0 = s0 * f[x][0] % 998244353;
  }
  long long s1 = 0;
  for (int i = last[k]; i; i = nxt[i]) {
    int x = to[i];
    s1 = (s1 + s0 * ksm(f[x][0], 998244353 - 2) % 998244353 * f[x][1]) %
         998244353;
  }
  f[k][0] = (s - s1 + 998244353) % 998244353;
  f[k][1] = (s - s0 + 998244353) % 998244353;
  if (!last[k]) f[k][1] = f[k][0] = 1;
}
int main() {
  int n, i, x;
  scanf("%d", &n);
  for (i = 2; i <= n; i++) {
    scanf("%d", &x);
    add(x, i);
  }
  dfs(1);
  printf("%lld\n", f[1][0]);
  return 0;
}
