60分求调
// //暴力40pts
// #include <bits/stdc++.h>
// using namespace std;
// #define int long long
// const int N = 1e5+5,mod = 1e9;
// int n,d[N],f[N],sum,ans;
// vector<int> g[N];
// void init(){//预处理阶乘
// f[0] = 1;
// for(int i=1;i<N;i++){
// f[i] = f[i-1]*i % mod;
// }
// }
// void dfs(int x,int fa){
// if(fa == -1) ans = ans * f[d[x]] % mod; //起点不减1
// else ans = ans * f[d[x] - 1] % mod; // 其余少一条父节点,-1
// for(auto v:g[x]){
// if(v != fa){
// dfs(v,x);
// }
// }
// }
// signed main()
// {
// init();
// cin>>n;
// for(int i=1,u,v;i<n;i++){
// cin>>u>>v;
// g[u].push_back(v);
// g[v].push_back(u);
// d[u]++,d[v]++;
// }
// for(int i=1;i<=n;i++){
// ans = 1;
// dfs(i,-1);
// sum = (sum + ans) % mod;
// }
// cout<<sum;
// return 0;
// }
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5,mod = 1e9;
int n,d[N],f[N],sum,ans;
vector<int> g[N];
void init(){//预处理阶乘
f[0] = 1;
for(int i=1;i<N;i++){
f[i] = f[i-1]*i % mod;
}
}
void dfs(int x,int fa){
if(fa == -1) ans = ans * f[d[x]] % mod; //起点不减1
else ans = ans * f[d[x] - 1] % mod; // 其余少一条父节点,-1
for(auto v:g[x]){
if(v != fa){
dfs(v,x);
}
}
}
signed main()
{
init();
cin>>n;
for(int i=1,u,v;i<n;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
d[u]++,d[v]++;
}
ans = 1ll;
for(int i=1;i<=n;i++){ //先都去掉一个节点计算
ans = ans * f[d[i]-1] % mod;
}
for(int i=1;i<=n;i++){ //再乘回当前节点的度
sum = (sum + ans*d[i]%mod) % mod;
}
cout<<sum;
return 0;
}