#include <bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
int n, m;
cin >> n >> m;
vector<vector<int>> matrix(n+5);
for (int i = 1; i <= m; i++){
int a, b;
cin >> a >> b;
matrix[a].push_back(b);
matrix[b].push_back(a);
}
int source = 1; // here we are taking source as 1 because our input will be as source 1.
// this source will only work with our input.
// for another input we have to change our source.
// vector<int> used(n+5,0);
unordered_map<int, int> used;
queue<int> q;
q.push(source);
used[source] = 1;
vector<int> leaves;
vector<int> b(n+5, 0);
for (int i = 1; i <= n; i++){
cin >> b[i];
}
vector<int> answer(n+5, 0);
answer[1] = b[1];
while(!q.empty()){
int parent = q.front();
q.pop();
for (int i : matrix[parent]){
if(used[i] == 0){
q.push(i);
used[i] = 1;
if(b[i] == 1){
answer[i] = answer[parent] + 1;
}
else{
answer[i] = answer[parent];
}
}
}
}
for (int i = 1; i <= n; i++){
cout << answer[i] << " ";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCBuLCBtOwoJY2luID4+IG4gPj4gbTsKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gbWF0cml4KG4rNSk7CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKyl7CgkJaW50IGEsIGI7CgkJY2luID4+IGEgPj4gYjsKCQltYXRyaXhbYV0ucHVzaF9iYWNrKGIpOwoJCW1hdHJpeFtiXS5wdXNoX2JhY2soYSk7Cgl9CgkKCWludCBzb3VyY2UgPSAxOyAvLyBoZXJlIHdlIGFyZSB0YWtpbmcgc291cmNlIGFzIDEgYmVjYXVzZSBvdXIgaW5wdXQgd2lsbCBiZSBhcyBzb3VyY2UgMS4KCS8vIHRoaXMgc291cmNlIHdpbGwgb25seSB3b3JrIHdpdGggb3VyIGlucHV0LgoJLy8gZm9yIGFub3RoZXIgaW5wdXQgd2UgaGF2ZSB0byBjaGFuZ2Ugb3VyIHNvdXJjZS4KCQoJLy8gdmVjdG9yPGludD4gdXNlZChuKzUsMCk7Cgl1bm9yZGVyZWRfbWFwPGludCwgaW50PiB1c2VkOwoJcXVldWU8aW50PiBxOwoJcS5wdXNoKHNvdXJjZSk7CgkKCXVzZWRbc291cmNlXSA9IDE7Cgl2ZWN0b3I8aW50PiBsZWF2ZXM7CgkKCXZlY3RvcjxpbnQ+IGIobis1LCAwKTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJY2luID4+IGJbaV07Cgl9CgkKCXZlY3RvcjxpbnQ+IGFuc3dlcihuKzUsIDApOwoJYW5zd2VyWzFdID0gYlsxXTsKCQoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJaW50IHBhcmVudCA9IHEuZnJvbnQoKTsKCQkKCQlxLnBvcCgpOwoJCQoJCWZvciAoaW50IGkgOiBtYXRyaXhbcGFyZW50XSl7CgkJCWlmKHVzZWRbaV0gPT0gMCl7CgkJCQlxLnB1c2goaSk7CgkJCQl1c2VkW2ldID0gMTsKCQoJCQkJaWYoYltpXSA9PSAxKXsKCQkJCQlhbnN3ZXJbaV0gPSBhbnN3ZXJbcGFyZW50XSArIDE7CgkJCQl9CgkJCQllbHNlewoJCQkJCWFuc3dlcltpXSA9IGFuc3dlcltwYXJlbnRdOwoJCQkJfQoJCQl9CgkJfQoJCQoJfQoJCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJCWNvdXQgPDwgYW5zd2VyW2ldIDw8ICIgIjsKCX0KCQoJCglyZXR1cm4gMDsKfQ==