#include<bits/stdc++.h>
using namespace std;
int const N=200001,mod=1e9+7;
int sil[N],odw[N],roz[N],dp[N];
vector<int>g[N],post;
int dwu(int n, int k){
if(k>n) swap(n,k);
return (sil[n+1]/((long long)sil[k]*sil[n-k+1]))%mod;
}
void dfs(int v){
odw[v]=1;
dp[v]=1;
for(int i:g[v]){
if(odw[i]==0){
dfs(i);
dp[v]=dwu(roz[v],roz[i])*dp[v]%mod*dp[i]%mod;
roz[v]+=roz[i];
}
}
roz[v]++;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,a,b;
cin>>n;
sil[0]=1;
for(int i=1;i<=n;i++) sil[i]=((long long)sil[i-1]*i)%mod;
for(int i=1;i<n;i++){
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1);
cout<<dp[1];
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGNvbnN0IE49MjAwMDAxLG1vZD0xZTkrNzsKaW50IHNpbFtOXSxvZHdbTl0scm96W05dLGRwW05dOwp2ZWN0b3I8aW50PmdbTl0scG9zdDsKCmludCBkd3UoaW50IG4sIGludCBrKXsKICAgIGlmKGs+bikgc3dhcChuLGspOwogICAgcmV0dXJuIChzaWxbbisxXS8oKGxvbmcgbG9uZylzaWxba10qc2lsW24taysxXSkpJW1vZDsKfQoKdm9pZCBkZnMoaW50IHYpewogICAgb2R3W3ZdPTE7CiAgICBkcFt2XT0xOwogICAgZm9yKGludCBpOmdbdl0pewogICAgICAgIGlmKG9kd1tpXT09MCl7CiAgICAgICAgICAgIGRmcyhpKTsKICAgICAgICAgICAgZHBbdl09ZHd1KHJvelt2XSxyb3pbaV0pKmRwW3ZdJW1vZCpkcFtpXSVtb2Q7CiAgICAgICAgICAgIHJvelt2XSs9cm96W2ldOwogICAgICAgIH0KICAgICAgIAogICAgfQogICAgcm96W3ZdKys7Cn0KCmludCBtYWluKCl7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKICAgIGludCBuLGEsYjsKICAgIGNpbj4+bjsKICAgIHNpbFswXT0xOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIHNpbFtpXT0oKGxvbmcgbG9uZylzaWxbaS0xXSppKSVtb2Q7CiAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKICAgICAgICBjaW4+PmE+PmI7CiAgICAgICAgZ1thXS5wdXNoX2JhY2soYik7CiAgICAgICAgZ1tiXS5wdXNoX2JhY2soYSk7CiAgICB9CiAgICBkZnMoMSk7CiAgICBjb3V0PDxkcFsxXTsKfQo=