#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7, N = 1e5 + 5;
int mul(int a, int b) {
	return (a * b) % mod;
}
int dif(int a, int b) {
	if (a < b) 
		return a - b + mod;
	return a - b;
}
int dp[N], cnt[N], c[N], ans[N];
vector<int> vec[N];
void dfs(int nod, int rad) {
	dp[nod] = 0;
	for (auto i : vec[nod]) {
		if (i == rad) 
			continue;
		dfs(i, nod);
		if (dp[i] == 0) { 
			cnt[nod] ++;
			dp[nod] = 1;
		}
	}
	ans[nod] = dp[nod];
}
void reroot(int nod, int rad) {
	for (auto i : vec[nod]) {
		if (i == rad) 
			continue;
		int curr = ans[nod];
		if (cnt[nod] == 1 && ans[i] == 0) 
			curr = 0;
		if (curr == 0) 
			cnt[i] ++;
		if (cnt[i]) 
			ans[i] = 1;
		reroot(i, nod); 
	}
}
void decon(int nod, int rad) {
	if (dp[nod] == 0) 
		c[nod] = 1;
	if (dp[nod] == 0) {
		for (auto i : vec[nod]) {
			if (i == rad) continue;
			decon(i, nod);
			if (dp[i] == 1) 
				c[nod] += c[i];
		}
	}
	else {
		int ccnt = 0;
		for (auto i : vec[nod]) {
			if (i == rad) 
				continue;
			decon(i, nod);
			if (dp[i] == 0) 
				ccnt ++;
		}
		if (ccnt == 1) {
			for (auto i : vec[nod]) {
				if (i == rad) 
					continue;
				if (dp[i] == 0) 
					c[nod] += c[i];
			}
		}
	}
}
signed main() {
	int n, d, sum = 0;
	cin >> n >> d;
	for (int i = 1; i < n; i ++) {
		int u, v;
		cin >> u >> v;
		vec[u].push_back(v);
		vec[v].push_back(u);
	}
	dfs(1, 0);
	reroot(1, 0);
	decon(1, 0);
	for (int i = 1; i <= n; i ++) 
		if (ans[i] == 0) 
			sum ++;
	int res;
	if (ans[1] == 0)
		res = mul(sum, c[1]);
	else {
		res = mul(n, n);
		res = dif(res, mul(sum, c[1]));
	}
	cout << res << '\n';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |