#include<bits/stdc++.h>
#define dd(x) cerr<<#x<<" = "<<x<<" "
#define de(x) cerr<<#x<<" = "<<x<<endl
#define mp make_pair
#define fi first
#define se second
#define pii pair<int,int>
using namespace std;

const int maxn = 1e5+5;

vector<int> g[maxn];
int dp[maxn][25][2],dep[maxn],ans[maxn],a[maxn];
int k;

void dfs1(int x,int fa)
{
	if( x == 1 ) dep[x] = 0;
	else dep[x] = dep[fa] + 1;
	for (int i = 0; i < g[x].size(); i++)
	{
		int t = g[x][i];
		if( t == fa ) continue;
		dfs1(t,x);
		for (int j = 0; j < k; j++)
		{
			dp[x][j][0] ^= dp[t][j][0];
			dp[x][j][1] ^= dp[t][j][1];
		}
	} 
	int z = dep[x]%k;
	if( (dep[x] / k) % 2 ) dp[x][z][1] ^= a[x];
	else dp[x][z][0] ^= a[x];
	/*if( x == 1 )
	{
		for (int j = 0; j < k; j++)
		{
			dd(j);dd(dp[x][j][0]);de(dp[x][j][1]);
		}
	}*/
}
void dfs2(int x,int fa)
{
	int res = 0;
	for (int i = 0; i < k; i++)
	{
		res ^= dp[x][i][1];
	}
	if( res > 0 ) ans[x] = 1;
	else ans[x] = 0;
	for (int i = 0; i < g[x].size(); i++)
	{
		int t = g[x][i];
		if( t == fa ) continue;
		int dpl[25][2],dpx[25][2],dpy[25][2],dpz[25][2];
		int lx = dep[t]-1;
		int flagx = (lx/k) % 2;
		lx %= k;
		for (int j = 0; j < k; j++)
		{
			if( j + lx >= k ) dpl[j][0] = dp[t][(j+lx)%k][1^flagx],dpl[j][1] = dp[t][(j+lx)%k][0^flagx];
			else dpl[j][0] = dp[t][(j+lx)%k][0^flagx],dpl[j][1] = dp[t][(j+lx)%k][1^flagx];
		}
		for (int j = 0; j < k; j++) 
		{
			/*if( t == 4 )
			{
				dd(dp[x][j][0]);de(dp[x][j][1]);
			}*/
			int flagx = 0;
			if( (1/k)%2 != (dep[t]/k)%2 ) flagx = 1;
			dpx[j][0] = dp[x][j][0] ^ dpl[j][0];
			dpx[j][1] = dp[x][j][1] ^ dpl[j][1];
		}
		/*if( t == 4 )
		{
			dd(dpx[0][0]);de(dpx[0][1]);
		}*/
		
		for (int j = 0; j < k; j++)
		{
			if( j == 0 ) dpy[j][0] = dpx[k-1][1],dpy[j][1] = dpx[k-1][0];
			else dpy[j][0] = dpx[j-1][0],dpy[j][1] = dpx[j-1][1];
		}
		/*if( t == 4 )
		{
			dd(dpy[0][0]);de(dpy[0][1]);
		}*/
		int l = dep[t];
		int flag = (l/k) % 2;
		l %= k;
		for (int j = 0; j < k; j++)
		{
			if( j + l >= k ) dpz[j][0] = dp[t][(j+l)%k][1^flag],dpz[j][1] = dp[t][(j+l)%k][0^flag];
			else dpz[j][0] = dp[t][(j+l)%k][0^flag],dpz[j][1] = dp[t][(j+l)%k][1^flag];
		}
		for (int j = 0; j < k; j++) 
		{
			dp[t][j][0] = dpz[j][0],dp[t][j][1] = dpz[j][1];
			/*if( t == 4 )
			{
				dd(dp[t][j][0]);de(dp[t][j][1]);
			}*/
		}
		for (int j = 0; j < k; j++)
		{
			dp[t][j][0] ^= dpy[j][0];
			dp[t][j][1] ^= dpy[j][1];
			/*if( t == 4 )
			{
				dd(dp[t][j][0]);de(dp[t][j][1]);
			}*/
		}
		dfs2(t,x);
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int n;
	cin >> n >> k;
	for (int i = 1; i < n; i++)
	{
		int x,y;
		cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for (int i = 1; i <= n; i++) cin >> a[i];
	dfs1(1,0);
	dfs2(1,0);
	for (int i = 1; i <= n; i++)
	{
		cout << ans[i];
		if( i == n ) cout << '\n';
		else cout << ' '; 
	}
	return 0;
}

