#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef pair P; typedef tuple T; const int INF = 1000000000; const int MOD = 1000000007; vector> e; vector len; void solve(int par,ll path_len,int now){ //path_len=根からの距離. len[now] = path_len; for(int next:e[now]){ solve(now,path_len+1,next); } } int main(){ int n; cin >> n; e.resize(n); len.resize(n,0); vector in_deg(n,0); for(int i = 0;i < n-1;i++){ int a,b; cin >> a >> b; a--,b--; e[a].push_back(b); in_deg[b]++; } int s; for(int i = 0;i < n;i++){ if(in_deg[i] == 0)s = i; } for(int v:e[s]){ solve(s,1LL,v); } ll ans = 0; for(int i = 0;i < n;i++){ ans += (len[i] + 1) * len[i] / 2; ans %= MOD; } cout << ans << endl; }