#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

#define nd cout<<endl;
#define _ <<' '<<
#define pp exit(0);

using namespace std;
typedef long long ll;
const ll inf = 1e9;

const ll mod = 1e9+7;
int n;
vector<vector<int>> d;
vector<vector<int>> g;

ll bpow(ll n, ll x) {
    if (x == 0) return 1;
    ll c = bpow(n, x >> 1);
    c = c*c % mod;
    return x&1 ? c*n%mod : c;
}
ll dp[201][201];
void calc_dp() {
    for (int i = 1; i <= 200; i++) {
        dp[i][0] = 0;
        dp[0][i] = 1;
    }

    for (int i = 1; i <= 200; i++) {
        for (int j = 1; j <= 200; j++) {
            dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % mod * bpow(2ll, mod - 2) % mod;
        }
    }
}
void floyd() {
    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
            }
        }
    }
}

int lca[200][9], tin[200], tout[200], timer = 0;
void dfs(int s, int p) {
    tin[s] = timer++;
    lca[s][0] = p;
    for (int i = 1; i < 9; i++) {
        lca[s][i] = lca[lca[s][i - 1]][i - 1];
    }

    for (auto to : g[s]) {
        if (to == p) continue;
        dfs(to, s);
    }
    tout[s] = timer++;
}

bool upper(int a, int b) { return tin[a] <= tin[b] && tout[a] >= tout[b]; }

int get_lca(int a, int b) {
    if (upper(a, b)) return a;
    if (upper(b, a)) return b;

    for (int i = 8; i >= 0; i--) {
        if (!upper(lca[a][i], b)) a = lca[a][i];
    }
    return lca[a][0];
}

ll ans = 0;
void solve(int start) {
    dfs(start, start);
    ll invn = bpow(n, mod - 2);
    ll res = 0;
//    cout << lca[4][0] << '\n';
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            ///i > j
            int l = get_lca(i, j);
            ll szi = d[i][l], szj = d[j][l];
//            cout << i + 1 _ j + 1  << "   " << dp[szi][szj] _ szi _ szj _ l << '\n';

            //ll chance = dp[szi][szj] * invn % mod;

            ans = (ans + dp[szi][szj]) % mod;
            res = (res + dp[szi][szj]) % mod;
        }
    }
//    cout << start _ res << '\n';
}


int32_t main() {
    std::ios_base::sync_with_stdio(0);
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif

    cin >> n;
    d.resize(n, vector<int> (n, n));
    g.resize(n);
    for (int i = 0; i < n; i++) {
        d[i][i] = 0;
    }

    for (int i = 1; i < n; i++) {
        int fr, to;
        cin >> fr >> to;
        fr--; to--;
        d[fr][to] = d[to][fr] = 1;
        g[fr].push_back(to);
        g[to].push_back(fr);
    }
//    for (auto v : g) {
//        for (auto x : v) cout << x << ' ';
//        nd
//    }

    calc_dp();
    //cout << dp[1][2] _ (3ll * bpow(4ll, mod - 2) % mod) << '\n';
//    cout << (bpow(2ll, mod - 2)) << '\n';
    floyd();
//    solve(1);

    for (int i = 0; i < n; i++) {
        solve(i);
    }

    ans = ans * bpow(n, mod - 2) % mod;

    cout << ans << '\n';
}
//by rumazius
