#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;
}
