// #pragma GCC target ("avx,avx2")
// #include <bits/extc++.h>
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp> // Common file
// #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#define f first
#define s second

using namespace std;
// using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
// typedef tree<int, null_type, less_equal<int>, 
// rb_tree_tag, tree_order_statistics_node_update> oset;
//========================================================
const int N = 205, K = 8, M = 5e4+5, mod = 1e9+7, len = 30, inf = 0x3f3f3f3f;
ll n;
ll dep[N], mx, F[N][N];
vector<int> adj[N], sub[N];

ll power(ll x, ll y)
{
    if(!y)
        return 1;
    ll temp = power(x, y/2);
    temp = (temp * temp) %mod;
    if(y%2)
        temp = (temp * x) %mod;
    return temp;
}

void DFS(int u, int p=-1)
{
    if(~p)
        dep[u] = 1 + dep[p];

    mx = max(mx, dep[u] + 1);

    for(int v : adj[u])
        if(v != p)
            DFS(v, u);
}

int sol(int x, int y)
{
    if(!y) return 0;
    if(!x) return 1;

    if(~F[x][y]) return F[x][y];

    return F[x][y] = 1ll * power(2, mod - 2) * ((sol(x - 1, y) + sol(x, y - 1)) %mod) %mod;
}

void pre()
{
    memset(F, -1, sizeof F);
    for(int i=1; i<N; i++)
    {
        for(int j=1; j<N; j++)
        {
            F[i][j] = sol(i, j);
        }
    }
}

int dfs(int u, int p=-1)
{
    ll ret = 0;

    for(int v : adj[u])
    {
        if(p == v) continue;

        ret = (ret + dfs(v, u)) %mod;

        sub[v].push_back(v);

        for(int a: sub[u])
        {
            for(int b: sub[v])
            {
                int x = a, y = b;
                if(x < y) swap(x, y);
                ret = (ret + 1ll * F[dep[x] - dep[u]][dep[y] - dep[u]] * power(2, mx) %mod) %mod;
            }
        }
        for(int x : sub[v])
            sub[u].push_back(x);
    }

    for(int v : sub[u])
        ret = (ret + power(2LL, mx) * (u > v)) %mod;

    return ret;
}

void run_case()
{
    cin >> n;
    pre();
    for(int i=1; i<n; i++)
    {
        int u, v;
        cin >> u >> v;
        adj[u - 1].push_back(v - 1);
        adj[v - 1].push_back(u - 1);
    }

    ll ans = 0;

    for(int i=0; i<n; i++)
    {
        memset(dep, 0, sizeof dep);
        for(int u=0; u<n; u++) sub[u].clear();
        mx = 0;

        DFS(i);

        ll d = dfs(i);
        
        ans = (1ll * ans + (1ll * d * power(power(2, mx), mod - 2)) %mod) %mod;
    }

    cout << (1ll * ans * power(n, mod - 2)) %mod << endl;
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    // freopen("input.txt", "rt", stdin);
    // freopen("output.txt", "wt", stdout);
    int T = 1;
    // cin >> T;
    while(T--)
        run_case();
}
