#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,n) for(int i=0;i<n;i++)
const int MN=2005;int md=1e9+7;int n,sz[MN],p[MN];vector<int>g[MN];int d[MN][MN][2];int f[MN];int a[MN][3],x[MN][3];
signed main(){f[0]=1;
for(int i=1;i<MN;i++)f[i]=f[i-1]*i%md;
cin>>n;for(int i=2;i<=n;i++){cin>>p[i];g[p[i]].push_back(i);}
for(int i=n;i;i--){memset(a,0,sizeof(a));a[0][0]=1;for(auto &j:g[i]){memset(x,0,sizeof(x)); 
rep(k,sz[j]+1)rep(l,sz[i]+1)rep(m,3){
x[k+l][m]+=d[j][k][0]*a[l][m]%md;
if(m<2) x[k+l+1][m+1]+=d[j][k][1]*a[l][m]%md;}
sz[i]+=sz[j];  
rep(j,sz[i]+1)rep(k,3){a[j][k]=x[j][k]%md;}}
rep(j,sz[i]+1){
d[i][j][0]=a[j][0]+a[j][1]*2+a[j][2]*2;
d[i][j][1]=a[j][0]+a[j][1];d[i][j][0]%=md;d[i][j][1]%=md;}
sz[i]++;}
int ret=0;rep(i,n+1){int cur=d[1][i][0]*f[n-i]%md;if(i & 1) cur=md-cur;ret+=cur;}
cout<<ret%md<<endl;}