#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <assert.h>
#include <stack>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <assert.h>
using namespace std;

const int mod = 1000000007;
const int N = 210;
const int inv2 = (mod + 1) / 2;
vector<int> v[N];
int dp[N][N];
int pre[N][20];
int dep[N];

long long mpow(long long a, long long b) {
	long long ans = 1;
	while (b) {
		if (b & 1) ans = ans * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return ans;
}

long long cal(int x, int y) {
	if (dp[x][y] != -1) return dp[x][y];
	if (x == 0) return dp[x][y] = 1;
	if (y == 0) return dp[x][y] = 0;
	return dp[x][y] = (cal(x - 1, y) + cal(x, y - 1)) * inv2 % mod;
}

void dfs(int u, int fa) {
	pre[u][0] = fa;
	for (int i = 1; i < 20; i++)
		pre[u][i] = pre[pre[u][i - 1]][i - 1];
	dep[u] = dep[fa] + 1;
	for (int i = 0; i < v[u].size(); i++) {
		int x = v[u][i];
		if (x == fa) continue;
		dfs(x, u);
	}
}

int get_lca(int x, int y) {
	if (dep[x] < dep[y]) swap(x, y);
	for (int i = 19; i >= 0; i--)
		if (dep[x] - (1 << i) >= dep[y]) x = pre[x][i];
	if (x == y) return x;
	for (int i = 19; i >= 0; i--)
		if (pre[x][i] != pre[y][i]) {
			x = pre[x][i];
			y = pre[y][i];
		}
	return pre[x][0];
}

int main()
{
	memset(dp, -1, sizeof(dp));
	for (int i = 0; i < N; i++)
		for (int j = 0; j < N; j++)
			if (i + j) cal(i, j);
	int n;
	scanf("%d", &n);
	for (int i = 1; i < n; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		v[x].push_back(y);
		v[y].push_back(x);
	}

	long long ans = 0;
	for (int i = 1; i <= n; i++) {
		dfs(i, 0);
		for (int j = 1; j <= n; j++)
			for (int k = j + 1; k <= n; k++) {
				int lca = get_lca(j, k);
				ans += dp[dep[k] - dep[lca]][dep[j] - dep[lca]];
			}
	}

	ans = ans % mod * mpow(n, mod - 2) % mod;
	cout << ans << endl;
	return 0;
}
