//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <queue>

using namespace std;

typedef long long ll;
typedef vector<int> vint;
typedef vector<vector<int> > vvint;
typedef vector<long long> vll, vLL;
typedef vector<vector<long long> > vvll, vvLL;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) for(int i=0;i<n;++i)
#define mod (ll)(1e9+7)
#define FIX(a) ((a)%mod+mod)%mod
#define ALL(obj) (obj).begin(), (obj).end()
#define rALL(obj) (obj).rbegin(), (obj).rend()
#define INF 1000000000 //1e9
#define LLINF 2000000000000000000LL //2e18
#define fi first
#define se second
#define pb push_back
int dy[]={0, 0, 1, -1};
int dx[]={1, -1, 0, 0};
struct mint {
  ll x; // typedef long long ll;
  mint(ll x=0):x((x%mod+mod)%mod){}
  mint& operator+=(const mint a) {
    if ((x += a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator-=(const mint a) {
    if ((x += mod-a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator*=(const mint a) {
    (x *= a.x) %= mod;
    return *this;
  }
  mint operator+(const mint a) const {
    mint res(*this);
    return res+=a;
  }
  mint operator-(const mint a) const {
    mint res(*this);
    return res-=a;
  }
  mint operator*(const mint a) const {
    mint res(*this);
    return res*=a;
  }
  mint pow(ll t) const {
    if (!t) return 1;
    mint a = pow(t>>1);
    a *= a;
    if (t&1) a *= *this;
    return a;
  }

  // for prime mod
  mint inv() const {
    return pow(mod-2);
  }
  mint& operator/=(const mint a) {
    return (*this) *= a.inv();
  }
  mint operator/(const mint a) const {
    mint res(*this);
    return res/=a;
  }
};
mint pow(ll x, ll ntimes) {
    ll ret = 1;
    while (ntimes > 0) {
        if ((ntimes & 1) == 1) {
            ret = ret * x;
        }
        x = x * x;
        x%=mod;
        ret%=mod;
        ntimes >>= 1;
    }
    return mint(ret);
}
int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    ll n;
    cin >> n;
    vvll cld(n);
    REP(i,n-1){
        ll a,b;
        cin >> a >> b;
        a--; b--;
        cld[a].pb(b);
        cld[b].pb(a);
    }
    queue<ll> q;
    q.push(0);
    vll par(n);
    priority_queue<pair<ll,ll> > pq;
    vll dep(n);
    dep[0]=0;
    pq.push(make_pair(0,0));
    par[0] = -1LL;
    while(!q.empty()){
        ll now = q.front();
        q.pop();
        for(ll i : cld[now]){
            if(i!=par[now]){
                par[i] = now;
                q.push(i);
                dep[i]=dep[now]+1;
                pq.push(make_pair(dep[i],i));
            }
        }
    }
    mint ans = 0;
    vector<mint> cnt(n,mint(0));
    while(!pq.empty()){
        auto pi = pq.top();
        pq.pop();
        ll now = pi.se;
        if((int)cld[now].size()==1){
            cnt[now] = mint(1);
        }else{
            mint prob = mint(1);
            mint t = mint(1)/(pow(2,n-1));
            prob -= t;
            cnt[now]= mint(1);
            for(ll i:cld[now]){
                if(i!=par[now]){
                    cnt[now] += cnt[i];
                    t = mint(1);
                    t /= pow(2,cnt[i].x);
                    t = mint(1)-t;
                    t /= pow(2,n-1-cnt[i].x);
                    prob -= t;
                }
            }
            mint cp = mint(n)-cnt[now];
            t = mint(1);
            t /= pow(2,cp.x);
            t = mint(1)-t;
            t /= pow(2,n-1-cp.x);
            prob-=t;
            prob/=mint(2);
            ans+=prob;
        }
    }
    cout << ans.x << endl;
    return 0;
}

Measured memory_bytes: 21616