#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int e;
cin>>e;
vector<int>H[n+1];
for(int i=0;i<e;i++){
int c,d;
cin>>c>>d;
H[c].push_back(d);
H[d].push_back(c);
}
int nodeVal[n+1]={0};
for(int i=1;i<=n;i++){
cin>>nodeVal[i]; //asssign value for each node either 5 or 0;
}
int used[n+1]={0}; //observed or unobserved neighbour
int level[n+1]={0}; //shortest distance from the source node
int sPath[n+1]={0}; //number of shortest path
int no5[n+1]={0}; //number of 5 till the each node
queue<int>Q;
int source=1;
used[source]=1;
level[source]=0;
sPath[source]=1;
if(nodeVal[1]==5){
no5[1]=1;
}
Q.push(source);
while(!Q.empty()){
int node=Q.front();
// cout<<node<<" ";
Q.pop();
for(auto c:H[node]){
if(nodeVal[c]==5){
no5[c]=1;
}
if(used[c]==0){
used[c]=1;
level[c]=level[node]+1;
Q.push(c);
sPath[c]=sPath[node];
no5[c]=no5[c]+no5[node];
}
else{
if(level[c]==level[node]+1){
sPath[c]=sPath[node]+sPath[c];
no5[c]=max(no5[c],no5[c]+no5[node]);
}
}
}
}
cout<<" shortest path along with maximum number of 5"<<endl;
for(int i=1;i<=n;i++){
cout<<i<<"-"<<level[i]<<" "<<no5[i]<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNpbj4+bjsKICAgIGludCBlOwogICAgY2luPj5lOwogICAgdmVjdG9yPGludD5IW24rMV07CiAgICBmb3IoaW50IGk9MDtpPGU7aSsrKXsKICAgIAlpbnQgYyxkOwogICAgCWNpbj4+Yz4+ZDsKICAgIAlIW2NdLnB1c2hfYmFjayhkKTsKICAgIAlIW2RdLnB1c2hfYmFjayhjKTsKICAgIH0KICAgIGludCBub2RlVmFsW24rMV09ezB9OwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgCWNpbj4+bm9kZVZhbFtpXTsgIC8vYXNzc2lnbiB2YWx1ZSBmb3IgZWFjaCBub2RlIGVpdGhlciA1IG9yIDA7CiAgICB9CiAgICBpbnQgdXNlZFtuKzFdPXswfTsgIC8vb2JzZXJ2ZWQgb3IgdW5vYnNlcnZlZCBuZWlnaGJvdXIKICAgIGludCBsZXZlbFtuKzFdPXswfTsgLy9zaG9ydGVzdCBkaXN0YW5jZSBmcm9tIHRoZSBzb3VyY2Ugbm9kZQogICAgaW50IHNQYXRoW24rMV09ezB9OyAvL251bWJlciBvZiBzaG9ydGVzdCBwYXRoCiAgICBpbnQgbm81W24rMV09ezB9OyAgIC8vbnVtYmVyIG9mIDUgdGlsbCB0aGUgZWFjaCBub2RlCiAgICBxdWV1ZTxpbnQ+UTsKICAgIGludCBzb3VyY2U9MTsKICAgIHVzZWRbc291cmNlXT0xOwogICAgbGV2ZWxbc291cmNlXT0wOwogICAgc1BhdGhbc291cmNlXT0xOwogICAgaWYobm9kZVZhbFsxXT09NSl7CiAgICAJbm81WzFdPTE7CiAgICB9CiAKIAogICAgUS5wdXNoKHNvdXJjZSk7CiAgICB3aGlsZSghUS5lbXB0eSgpKXsKICAgIAlpbnQgbm9kZT1RLmZyb250KCk7CiAgICAJLy8gY291dDw8bm9kZTw8IiAiOwogICAgCVEucG9wKCk7CiAgICAJZm9yKGF1dG8gYzpIW25vZGVdKXsKICAgIAkJaWYobm9kZVZhbFtjXT09NSl7CiAgICAJCQlubzVbY109MTsKICAgIAkJfQogICAgCQlpZih1c2VkW2NdPT0wKXsKICAgIAkJCXVzZWRbY109MTsKICAgIAkJCWxldmVsW2NdPWxldmVsW25vZGVdKzE7CiAgICAJCQlRLnB1c2goYyk7CiAgICAJCQlzUGF0aFtjXT1zUGF0aFtub2RlXTsKICAgIAkJCW5vNVtjXT1ubzVbY10rbm81W25vZGVdOwogICAgCQl9CiAgICAJCWVsc2V7CiAgICAJCQlpZihsZXZlbFtjXT09bGV2ZWxbbm9kZV0rMSl7CiAgICAJCQkJc1BhdGhbY109c1BhdGhbbm9kZV0rc1BhdGhbY107CiAgICAJCQkJbm81W2NdPW1heChubzVbY10sbm81W2NdK25vNVtub2RlXSk7CiAKIAogICAgCQkJfQogICAgCQl9CiAKICAgIAl9CiAKICAgIH0KICAgIGNvdXQ8PCIgc2hvcnRlc3QgcGF0aCBhbG9uZyB3aXRoIG1heGltdW0gbnVtYmVyIG9mIDUiPDxlbmRsOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgCWNvdXQ8PGk8PCItIjw8bGV2ZWxbaV08PCIgIjw8bm81W2ldPDxlbmRsOwogICAgfQoJcmV0dXJuIDA7Cn0=