#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin>>n>>m;
vector<int> adjList[n];
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
adjList[x].push_back(y);
adjList[y].push_back(x);
}
int source=1;
vector<int> visited(n, 0);
vector<int> level(n, 0);
vector<int> ways(n, 0);
queue<int> q;
q.push(source);
visited[source]=1;
ways[source]=1;
while(!q.empty()){
int node=q.front();
q.pop();
visited[node]=1;
for(auto adjNode : adjList[node]){
if(!visited[adjNode]){
//first time visit
visited[adjNode]=1;
level[adjNode]=level[node]+1;
ways[adjNode]=ways[node];
q.push(adjNode);
}
else{
if(level[adjNode]==level[node]+1){
//node adjNode is on shortest path
ways[adjNode]=ways[adjNode]+ways[node];
}
else{
//node adjNode is not on the shortest path
//no need to count
}
}
}
}
for(int i=0;i<ways.size();i++){
cout<<"node "<<i<<" : "<<ways[i];
cout<<"\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWludCBuLCBtOwoJY2luPj5uPj5tOwoJdmVjdG9yPGludD4gYWRqTGlzdFtuXTsKCWZvcihpbnQgaT0wO2k8bTtpKyspewoJCWludCB4LHk7CgkJY2luPj54Pj55OwoJCWFkakxpc3RbeF0ucHVzaF9iYWNrKHkpOwoJCWFkakxpc3RbeV0ucHVzaF9iYWNrKHgpOwoJfQoJCglpbnQgc291cmNlPTE7Cgl2ZWN0b3I8aW50PiB2aXNpdGVkKG4sIDApOwoJdmVjdG9yPGludD4gbGV2ZWwobiwgMCk7Cgl2ZWN0b3I8aW50PiB3YXlzKG4sIDApOwoJcXVldWU8aW50PiBxOwoJcS5wdXNoKHNvdXJjZSk7Cgl2aXNpdGVkW3NvdXJjZV09MTsKCXdheXNbc291cmNlXT0xOwoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJaW50IG5vZGU9cS5mcm9udCgpOwoJCXEucG9wKCk7CgkJdmlzaXRlZFtub2RlXT0xOwoJCWZvcihhdXRvIGFkak5vZGUgOiBhZGpMaXN0W25vZGVdKXsKCQkJaWYoIXZpc2l0ZWRbYWRqTm9kZV0pewoJCQkJLy9maXJzdCB0aW1lIHZpc2l0CgkJCQl2aXNpdGVkW2Fkak5vZGVdPTE7CgkJCQlsZXZlbFthZGpOb2RlXT1sZXZlbFtub2RlXSsxOwoJCQkJd2F5c1thZGpOb2RlXT13YXlzW25vZGVdOwoJCQkJcS5wdXNoKGFkak5vZGUpOwoJCQl9CgkJCWVsc2V7CgkJCQlpZihsZXZlbFthZGpOb2RlXT09bGV2ZWxbbm9kZV0rMSl7CgkJCQkJLy9ub2RlIGFkak5vZGUgaXMgb24gc2hvcnRlc3QgcGF0aAoJCQkJCXdheXNbYWRqTm9kZV09d2F5c1thZGpOb2RlXSt3YXlzW25vZGVdOwoJCQkJfQoJCQkJZWxzZXsKCQkJCQkvL25vZGUgYWRqTm9kZSBpcyBub3Qgb24gdGhlIHNob3J0ZXN0IHBhdGgKCQkJCQkvL25vIG5lZWQgdG8gY291bnQKCQkJCX0KCQkJfQoJCX0KCX0KCWZvcihpbnQgaT0wO2k8d2F5cy5zaXplKCk7aSsrKXsKCQljb3V0PDwibm9kZSAiPDxpPDwiIDogIjw8d2F5c1tpXTsKCQljb3V0PDwiXG4iOwoJfQoJcmV0dXJuIDA7Cn0K