#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef pair<int, int> pii;
typedef long double ld;
 
#define F first
#define S second
 
const int MOD = 1e9 + 7;//XXX
const int C = 26;//XXX
 
void add(int &x, int y){
	x += y;
	while (x >= MOD) x -= MOD;
	while (x < 0) x += MOD;
}
 
int fix(int x){
	while (x >= MOD) x -= MOD;
	while (x < 0) x += MOD;
	return x;
}
 
int pw(int a, int b){
	int ret = 1;
	while (b){
		if (b & 1)
			ret = 1ll*ret*a%MOD;
		b >>= 1;
		a = 1ll*a*a%MOD;
	}
	return ret;
}

int mul(int a, int b) {
	return (ll) a * b % MOD;
}

const int MAXN = 200 + 10;
vector<int> adj[MAXN];
int inv[MAXN];
int n;

int dp[MAXN], d[MAXN][MAXN];
int bin[MAXN][MAXN];
int sz[MAXN], has[MAXN], par[MAXN], cnt[MAXN];

void dfs(int v, int p, int bad) {
	if(v == bad) {
		has[v] = 1;
	}
	sz[v] = 1;
	for(int u : adj[v]) {
		if(u != p) {
			par[u] = v;
			dfs(u, v, bad);
			sz[v] += sz[u];
			has[v] |= has[u];
		}
	}
	cnt[v] = 1;
	for(int u : adj[v]) {
		if(u != p && !has[u]) {
			cnt[v] += sz[u];
		}
	}
}

int pre[MAXN][MAXN];

void solve() {
	cin >> n;
	for(int i = 1; i < MAXN; i++) {
		inv[i] = pw(i, MOD-2);
	}
	for(int i = 0; i < MAXN; i++) {
		bin[i][0] = bin[i][i] = 1;
		for(int j = 1; j < i; j++) {
			bin[i][j] = fix(bin[i-1][j] + bin[i-1][j-1]);
		}
	}
	for(int v = 0; v < n; v++) {
		for(int u = 0; u < n; u++) {
			d[v][u] = MAXN;
		}
		d[v][v] = 0;
	}
	for(int i = 1; i < n; i++) {
		int a, b; cin >> a >> b; --a; --b;
		adj[a].push_back(b);
		adj[b].push_back(a);
		d[a][b] = d[b][a] = 1;
	}
	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]);
			}
		}
	}
	for(int y = 0; y < MAXN; y++) {
		for(int x = y; x < MAXN; x++) {
			pre[x][y] = mul(bin[x][y], pw(inv[2], x+1));
			if(x > y) {
				add(pre[x][y], pre[x-1][y]);
			}
		}
	}
	int ans = 0;
	for(int v = 0; v < n; v++) {
		for(int u = 0; u < v; u++) {
			memset(has, 0, sizeof(has));
			memset(cnt, 0, sizeof(cnt));
			dfs(v, -1, u);
			int good = 1;
			for(int w : adj[v]) {
				if(!has[w]) {
					good += sz[w];
				}
			}
			add(ans, mul(good, inv[n]));
			for(int w = 0; w < n; w++) {
				if(w == u || w == v) {
					continue;
				}
				if(d[v][u] == d[v][w] + d[w][u]) {
					int y = d[v][w] - 1;
					int high = y + d[w][u] - 1;
					int contrib = pre[high][y];
					add(ans, mul(contrib, mul(cnt[w], inv[n])));
					//for(int fail = 0; fail < d[w][u]; fail++) {
						//add(ans, mul(cnt[w], mul(inv[n], mul(bin[d[v][w] + fail - 1][d[v][w] - 1], pw(inv[2], d[v][w] + fail)))));
					//}
				}
			}
		}
	}
	
	cout << ans << "\n";
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//cout << fixed << setprecision(6);
	
	int te = 1;	
	//cin >> te;
	for (int w = 1; w <= te; w++){
		//cout << "Case #" << w << ": ";
		solve();
	}
	return 0;
}
