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>
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define MP make_pair
#define EB emplace_back
#define ALL(v) (v).begin(), (v).end()
#define debug(x) cerr << #x << " is " << x << endl
#define int ll

using namespace std;

typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;

const int M = 1e9 + 7, N = 2e5 + 7;
int ans;

int qpow(int a, int b) {
	if(b == 0) return 1;
	int t = qpow(a, b/2);
	if(b & 1) return t * t % M * a % M;
	else return t * t % M;
}

int inv(int a) {
	return qpow(a, M-2);
}

vi G[N];
int sum[N], cnt[N];

void dfs(int u, int p = -1) {
	if(G[u].size() == 1 && p != -1) {
		sum[u] = 0;
		cnt[u] = 2;
		return;
	}
	cnt[u] = 1;
	for(int v:G[u])if(v != p) {
		dfs(v, u);
		cnt[u] = cnt[u] * cnt[v] % M;
	}
	for(int v:G[u]) if(v != p) {
		sum[u] = (sum[u] + cnt[u] * inv(cnt[v]) % M * 2 % M * sum[v] % M) % M;
		ans -= sum[v] + (cnt[v] - 1);
		ans = (ans % M + M) % M;
	}
	sum[u] += (cnt[u] - 1);
	sum[u] %= M;
	ans += sum[u];
	ans %= M;
	cnt[u] = cnt[u] * 2 % M;
}

signed main()
{
	IO_OP;
	
	int n;
	cin >> n;
	for(int i=0;i<n-1;i++) {
		int u, v;
		cin >> u >> v;
		G[u].PB(v);
		G[v].PB(u);
	}
	dfs(1);
	cout << ans * inv(qpow(2, n)) % M << endl;
}



