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 FOR(i,a,b) for (int i=(a);i<(b);i++)
#define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--)
#define REP(i,n) for (int i=0;i<(n);i++)
#define RREP(i,n) for (int i=(n)-1;i>=0;i--)
typedef long long LL;
int N;
int A[200001];
int B[200001];
vector<int>v[200001];
vector<LL>w[200001];

LL MOD=1e9+7;



LL pp(LL x, LL y){
	LL temp=y;
	LL ans=1;
	LL now=x;
	while(temp!=0){
		if(temp%2==1){
			ans*=now;
			ans%=MOD;
		}
		temp/=2;
		now=now*now;
		now%=MOD;
	}
	return ans;
}

LL inv(LL x){
	return pp(x,MOD-2);
}

int dfs(int x, int p){
	int temp=1;
	if(v[x].size()==1&&p!=-1){
		w[x].push_back(N-1);
		return 1;
	}
	REP(i,v[x].size()){
		if(v[x][i]!=p){
			LL now=dfs(v[x][i], x);
			w[x].push_back(now);
			temp+=now;
		}
	}
	w[x].push_back(N-temp);
	return temp;
}

int main(){
	cin>>N;
	REP(i,N-1){
		cin>>A[i]>>B[i];
		A[i]--;
		B[i]--;
		v[A[i]].push_back(B[i]);
		v[B[i]].push_back(A[i]);
	}
	dfs(0,-1);
	LL ans=0;
	REP(i,N){
		LL temp=pp(2,N-1);
		REP(j,v[i].size()){
			LL temp2=pp(2,w[i][j]);
			//LL temp3=pp(2,N-w[i][j]-1);
			//cout<<w[i][j]<<" "<<i<<" "<<j<<" "<<temp2<<" "<<temp3<<endl;
			//temp2*=temp3;
			temp2%=MOD;
			
			temp-=temp2;
			temp+=MOD;
			temp%=MOD;
			//cout<<i<<" "<<j<<" "<<temp<<endl;
		}
		temp+=(v[i].size()-1);
		temp%=MOD;
		ans+=temp;
		ans%=MOD;
		//cout<<"ans"<<ans<<endl;
	}
	ans=ans*(inv(pp(2, N)));
	ans%=MOD;
	cout<<ans<<endl;
}