func_code_string: #include <bits/stdc++.h>   using namespace std;   #define sim template < class c   #define ris return * this   #define dor > debug & operator <<   #define eni(x) sim > typename      enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {   sim > struct rge { c b, e; };   sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }   sim > auto dud(c* x) -> decltype(cerr << *x, 0);   sim > char dud(...);   struct debug {   #ifndef ONLINE_JUDGE   ~debug() { cerr << endl; }   eni(!=) cerr << boolalpha << i; ris; }   eni(==) ris << range(begin(i), end(i)); }   sim, class b dor(pair < b, c > d) {     ris <<  (  << d.first <<  ,   << d.second <<  ) ;   }   sim dor(rge<c> d) {     *this <<  [ ;     for (auto it = d.b; it != d.e; ++it)       *this <<  ,   + 2 * (it == d.b) << *it;     ris <<  ] ;   }   #else   sim dor(const c&) { ris; }   #endif   };   #define imie(...)   [  << #__VA_ARGS__  :   << (__VA_ARGS__) <<  ]     // debug & operator << (debug & dd, P p) { dd <<  ,   << p.x <<  ,   << p.y <<  ) ; return dd; }      #define ll long long   const ll mod = 1e9 + 7;      ll powM(ll a, ll b) {       ll res = 1;       ll base = 1;       while(base <= b) {           if(base & b) {               res = res * a;               res = res % mod;               if(res < 0) {                   res = res + mod;                }           }           base = base * 2;           a = a * a;           a = a % mod;           if(a < 0) {               a = a + mod;            }       }       return res;   }      ll mod_inverse(ll n) {       return powM(n, mod - 2);   }      int main() {       ll n;       cin >> n;       // calculate dp.       vector<vector<ll>> dp(205, vector<ll> (205));       dp[0][0] = 0;       for(ll i = 0; i < 205; ++i) {           dp[0][i] = 1;           dp[i][0] = 0;       }       for(ll i = 1; i < 205; ++i) {           for(ll j = 1; j < 205; ++j) {               dp[i][j] = dp[i - 1][j] + dp[i][j - 1];               dp[i][j] = dp[i][j] % mod;               dp[i][j] = dp[i][j] * mod_inverse(2);               dp[i][j] = dp[i][j] % mod;               if(dp[i][j] < 0) {                   dp[i][j] = dp[i][j] + mod;               }           }       }       // debug() << imie(dp);       // read tree.       vector<vector<ll>> graph(n, vector<ll> (n, 0));       for(ll i = 0; i < n - 1; ++i) {           ll x, y;           cin >> x >> y;           x--;           y--;           graph[x][y] = 1;           graph[y][x] = 1;       }       // debug() << imie(graph);       // floyd warshall.       vector<vector<ll>> dist(n, vector<ll> (n, 800));       for(ll i = 0; i < n; ++i) {           dist[i][i] = 0;       }       for(ll i = 0; i < n; ++i) {           for(ll j = 0; j < n; ++j) {               if(graph[i][j]) {                   dist[i][j] = 1;               }           }       }       for(ll k = 0; k < n; ++k) {           for(ll i = 0; i < n; ++i) {               for(ll j = 0; j < n; ++j) {                   dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);               }           }       }       // debug() << imie(dist);       // calculate answer.       ll ans = 0;       for(ll i = 0; i < n; ++i) {           for(ll j = i + 1; j < n; ++j) {               for(ll k = 0; k < n; ++k) {                   ll dmin = dist[i][k];                   ll dmax = dist[j][k];                   ll t = (dmin + dmax - dist[i][j]) / 2;                   dmin = dmin - t;                   dmax = dmax - t;                   ans = ans + dp[dmax][dmin];                   ans = ans % mod;                   if(ans < 0) {                       ans = ans + mod;                    }               }           }       }       ans = (ans * mod_inverse(n) % mod);       cout << ans << endl;   }