#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL int sz[5005]; mint dp[5005][5005];; void dfs(int cv,vector> &E){ sz[cv] = 1; rep(i,E[cv].size()){ int to = E[cv][i]; dfs(to,E); sz[cv] += sz[to]; } vector tdp(2); tdp[1]= 1; rep(i,E[cv].size()){ int to = E[cv][i]; vector ndp(tdp.size() + sz[to]); rep(j,tdp.size()){ rep(k,sz[to]+1){ ndp[j+k] += tdp[j] * dp[to][k]; } } swap(tdp,ndp); } mint sum = 0; for(int i=tdp.size()-1;i>=0;i--){ sum += tdp[i]; dp[cv][i] = sum; } } int main(){ int n; cin>>n; vector> E(n); rep(i,n-1){ int p; cin>>p; E[p-1].push_back(i+1); } dfs(0,E); mint ans = 0; rep(i,5005)ans += dp[0][i]; cout<