#include<bits/stdc++.h>
const int N = 2005;
const int mod = 1e9 + 7;
using namespace std;

vector <int> G[N];
int n, dp[N][N][3], g[N][3], c[N], ans;

void add(int&a, int b){
    a += b; if (a >= mod) a -= mod; if (a < 0) a += mod;
}

void dfs(int u){
    c[u] = 0;
    dp[u][0][0] = 1;
    for (auto v : G[u]){
        dfs(v);
        for (int i = 0; i <= c[u]+c[v]+1; i++) g[i][0] = g[i][1] = g[i][2] = 0;
        for (int i = 0; i <= c[u]; i++) for (int j = 0; j <= c[v]; j++){
            add(g[i+j][0], 1LL * dp[u][i][0] * dp[v][j][0] % mod);
            add(g[i+j][1], 1LL * dp[u][i][1] * dp[v][j][0] % mod);
            add(g[i+j+1][1], 1LL * dp[u][i][0] * dp[v][j][1] % mod);
            add(g[i+j][2], 1LL * dp[u][i][2] * dp[v][j][0] % mod);
            add(g[i+j+1][2], 1LL * dp[u][i][1] * dp[v][j][1] % mod);
        }
        for (int i = 0; i <= c[u]+c[v]+1; i++) dp[u][i][0] = g[i][0], dp[u][i][1] = g[i][1], dp[u][i][2] = g[i][2];
        c[u] += c[v] + 1;
    }
    for (int i = 0; i <= c[u]; i++){
        int a = dp[u][i][0], b = dp[u][i][1], c = dp[u][i][2];
        dp[u][i][0] = a; add(dp[u][i][0], 2LL * b % mod); add(dp[u][i][0], 2LL * c % mod);
        dp[u][i][1] = a; add(dp[u][i][1], b);
    }
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> n;
    for (int i = 2; i <= n; i++){
        int x; cin >> x;
        G[x].push_back(i);
    }
    dfs(1); int f = 1;
    for (int i = n-1; i >= 0; i--){
        f = 1LL * f * (n - i) % mod;
        if (i&1) add(ans, -1LL * f * dp[1][i][0] % mod);
        else add(ans, 1LL * f * dp[1][i][0] % mod);
    }
    cout << ans;
}
