#include <bits/stdc++.h>
using namespace std;
const long long MD=1e9+7;
int n,p1,p2,yep[201];
long long fact[1001],po2[1001],pre[201][201],ans;
vector<int> arr[201],v;
long long qpow(long long b,long long p) {
    long long ret=1;
    while (p!=0) {
        if (p%2==1) {ret*=b; ret%=MD;}
        p/=2; b*=b; b%=MD;
    }
    return ret;
}
long long xpy(long long x,long long y) {
    if (y>x) return 0;
    if (y==0 or y==x) return 1;
    long long nom=fact[x],den1=qpow(fact[x-y],MD-2);
    return (nom*den1)%MD;
}
void dfs(int cur,int pre,int stp) {
    if (cur==stp) {yep[stp]=1; v.push_back(stp); return;}
    for (int i=0; i<arr[cur].size(); i++) {
        if (arr[cur][i]==pre) continue;
        dfs(arr[cur][i],cur,stp);
        if (yep[arr[cur][i]]) {yep[cur]=1; v.push_back(cur); return;}
    }
}
int dfs2(int cur,int pre) {
    int ret=1;
    for (int i=0; i<arr[cur].size(); i++) {
        if (yep[arr[cur][i]] or arr[cur][i]==pre) continue;
        ret+=dfs2(arr[cur][i],cur);
    }
    return ret;
}
long long getchance(long long x,long long y) {
    memset(yep,0,sizeof(yep)); v.clear();
    dfs(y,0,x);
    long long ret=0;
    for (int i=0; i<v.size()-1; i++) {
        int xlen=i,ylen=v.size()-i-1;
        long long sz=dfs2(v[i],-1);
        long long prob=pre[xlen][ylen];
        ret+=(sz*prob)%MD; ret%=MD;
    }
    ret*=qpow(n,MD-2); ret%=MD;
    return ret;
}
int main() {
    cin>>n; fact[0]=1; po2[0]=1;
    for (int i=1; i<=5*n; i++) {fact[i]=fact[i-1]*i; fact[i]%=MD; po2[i]=po2[i-1]*2; po2[i]%=MD;}
    for (int i=1; i<=n-1; i++) {
        cin>>p1>>p2;
        arr[p1].push_back(p2);
        arr[p2].push_back(p1);
    }
    for (int i=0; i<=n; i++) pre[0][i]=1;
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++) {
            pre[i][j]=(((pre[i-1][j]+pre[i][j-1])%MD)*qpow(2,MD-2))%MD;
        }
    }
    for (int i=1; i<=n; i++) {
        for (int j=i+1; j<=n; j++) {
            ans+=getchance(j,i); ans%=MD;
        }
    }
    cout<<ans<<'\n';
}