fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int const N=200001,mod=1e9+7;
  4. int sil[N],odw[N],roz[N],dp[N];
  5. vector<int>g[N],post;
  6.  
  7. int dwu(int n, int k){
  8. if(k>n) swap(n,k);
  9. return (sil[n+1]/((long long)sil[k]*sil[n-k+1]))%mod;
  10. }
  11.  
  12. void dfs(int v){
  13. odw[v]=1;
  14. dp[v]=1;
  15. for(int i:g[v]){
  16. if(odw[i]==0){
  17. dfs(i);
  18. dp[v]=dwu(roz[v],roz[i])*dp[v]%mod*dp[i]%mod;
  19. roz[v]+=roz[i];
  20. }
  21.  
  22. }
  23. roz[v]++;
  24. }
  25.  
  26. int main(){
  27. ios_base::sync_with_stdio(0);
  28. cin.tie(0);
  29. int n,a,b;
  30. cin>>n;
  31. sil[0]=1;
  32. for(int i=1;i<=n;i++) sil[i]=((long long)sil[i-1]*i)%mod;
  33. for(int i=1;i<n;i++){
  34. cin>>a>>b;
  35. g[a].push_back(b);
  36. g[b].push_back(a);
  37. }
  38. dfs(1);
  39. cout<<dp[1];
  40. }
  41.  
Success #stdin #stdout 0.01s 10560KB
stdin
3
1 2
1 3
stdout
2