#include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespace std;#defineintlonglongconstint N =200010, mod =1e9+7;intqmi(int a,int b){int res=1;a=a%mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res%mod;}
vector<int> g[N];int fac[N], inv[N], f[N], siz[N];voidinit(){
fac[0]=1;for(int i =1; i < N; i ++) fac[i]= fac[i -1]* i % mod;
inv[N -1]=qmi(fac[N -1], mod -2);for(int i = N -2; i >=1; i --) inv[i]=(i +1)* inv[i +1]% mod;}voiddfs(int u){
f[u]= siz[u]=1;for(auto v : g[u]){dfs(v);
f[u]= f[u]* f[v]% mod * inv[siz[v]]% mod;
siz[u]+= siz[v];}
f[u]= f[u]* fac[siz[u]-1]% mod;return;}intsolve(int n){for(int i =0; i <= n; i ++) g[i].clear();for(int i =2; i <= n; i ++){int x; cin >> x;
g[x].push_back(i);}dfs(1);return f[1];}signedmain(){init();int res =1, sum =0;int n; cin >> n;for(int i =1, cnt; i <= n; i ++){
cin >> cnt; sum += cnt;
res = res * inv[cnt]% mod *solve(cnt)% mod;}
cout << res * fac[sum]% mod <<'\n';}