#include #include using namespace std; int main(){ using mint=atcoder::modint998244353; int n; cin>>n; vector p(n); p[0]=-1; vector> g(n); for (int i=1;i>p[i],p[i]--; g[p[i]].push_back(i); } vector> dp(n,vector(2)); vector sz(n); auto dfs=[&](auto dfs,int v)-> void { sz[v]=1; dp[v][0]=0; dp[v][1]=1; for (int u:g[v]){ dfs(dfs,u); vector next(sz[v]+sz[u]+1); for (int i=0;i<=sz[v];i++) for (int j=0;j<=sz[u];j++) next[i+j]+=dp[v][i]*dp[u][j]; swap(dp[v],next); sz[v]+=sz[u]; } for (int i=sz[v];i>=1;i--) dp[v][i-1]+=dp[v][i]; }; dfs(dfs,0); mint ans=0; for (int i=0;i<=n;i++) ans+=dp[0][i]; cout<