#include "bits/stdc++.h"
using namespace std;
typedef long long ll;

template<int mod>
struct mint {
private:
    long long x;
public:
    mint(long long x = 0) :x(x%mod) {}
    mint(std::string s) {
        long long z = 0;
        for (int i = 0; i < s.size(); i++) {
            z *= 10;
            z += s[i] - '0';
            z %= mod;
        }
        this->x = z;
    }
    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;
    }
    friend std::ostream& operator<<(std::ostream& os, const mint& n) {
        return os << n.x;
    }
    bool operator==(const mint a) const {
        return this->x == a.x;
    }
};

constexpr int MOD = 1e9 + 7;

int n; // 頂点
vector<vector<int>> tree;
vector<ll> dist; // 根付き木中の i の子孫の数( i も含む )
vector<mint<MOD>> ans;

void dfs1(int v, int p = -1) {
    ll res = 1;
    for (int &u : tree[v]) {
        if (u == p) continue;
        dfs1(u, v);
        res += dist[u];
    }
    dist[v] = res;
}

constexpr int INF = 1e9 + 6;

//pow
template<typename T, typename U>
T pow(T k, U n, T unity = 1) {
    while (n > 0) {
        if (n & 1) {
            unity *= k;
        }
        k *= k;
        n >>= 1;
    }
    return unity;
}

void dfs2(int v, ll d_par, int p = -1) {
    // v における答えの計算
    ans[v] = 1;
    ans[v] -= pow(pow(mint<MOD>(2),MOD - 2), n - 1);
    for (int &u : tree[v]) {
        if (u == p) {
            ans[v] -= (pow(mint<MOD>(2),d_par) - 1)*pow(pow(mint<MOD>(2), MOD - 2), n - 1);
        }
        else {
            ans[v] -= (pow(mint<MOD>(2), dist[u]) - 1)*pow(pow(mint<MOD>(2), MOD - 2), n - 1);
        }
    }
    ans[v] *= pow(mint<MOD>(2), MOD - 2);

    // 左右からの累積演算を用いて子に送る d_par の計算
    // lf[i] : [:i-1]の演算結果
    // ri[i] : [i+1:]の演算結果
    int e = 0; // 演算の単位元 ( maxの場合 -INF )
    vector<ll> lf(tree[v].size(), e), ri(tree[v].size(), e);
    for (int i = 1; i < tree[v].size(); i++) {
        if (tree[v][i - 1] == p) lf[i] = lf[i - 1];
        else lf[i] = dist[tree[v][i - 1]] + lf[i - 1];
    }
    for (int i = tree[v].size() - 2; i >= 0; i--) {
        if (tree[v][i + 1] == p) ri[i] = ri[i + 1];
        else ri[i] = dist[tree[v][i + 1]] + ri[i + 1];
    }
    for (int i = 0; i < tree[v].size(); i++) {
        if (tree[v][i] == p) continue;
        dfs2(tree[v][i], lf[i] + ri[i] + (p >= 0 ? d_par : 0) + 1, v);
    }
}

int main() {
    cin >> n;
    tree.resize(n);
    dist.resize(n);
    ans.resize(n);
    for (int i = 0; i < n - 1; i++) {
        int u, v; cin >> u >> v;
        u--; v--;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }
    dfs1(0);
    dfs2(0, 0);
    mint<MOD> res = 0;
    for (int i = 0; i < n; i++) {
        res += ans[i];
    }
    cout << res << endl;
    return 0;
}


Measured memory_bytes: 41088