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 <bits/stdc++.h>

using namespace std;

#define x first
#define y second
#define mp make_pair
#define pb push_back

typedef long long ll;

const ll MOD = 1000000007;

ll add(ll x, ll y) {
	return (x+y) % MOD;
}

ll sub(ll x, ll y) {
	return (x-y+MOD) % MOD;
}

ll mult(ll x, ll y) {
	return (x * y) % MOD;
}

ll pot(ll x, ll y) {
	if (y == 0) return 1;
	ll sol = pot(x, y/2);
	sol = mult(sol, sol);
	if (y%2) sol = mult(sol, x);
	return sol;
}

ll div_(ll x, ll y) {
	return mult(x, pot(y, MOD-2));
}

int deg[200005];
int siz[200005];
vector <int> v[200005];
int p[200005];

void dfs(int node, int par) {
	p[node] = par;
	siz[node] = 1;
	for (int i=0 ; i<v[node].size() ; i++) {
		if (v[node][i] == par) continue;
		dfs(v[node][i], node);
		siz[node] += siz[v[node][i]];
	}
}

int main() {
	int n;
	scanf("%d", &n);
	for (int i=0 ; i<n-1 ; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		v[x].pb(y);
		v[y].pb(x);
		deg[x]++;
		deg[y]++;
	}
	dfs(1, 0);
	//cout <<"ovde\n";
	ll sol = 0;
	for (int i=1 ; i<=n ; i++) {
		if (deg[i] == 1) continue;
		ll ne = div_(1LL, pot(2LL, (ll)n-1));
		int br = 1;
		for (int j=0 ; j<v[i].size() ; j++) {
			if (v[i][j] == p[i]) continue;
		//	cout <<v[i][j]<<" <<\n";
			br += siz[v[i][j]];
			ne += mult(sub(1LL, div_(1LL, pot(2LL, (ll)siz[v[i][j]]))), div_(1LL, pot(2LL, (ll)n-siz[v[i][j]]-1)));
		}
		int ost = n-br;
		if (i!=1) ne = add(ne, mult(sub(1LL, div_(1LL, pot(2LL, (ll)ost))), div_(1LL, pot(2LL, (ll)n-ost-1))));
		ll prob = div_(sub(1LL, ne), 2LL);
		//cout <<"prob = "<<prob<<endl;
		sol = add(sol, prob);
	}
	printf("%lld\n", sol);
	return 0;
}