#include #include #include using namespace std; const long long mod = 1e9+7; long long mod_inv(long long x){ long long k = mod - 2, ret = 1; while(k){ if(k&1) ret *= x, ret %= mod; x *= x, x %= mod; k >>= 1; } return ret; } int main(){ int N; cin >> N; vector> G(N); for(int i = 0; i < N-1; ++i){ int u, v; cin >> u >> v; --u,--v; G[u].push_back(v); G[v].push_back(u); } vector F(N+2), F_(N+2); F[0] = 1; for(int i = 0; i <= N; ++i) F[i+1] = (i+1)*F[i]%mod; F_[N+1] = mod_inv(F[N+1]); for(int i = N+1; i > 0; --i) F_[i-1] = i*F_[i]%mod; auto f = [=](int a, int b){ if(a < b) return 0LL; return F[a]*F_[b]%mod*F_[a-b]%mod; }; auto g = [=](int k){ return F[k]*F[N-k-1]%mod*((f(N+1,k+1)+mod-f(N,k))%mod)%mod; }; queue Q; Q.push(0); vector D(N,-1); D[0] = 0; while(not Q.empty()){ int v = Q.front(); Q.pop(); for(auto v_ : G[v]){ if(D[v_] >= 0) continue; D[v_] = D[v]+1; Q.push(v_); } } long long ans = 0; for(int i = 0; i < N; ++i){ ans += g(D[i]); ans %= mod; } cout << ans << endl; }