//  Created by conan1024hao in 2019.
//  Copyright © 2019 conan1024hao. All rights reserved.
//  専用ライブラリです、自由にコピーして構いません。
//  感谢看我的代码！Wechat:conan1024hao QQ:810396815
#pragma GCC optimize ("O3")
#include <iostream>
#include <iomanip>
#include <istream>
#include <ostream>
#include <sstream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <queue>
#include <deque>
#include <list>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <string>
#include <ctime>
#include <cctype>
#include <cstdlib>
#define INF 10e16
#define MOD 1000000007
#define  mod 1000000007
#define rep(i, a, n) for (ll i = a; i < (ll)(n); i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define mmax(x,y)(x>y?x:y)
#define mmin(x,y)(x<y?x:y)
#define chmax(x,y) x=mmax(x,y)
#define chmin(x,y) x=mmin(x,y)
#define all(x) (x).begin(),(x).end()
#define siz(x) (ll)(x).size()
#define PI acos(-1.0)
using namespace std;
//using Int=int_fast64_t;
typedef long long int ll;
typedef pair<ll,ll>Pll;
typedef pair<int,int>Pin;
long long GCD(long long a, long long b) { return b ? GCD(b, a%b) : a; }
long long LCM(long long a, long long b)  {return a/GCD(a,b)*b;}
int dx[8]={-1,0,1,0};
int dy[8]={0,-1,0,1};
char dir[4]={'u','l','d','r'};
ll cmp1(pair<ll,string>a,pair<ll,string> b){
        if(a.fi!=b.fi)
        return a.fi<b.fi;
        else
        return a.se<b.se;
}
//--------------------------------------------------------------------------
const ll MAX = 200010;//設定して
 
long long fac[MAX], finv[MAX], inv[MAX];
 
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % mod;
        inv[i] = mod - inv[mod%i] * (mod / i) % mod;//＊１
        finv[i] = finv[i - 1] * inv[i] % mod;
    }
}
 
long long COM(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % mod) % mod;
}
 
long long modpow(long long a, long long n, long long MODD) {//a^n(MOD)を求める
    long long res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % MODD;
        a = a * a % MODD;//次の準備
        n >>= 1;
    }
    return res;
}
ll n;
vector<vector<ll>>e;
vector<vector<ll>>part;

ll dfs(ll now,ll pre){
  ll sumv=0;
  rep(i,0,siz(e[now])){
    if(e[now][i]==pre)continue;
 
    part[now].pb(dfs(e[now][i],now));
    sumv+=(part[now].back());
  }
  if(n-1-sumv)part[now].pb(n-1-sumv);
  return sumv+1;
}

//---------------------------------------------------------------------------
int main(){//問題をちゃんと見ろ!!!!!!!!!!!!!!!!!      llか??????????        memset()!!!!!!!!!!!!       ペナを減らせ!!!!!!!!!!!!!
    cin.tie(0);
    ios::sync_with_stdio(false);
    //-------------------------------
    cin>>n;
    COMinit();
    e.assign(n,vector<ll>(0));
    part.assign(n,vector<ll>(0));
    for(int i=0;i<n-1;i++){
        ll a,b;cin>>a>>b;
           --a;--b;
           e[a].pb(b);
           e[b].pb(a);
    }
    
     dfs(0,-1);
    
    
    
     ll ans=0;
    for(int i=0;i<n;i++){
        if(siz(part[i])<=1)continue;
        ll sum=1;
        for(int j=0;j<siz(part[i]);j++){
            sum+=mod-modpow(inv[2],n-1-part[i][j],mod);
            sum%=mod;
        }
        sum+=(siz(part[i])-1)*modpow(inv[2],n-1,mod);
        sum%=mod;
        sum*=inv[2];
        sum%=mod;
        ans+=sum;
        ans%=mod;
    }
    cout<<ans<<endl;
    //-------------------------------
    return 0;
}
//---------------------------------------------------------------------------






Measured memory_bytes: 38528