import sys sys.setrecursionlimit(400000) MOD = 1000000007 inv2 = 500000004 def dfs0(i) : stack = [[-1, -1], [i, 0]] while len(stack) > 1 : i = stack[-1][0] j = stack[-1][1] if j == len(hen[i]) : stack.pop(-1) if len(stack) > 1 : subtree_dsum[stack[-1][0]] = (subtree_dsum[stack[-1][0]] + subtree_dsum[i] * inv2) % MOD else : stack[-1][1] += 1 if hen[i][j] != stack[-2][0] : stack.append([hen[i][j], 0]) res = 0 def dfs1(i) : global res stack = [[-1, -1, -1], [i, 0, 0]] sum1_global = [0 for i in range(n)] while len(stack) > 1 : i = stack[-1][0] j = stack[-1][1] if not j : all = [] if len(stack) > 2 : all.append(stack[-1][2]) for k in hen[i] : if k != stack[-2][0] : all.append(subtree_dsum[k]) sum1 = sum(all) % MOD sum1_global[i] = sum1 sum2 = sum(map(lambda i : i * i, all)) % MOD sum3 = sum(map(lambda i : i * i % MOD * i, all)) % MOD res = (res \ + sum1 * sum1 % MOD * sum1 - sum2 * sum1 * 3 + sum3 * 2 \ + (sum1 * sum1 - sum2) * 3 \ + sum1 * 3 + 1) % MOD if res < 0 : res += MOD if j == len(hen[i]) : stack.pop(-1) else : stack[-1][1] += 1 if hen[i][j] != stack[-2][0] : next = (sum1_global[i] - subtree_dsum[hen[i][j]] + 1) * inv2 % MOD if next < 0 : next += MOD stack.append([hen[i][j], 0, next]) n = int(input()) hen = [[] for i in range(n)] for i in range(n - 1) : a, b = map(int, input().split()) a -= 1 b -= 1 hen[a].append(b) hen[b].append(a) subtree_dsum = [inv2 for i in range(n)] dfs0(0) dfs1(0) res = res * pow(2, n - 1, MOD) % MOD print(res)