#include<bits/stdc++.h>
#define maxn 2010
#define mod 1000000007
using namespace std;
struct edge{
	int r,nxt;
}e[maxn<<1];
int head[maxn],esz,fac[maxn],dp[maxn][maxn][3],n;
void addedge(int u,int v){
	e[++esz].r=v;e[esz].nxt=head[u];head[u]=esz;
}
int dfs(int u){
	dp[u][0][0]=1;
	int sz=1,s;
	for(int t=head[u],v;t;t=e[t].nxt){
		s=dfs(v=e[t].r);
		for(int i=sz-1;i>=0;--i)
			for(int j=s-1;j>=0;--j){
				int A=(1ll*dp[v][j][0]+dp[v][j][1]+dp[v][j][2])%mod;
				dp[u][i+j+1][1]=(dp[u][i+j+1][1]+1ll*dp[u][i][0]*(2ll*dp[v][j][0]+dp[v][j][1]))%mod;
				dp[u][i+j+1][2]=(dp[u][i+j+1][2]+1ll*dp[u][i][1]*(dp[v][j][0]+1ll*dp[v][j][1]*(mod+1)/2%mod))%mod;
				if(j==0){
					dp[u][i][0]=1ll*dp[u][i][0]*A%mod;
					dp[u][i][1]=1ll*dp[u][i][1]*A%mod;
					dp[u][i][2]=1ll*dp[u][i][2]*A%mod;
				} else {
					dp[u][i+j][0]=(dp[u][i+j][0]+1ll*dp[u][i][0]*A)%mod;
					dp[u][i+j][1]=(dp[u][i+j][1]+1ll*dp[u][i][1]*A)%mod;
					dp[u][i+j][2]=(dp[u][i+j][2]+1ll*dp[u][i][2]*A)%mod;
				}
			}
			
		sz+=s;
	}
	return sz;
}
int main(){
	scanf("%d",&n),fac[0]=1;
	for(int i=1;i<=n;++i)
		fac[i]=1ll*fac[i-1]*i%mod;
	for(int i=2,x;i<=n;++i) 
		scanf("%d",&x),addedge(x,i);
	dfs(1);
	int ans=0;
	for(int i=0;i<n;++i)
		ans=(ans+1ll*(i&1?-1:1)*fac[n-i]*(1ll*dp[1][i][0]+dp[1][i][1]+dp[1][i][2])%mod+mod)%mod;
	printf("%d",ans);
} 