 #include "bits/stdc++.h"
using namespace std;

vector <long long> a(200001);
vector <bool> vis1(200001, 0);
vector <bool> vis2(200001, 0);


vector <long long> val(200001);
vector <int> tree[200001];
vector <int> dp[200001];
int k;
int mm;
vector <int> dfs(int x)
{
	vector <int> ans(mm, 0);
	ans[0] = a[x];
	for(int i = 0; i < tree[x].size(); i++)
	{
		int j = tree[x][i];
		if(vis1[j])continue;
		vis1[j] = 1;
		vector <int> w = dfs(j);
		for(int l = 0; l < 2*k; l++)
		{
			ans[l] = ans[l]^w[(mm + l-1)%mm];
		}
	}
	dp[x] = ans;
	return ans;
}

void dfs2(int x, vector <int> vl)
{	
	
	int ans = 0;
	for(int i = k; i < 2*k; i++)
	{
		ans = ans^vl[i];
	}		
	val[x] = ans;
	
	for(int i = 0; i < tree[x].size(); i++)
	{
		int j = tree[x][i];
		if(vis2[j])continue;
		vis2[j] = 1;
		vector <int> v = vl;
		for(int l = 0; l < 2*k; l++)
		{
			v[l] = vl[(mm + l-1)%mm];
		}
		
		vector <int> w = dp[j];
		for(int l = 0; l < 2*k; l++)
		{
			v[l] = v[l]^w[(mm + l-2)%mm];
		}
		for(int l = 0; l < 2*k; l++)
		{
			v[l] = v[l]^w[l];
		}
		dfs2(j, v);
	}

}
int main()
{
	int n;
	cin >> n >> k;
	mm = 2*k;
	for(int i = 0; i < n-1; i++)
	{
		int x, y;
		cin >> x >> y;
		tree[x].push_back(y);
		tree[y].push_back(x);
	}	
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	vis1[1] = 1;
	dfs(1);
	vis2[1] = 1;
	dfs2(1, dp[1]);
	for(int i = 1; i <= n; i++)
	{
		if(val[i] == 0)cout << 0 << " ";
		else cout << 1 << " ";
	}
	cout << endl;
}