#include<bits/stdc++.h>
using namespace std;
long long n,k,p,mod = 1e9 + 7;
long long bk[100005],f[100005][4];//f[x][i]把x染成i色的方案数
vector <int> q[1000005];
void dfs(int u)
{
bk[u] = 1;
for(int i = 0;i < q[u].size();i ++)
{
int s = q[u][i];
if(bk[s])continue;
dfs(s);
f[u][1] = (f[u][1] * ((f[s][2] + f[s][3]) % mod)) % mod;
f[u][2] = (f[u][2] * ((f[s][1] + f[s][3]) % mod)) % mod;
f[u][3] = (f[u][3] * ((f[s][1] + f[s][2]) % mod)) % mod;
}
return;
}
int main()
{
cin>>n>>k;
for(int i = 1;i < n; i++)
{
int a,b;
cin>>a>>b;
q[a].push_back(b);
q[b].push_back(a);
//初始化,放一块了
f[i][1] = 1;
f[i][2] = 1;
f[i][3] = 1;
}
int p = 0;
for(int i = 1;i <= k;i ++)
{
int a,c;
cin>>a>>c;
//初始化,放一块了
f[a][1] = 0;
f[a][2] = 0;
f[a][3] = 0;
f[a][c] = 1;
if(a == 1)p = c;
}
dfs(1);
long long ans;
//if(p)ans = f[1][p] % mod;
ans = ((f[1][1] + f[1][2]) % mod + f[1][3]) % mod;
cout<<ans<<'\n';
return 0;
}
60分,WA 4,6,7,9,把数据下下来发现4号点爆0。求大佬帮调!