#include #define rep(i,n) for(int i=(0);i<(n);i++) using namespace std; typedef long long ll; template bool chmax(T &a, const T &b) { if (a bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; } const int max_n = 1010101; ll MOD = 1e9 + 7; int n; vector par; vector g[max_n]; vector dp1, dp2, dp3; void dfs(int p){ dp2[p]++; dp2[p] %= MOD; for(int u : g[p]){ dfs(u); dp1[p] += dp1[u] + dp2[u] + dp3[u]; dp1[p] %= MOD; dp2[p] += dp2[u]; dp2[p] %= MOD; dp3[p] += dp2[u] + dp3[u]; dp3[p] %= MOD; } } int main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> n; par.resize(n, -1); rep(i, n-1){ int a, b; cin >> a >> b; a--; b--; par[b] = a; g[a].push_back(b); } int root = -1; rep(i, n){ if(par[i] == -1) root = i; } dp1.resize(n, 0); dp2.resize(n, 0); dp3.resize(n, 0); dfs(root); cout << dp1[root] << endl; }