#include <iostream>
#include <vector>
#define int long long
using namespace std;
const int N = 1e5 + 10, p = 1e9 + 7;
vector <int> E[N];
int Color[N];
int dp[N][3];
int ans;
void dfs (int x, int fa) {
if (Color[x])
dp[x][Color[x]] = 1;
else
dp[x][0] = dp[x][1] = dp[x][2] = 1;
for (auto k : E[x]) {
if (k == fa)
continue;
dfs(k, x);
dp[x][0] *= (dp[k][1] + dp[k][2]) % p;
dp[x][1] *= (dp[k][0] + dp[k][2]) % p;
dp[x][2] *= (dp[k][0] + dp[k][1]) % p;
dp[x][0] %= p, dp[x][1] %= p, dp[x][2] %= p;
}
}
signed main () {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int n, k;
cin >> n >> k;
for (int i = 1; i < n; i ++) {
int u, v;
cin >> u >> v;
E[u].emplace_back(v);
E[v].emplace_back(u);
}
for (int i = 1; i <= k; i ++) {
int x, color;
cin >> x >> color;
Color[x] = color - 1;
}
dfs(1, 0);
cout << (dp[1][0] + dp[1][1] + dp[1][2]) % p;
return 0;
}
20pts,其他WA