c排序再累加最后去个尾求个和
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const int mod=1e9+7,inv2=(mod+1)/2;
int ksm(int b,int n){
int res=1;
while(n){
if(n&1) res=1ll*res*b%mod;
b=1ll*b*b%mod; n>>=1;
}
return res;
}
int ans,dis[405],dep[405],f[405][405],c[405][405],fa[405][10];
vector<int> e[405];
vector<int> vec[405];
void dfs(int u,int fath){
vec[u].clear(); vec[u].push_back(u);
dep[u]=dep[fath]+1;
for(auto v:e[u])
{
if(v!=fath)
{
dfs(v,u);
for(auto x:vec[v])
{
for(auto y:vec[u])
{
int a=x,b=y;
if(a<b) swap(a,b);
ans=(ans+f[dep[a]-dep[u]][dep[b]-dep[u]])%mod;
}
}
for(auto x:vec[v])
{
vec[u].push_back(x);
}
}
}
}
int fac[405],inv[405];
void init(int n){
fac[0]=1;
for(int i=1;i<=n;++i)
fac[i]=1ll*fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
for(int i=n-1;i>=0;--i)
inv[i]=1ll*inv[i+1]*(i+1)%mod;
}
int C(int n,int m){
if(n<0||m<0||n<m) return 0;
return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
}
void solve(){
int n;cin>>n;
for(int i=1;i<n;++i){
int u,v;cin>>u>>v;
e[u].push_back(v),e[v].push_back(u);
}
init(n+n);
for(int y=1;y<=n;++y) f[0][y]=1;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
for(int k=0;k<j;++k)
f[i][j]=(f[i][j]+1ll*ksm(inv2,i+k)*C(i+k-1,k))%mod;
for(int k=1;k<=n;++k)
dfs(k,0);
cout<<1ll*ans*ksm(n,mod-2)%mod;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int T=1;
//cin>>T;
while(T--) solve();
return 0;
}