Given is a tree T with N vertices. The i-th edge connects Vertex A_i and B_i (1 \leq A_i,B_i \leq N).

Now, each vertex is painted black with probability 1/2 and white with probability 1/2, which is chosen independently from other vertices. Then, let S be the smallest subtree (connected subgraph) of T containing all the vertices painted black. (If no vertex is painted black, S is the empty graph.)

Let the holeyness of S be the number of white vertices contained in S. Find the expected holeyness of S.

Since the answer is a rational number, we ask you to print it \bmod 10^9+7, as described in Notes.

Constraints

* 2 \leq N \leq 2 \times 10^5
* 1 \leq A_i,B_i \leq N
* The given graph is a tree.

Input

Input is given from Standard Input in the following format:


N
A_1 B_1
:
A_{N-1} B_{N-1}


Output

Print the expected holeyness of S, \bmod 10^9+7.

Examples

Input

3
1 2
2 3


Output

125000001


Input

4
1 2
2 3
3 4


Output

375000003


Input

4
1 2
1 3
1 4


Output

250000002


Input

7
4 7
3 1
2 6
5 2
7 1
2 7


Output

570312505
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <set>
using namespace std;

typedef long long ll;
typedef pair <ll, ll> pii;

const ll MAX_N = 2e5 + 10, MOD = 1e9 + 7;
ll n, ans, TWO;
ll sz[MAX_N];
vector <int> adj[MAX_N];

int _sum(int a, int b) {
    int c = a + b;
    if (MOD <= c)
        c -= MOD;

    return c;
}

int _sub(int a, int b) {
    int c = a - b;
    if (c < 0)
        c += MOD;

    return c;
}

int _mul(int a, int b) {
    int c = 1LL * a * b % MOD;
    return c;
}

int _pow(int a, int b) {
    if (!b)
        return 1;

    int res = _pow(a, b >> 1);
    res = _mul(res, res);

    if (b & 1)
        res = _mul(res, a);

    return res;
}

int dfs(int v, int p = 0) {
    sz[v] = 1;
    for (int u: adj[v])
        if (u != p)
            sz[v] += dfs(u, v);

    return sz[v];
}

void calc(int v, int p = 0) {
    int res1 = _pow(TWO, n - 1);
    int res2 = _mul(_sub(1, _pow(TWO, n - sz[v])), _pow(TWO, sz[v] - 1));
    for (int u: adj[v])
        if (u != p) {
            calc(u, v);
            res2 = _sum(res2, _mul(_sub(1, _pow(TWO, sz[u])), _pow(TWO, n - sz[u] - 1)));
        }

    ans = _sum(ans, _mul(TWO, _sub(1, _sum(res1, res2))));
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    cin >> n;
    for (int i = 0; i < n - 1; i++) {
        int v, u;
        cin >> v >> u;
        v--, u--;

        adj[v].push_back(u);
        adj[u].push_back(v);
    }

    dfs(0);
    TWO = _pow(2, MOD - 2);
    calc(0);

    cout << ans << "\n";
    return 0;
}