#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define mod 1000000007
#define N 205
#define M 40005
#define rep(i,j,k) for (ll i=j;i<=k;++i)
#define per(i,j,k) for (ll i=j;i>=k;--i)
using namespace std;
inline ll read(){
    char ch=getchar(); ll x=0,f=1;
    while (ch<'0'||ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
    while (ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
    return x*f;
}
ll n,m,f[M][N],g[N][N],head[N],tot,deep[N],id[N],num,ans;
struct edge{
    ll to,nxt;
}e[N<<1];
void add(ll u,ll v){
    e[++tot]=(edge){v,head[u]}; head[u]=tot;
}
void dfs(ll u,ll last){
    f[++m][0]=deep[u]; id[u]=m;
    for (ll i=head[u],v=e[i].to;i;i=e[i].nxt,v=e[i].to) if (v!=last){
        deep[v]=deep[u]+1; dfs(v,u); f[++m][0]=deep[u];
    }
}
ll qpow(ll x,ll y){
    ll num=1;
    for (;y;y>>=1){
        if (y&1) num=num*x%mod;
        x=x*x%mod;
    }
    return num;
}
ll get(ll l,ll r){
    if (l>r) swap(l,r);
    ll t=log(r-l+1)/log(2.0);
    return min(f[l][t],f[r-(1<<t)+1][t]);
}
void work(ll rt){
    deep[rt]=0; num=m=0; dfs(rt,0);
    rep(j,1,8) rep(i,1,m-(1<<j)+1){
        f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    }
    rep(i,1,n) rep(j,i+1,n){
        ll dz=get(id[i],id[j]);
        num=(num+g[deep[i]-dz][deep[j]-dz])%mod;
    }
    (ans+=num*qpow(n,mod-2)%mod)%=mod;
}
int main(){
    rep(i,1,200){ g[i][0]=1; g[0][i]=0; }
    ll inv2=qpow(2,mod-2);
    rep(i,1,200) rep(j,1,200) g[i][j]=(g[i-1][j]+g[i][j-1])%mod*inv2%mod;
    n=read();
    rep(i,2,n){
        ll u=read(),v=read();
        add(u,v); add(v,u);
    }
    rep(i,1,n) work(i);
    printf("%lld\n",ans);
}
