#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
#define ll long long
#define mod 1000000007
#define mod1 998244353
using namespace std;
//vector<int>adj[200000+1]; 
//int cnt=0;
vector<int>cand;
vector<int> prime(1000005);  
vector<ll>primes;
void SieveOfEratosthenes(int n) 
{ 
    for (ll p=2; p*p<=n; p++) 
    { 
        if (prime[p] == 0 ) 
        { 
            for (int i=p*p; i<=n; i += p) 
                if(prime[i]==0)
                prime[i] = p; 
        } 
    } 
  
    
} 

long long power(long long x, long long  y )
{  
    long long res = 1ll;     
    x = x % mod; 
    if (x == 0ll) return 0; 
    while (y > 0ll)  
    {  
        if (y & 1ll)  
            res = (res*x) % mod;  
        y = y>>1ll; 
        x = (x*x) % mod;  
    }  
    return res;  
}  
long long add(long long x, long long y)
{
    x += y;
    while(x >= mod) x -= mod;
    while(x < 0) x += mod;
    return x;
}
 
long long mul(long long x, long long y)
{
    return (x * 1ll * y) % mod;
}
 
long long binpow(long long x, long long y)
{
    long long z = 1ll;
    while(y)
    {
        if(y & 1) z = mul(z, x);
        x = mul(x, x);
        y >>= 1ll;
    }
    return z;
}
 
long long inv(long long x)
{
    return binpow(x, mod - 2);
}
 
long long divide(long long x, long long y)
{
    return mul(x, inv(y));
}
 
long long fact[2000006];
 
void precalc()
{
    fact[0] = 1;
    for(long long i = 1; i < 2000006; i++)
        fact[i] = mul(fact[i - 1], i);
      //fact[i]=fact[i-1]*i;
}
 
long long C(long long n, long long k)
{
    if(n==0)
    return 1;
    return divide(fact[n], mul(fact[k], fact[n - k]));
    //return (fact[n]/(fact[n-k]))/fact[k];
}
long long sub(long long A,long long B)
{
    return (A-B+mod)%mod;
}


// pair<ll,ll> build(ll A[], ll tl, ll tr, ll v, ll segtree[])
// {
//     if(tl==tr)
//     {
//         if(A[tl-1]=='?')
//         segtree[v]=2;
//         else 
//         segtree[v]=1;
//         return segtree[v];
//     }
//     else
//     {
//         ll tm=(tl+tr)/2;
//         auto x1= build(A,tl,tm,v*2);
//         auto x2= build(A,tm+1,tr,2*v+1);
//         if()
//         return segtree[v]=x3;
//     }
// }
ll maxival(ll v, ll tl, ll tr, ll l, ll r, ll segtree[])
{
    if(l>r)
    return LLONG_MAX;
    if(l==tl && r==tr)
    return segtree[v];
    ll tm=(tl+tr)/2;
        auto x1= maxival(2*v,tl,tm,l,min(r,tm),segtree);
        auto x2= maxival(2*v+1,tm+1,tr,max(l,tm+1),r,segtree);
    return min(x1,x2);
    
}
ll updateval(ll v, ll tl, ll tr, ll pos, ll newval, ll segtree[])
{
    if(tl==tr)
    {segtree[v]=newval; return newval;}
    else
    {
        ll tm=(tl+tr)/2;
        ll x;
        if(pos<=tm)
        x=updateval(2*v,tl,tm,pos,newval,segtree);
        else
        x=updateval(2*v+1,tm+1,tr,pos,newval,segtree);
        segtree[v]=min(segtree[2*v],segtree[2*v+1]);
        return segtree[v];  
    }    
}
// int matrixdim;
// struct M {
//     vector<vector<int>> t;
//     M() {
//         t.resize(matrixdim,vector<int>(matrixdim));
//     }
//     M operator* (const M& b) const {
//         M c = M();
//         int n=matrixdim;
//         for(int i = 0; i < n; ++i) {
//             for(int j = 0; j < n; ++j) {
//                 for(int k = 0; k < n; ++k) {
//                     c.t[i][k]=add(c.t[i][k], mul(b.t[i][j], t[j][k]));
//                 }
//             }
//         }
//         return c;
//     }
// }

int main()
{
 
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cout<<fixed<<setprecision(10);
    cerr<<fixed<<setprecision(5);
    int t=1;
    //SieveOfEratosthenes(1000002);
    //precalc();
    // freopen("input.txt","r",stdin);
    // freopen("output.txt","w",stdout);
    //cin>>t;    
    while(t--)
    {
        ll n;
        cin>>n;
        vector<ll>adj[n+1];
        vector<vector<ll>>dis(n+1,vector<ll>(n+1,INT_MAX));
        ll i,j,k;
        for(i=1;i<=n;i++)
        dis[i][i]=0;
        for(i=1;i<=n-1;i++)
        {
            ll x,y;
            cin>>x>>y;
            dis[x][y]=dis[y][x]=1;
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                for(k=1;k<=n;k++)
                {
                    dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k]);
                }
            }
        }
        ll dp[n+1][n+1];
        memset(dp,0ll,sizeof(dp));
        for(i=1;i<=n;i++)
        dp[i][0]=1;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                dp[i][j]=divide((dp[i][j-1]+dp[i-1][j])%mod,2ll);
            }
        }
        ll ans =0;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                for(k=j+1;k<=n;k++)
                {
                    ll h1 = dis[i][j];
                    ll h2 = dis[i][k];
                    ll lcalev = divide(sub(add(h1,h2),dis[j][k]),2ll);
                    ll dis1 = h1-lcalev;
                    ll dis2 = h2-lcalev;
                    ans = (ans+dp[dis1][dis2])%mod;
                }
            }
        }
        cout<<divide(ans,n)<<"\n";

    }
    return 0;

}