/*                         _
                        _ooOoo_
                       o8888888o
                       88" . "88
                       (| -_- |)
                  .'  \\|     |//  `.
                 /  \\|||  :  |||//  \
                /  _||||| -:- |||||_  \
                |   | \\\  -  /'| |   |
                | \_|  `\`---'//  |_/ |
                \  .-\__ `-. -'__/-.  /
              ___`. .'  /--.--\  `. .'___
           ."" '<  `.___\_<|>_/___.' _> \"".
          | | :  `- \`. ;`. _/; .'/ /  .' ; |
          \  \ `-.   \_\_`. _.'_/_/  -' _.' /
===========`-.`___`-.__\ \___  /__.-'_.'_.-'================

                  Please give me AC.
*/
#include<bits/stdc++.h>
using namespace std;
#define mem(a) memset(a,0,sizeof(a))
#define INF (~(1<<31))
#define inf 0x3f3f3f3f3f3f3f3f
#define eps 1e-8
#define PI 3.141592653589793238462643383
#define lowbit(x) ((x)&(-x))
#define sqr(x) ((x)*(x))
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define all(v) (v).begin(),(v).end()
#define dbg(x,y) cout<<(x)<<" = "<<(y)<< endl;
#define per(i,a,b) for(int i = a; i >= b; --i)
#define rep(i,a,b) for(int i = a; i <= b; ++i)
#define fi first
#define se second
#define ls (rt<<1)
#define rs (rt<<1|1)
#define ll long long
#define int ll
typedef bitset<2010> bt;
typedef unsigned long long ull;
typedef complex<double> comp;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;

const ll N = 1e5 + 7;
//const ll M = 1e9 + 7;
const ll MAXN = 2e18 + 7;
//const ll Mod = 998244353;
const ll Mod = 1e9 + 7;

int _,i,j,k,n,m,p,s,T,t,l,r,o,u,v,w,x,y,z,ans,nex,sum,num,len,en,sx,sy,tx,ty,th,ma,mi,mod,cnt,la,op,res,flag,cas,bk,ret,mid,now,tmp,rt;
int a[N],b[N],c[N],dp[N][41],d[N][41],dep[N];
char ch;
vector<int> g[N],h;
string s1,s2,s3,s4;

void dfs(int u,int fa)
{
    dp[u][0]=a[u];
    for(auto v:g[u]){
        if(fa==v) continue;
        dep[v]=dep[u]+1;
        dfs(v,u);
        for(int i = 0;i < k;i++){
            dp[u][i]^=dp[v][(i-1+k)%k];
        }
    }
}
void dfs2(int u,int f)
{
    if(u!=1){
        for(int i = 0;i < k;i++){
            d[u][(i+1)%k]=d[f][i]^dp[u][(k+i-1)%k]^dp[u][(i+1)%k];
        }
        for(int i = k/2;i < k;i++) c[u]^=d[u][i];
    }
    for(auto v:g[u]){
        if(f==v) continue;
        dfs2(v,u);
    }
}

signed main()
{
    int T = 1;
    //scanf("%lld",&T);
    while(T--){
        scanf("%lld%lld",&n,&k);
        for(i = 1;i < n;i++){
            scanf("%lld%lld",&u,&v);
            g[u].pb(v);
            g[v].pb(u);
        }
        for(i = 1;i <= n;i++) scanf("%lld",a+i);
        k<<=1;
        dfs(1,0);
        for(i = k/2;i < k;i++) c[1]^=dp[1][i];
        for(i = 0;i < k;i++) d[1][i]=dp[1][i];
        dfs2(1,0);
        for(i = 1;i <= n;i++)
            printf("%c%c","01"[c[i]>0]," \n"[i==n]);
    }
    return 0;
}




