#include struct FastIO { char buf[20000000]; char *ptr = buf; void read() { int size; size = fread(buf, 1, sizeof(buf) - 1, stdin); buf[size] = '\0'; ptr = buf; } FastIO () { read(); } void inc() { ptr++; // if (++ptr == buf + sizeof(buf) || !*ptr) read(); } template Integer read() { bool neg = false; Integer res = 0; while ((*ptr < '0' || *ptr > '9') && *ptr != '-') inc(); if (*ptr == '-') neg = true, inc(); while (*ptr >= '0' && *ptr <= '9') res = res * 10 + *ptr - '0', inc(); return neg ? -res : res; } } fastio; #define ri fastio.read #define rs64 fastio.read std::vector > hen; int main() { int n = ri(); int degree[n]; memset(degree, 0, sizeof(degree)); bool used[n]; memset(used, 0, sizeof(used)); std::pair hens[n - 1]; for (int i = 0; i + 1 < n; i++) { hens[i].first = ri() - 1; hens[i].second = ri() - 1; degree[hens[i].first]++; used[hens[i].second] = true; } int root = std::find(used, used + n, 0) - used; hen.resize(n); for (int i = 0; i < n; i++) hen[i].resize(degree[i]); for (auto i : hens) hen[i.first][--degree[i.first]] = i.second; static std::pair que[1000000]; int head = 0; int tail = 0; que[head++] = {root, 0}; int64_t res = 0; while (head - tail) { auto i = que[tail++]; res += (int64_t) i.second * (i.second + 1) / 2; for (size_t j = 0; j < hen[i.first].size(); j++) que[head + j] = {hen[i.first][j], i.second + 1}; head += hen[i.first].size(); } printf("%d\n", (int) (res % 1000000007)); return 0; }