← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}

	children := make([][]int, n+1)
	for i := 2; i <= n; i++ {
		var p int
		fmt.Fscan(in, &p)
		children[p] = append(children[p], i)
	}

	const MOD int64 = 998244353

	dp := make([][2]int64, n+1)
	pref := make([]int64, n+1)
	suff := make([]int64, n+1)

	for i := n; i >= 1; i-- {
		k := len(children[i])
		if k == 0 {
			dp[i][0] = 1
			dp[i][1] = 1
		} else {
			var P int64 = 1
			for j := 0; j < k; j++ {
				v := children[i][j]
				sum := (dp[v][0] + dp[v][1]) % MOD
				P = (P * sum) % MOD
			}

			for j := 0; j < k; j++ {
				v := children[i][j]
				if j == 0 {
					pref[j] = dp[v][0]
				} else {
					pref[j] = (pref[j-1] * dp[v][0]) % MOD
				}
			}

			for j := k - 1; j >= 0; j-- {
				v := children[i][j]
				if j == k-1 {
					suff[j] = dp[v][0]
				} else {
					suff[j] = (suff[j+1] * dp[v][0]) % MOD
				}
			}

			var S int64 = 0
			for j := 0; j < k; j++ {
				v := children[i][j]
				prod := dp[v][1]
				if j > 0 {
					prod = (prod * pref[j-1]) % MOD
				}
				if j < k-1 {
					prod = (prod * suff[j+1]) % MOD
				}
				S = (S + prod) % MOD
			}

			var Z int64 = 1
			if k > 0 {
				Z = pref[k-1]
			}

			dp[i][0] = (P - S + MOD) % MOD
			dp[i][1] = (P - Z + MOD) % MOD
		}
	}

	fmt.Println(dp[1][0])
}