#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
vector<int>G[100100];
int n,k;
int dp[100100][45];
int ans[100100];
void add(int x,int y)
{
    G[x].push_back(y);
    G[y].push_back(x);
}
void dfs(int x,int pre)
{
    for(int v:G[x])
    {
        if(v==pre)  continue;
        dfs(v,x);

        for(int i=0;i<k;i++)  dp[x][(i+1)%k]^=dp[v][i];
    }
}
void dfs2(int x,int pre)
{
    for(auto v:G[x])
    {
        if(v==pre)  continue;
        int temp[45];
        for(int i=0;i<k;i++)  temp[i]=dp[v][i];
        
        for(int i=0;i<k;i++)  dp[v][(i+2)%k]^=temp[i]^dp[x][(i+1)%k];

        dfs2(v,x);
    }
}
int main()
{
    cin>>n>>k;
    k<<=1;
    int x,y;
    for(int i=1;i<n;i++)  cin>>x>>y,add(x,y);
    for(int i=1;i<=n;i++)  cin>>dp[i][0];

    dfs(1,-1);
    dfs2(1,-1);

    for(int i=1;i<=n;i++)
    {
        int cur=0;
        for(int j=k/2;j<k;j++)  cur^=dp[i][j];
        cout<< (!!cur) <<" "; 
    }
    cout<<endl;
    return 0;
}