#include <bits/stdc++.h>
using namespace std;
int main( ) {
int n,e;
cin >> n >> e;
vector< vector< int >> g( n+ 5 ) ;
for ( int i = 0 ; i < e; i++ ) {
int a, b;
cin >> a >> b;
g[ a] .push_back ( b) ;
g[ b] .push_back ( a) ;
}
int source; cin >> source;
unordered_map< int , bool > visited;
queue< int > q;
unordered_map< int , int > level;
unordered_map< int , int > ways;
// vector<int> ways(n+5, 0);
q.push ( source) ;
visited[ source] = true ;
level[ source] = 0 ;
ways[ source] = 1 ;
while ( ! q.empty ( ) ) {
int parent = q.front ( ) ;
q.pop ( ) ;
for ( auto child : g[ parent] ) {
if ( visited[ child] == false ) {
q.push ( child) ;
visited[ child] = true ;
level[ child] = level[ parent] + 1 ;
ways[ child] = ways[ parent] ;
}
else if ( level[ child] == level[ parent] + 1 ) {
ways[ child] = ways[ child] + ways[ parent] ;
}
}
}
for ( int i = 1 ; i <= n; i++ ) {
if ( visited[ i] == true ) {
cout << "No ways shortest way to reach " << i << " : " << ways[ i] << endl;
}
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCQoJaW50IG4sZTsKCWNpbiA+PiBuID4+IGU7CgkKCXZlY3Rvcjx2ZWN0b3I8aW50Pj4gZyhuKzUpOwoJCglmb3IgKGludCBpID0gMDsgaSA8IGU7IGkrKyl7CgkJaW50IGEsIGI7CgkJY2luID4+IGEgPj4gYjsKCQlnW2FdLnB1c2hfYmFjayhiKTsKCQlnW2JdLnB1c2hfYmFjayhhKTsKCX0KCQoJaW50IHNvdXJjZTsgY2luID4+IHNvdXJjZTsKCQoJdW5vcmRlcmVkX21hcDxpbnQsIGJvb2w+IHZpc2l0ZWQ7CglxdWV1ZTxpbnQ+IHE7Cgl1bm9yZGVyZWRfbWFwPGludCwgaW50PiBsZXZlbDsKCXVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IHdheXM7CgkvLyB2ZWN0b3I8aW50PiB3YXlzKG4rNSwgMCk7CgkKCXEucHVzaChzb3VyY2UpOwoJdmlzaXRlZFtzb3VyY2VdID0gdHJ1ZTsKCWxldmVsW3NvdXJjZV0gPSAwOwoJd2F5c1tzb3VyY2VdID0gMTsKCQoJd2hpbGUoIXEuZW1wdHkoKSl7CgkJCgkJaW50IHBhcmVudCA9IHEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCQoJCWZvcihhdXRvIGNoaWxkIDogZ1twYXJlbnRdKXsKCQkJCgkJCWlmKHZpc2l0ZWRbY2hpbGRdID09IGZhbHNlKXsKCQkJCXEucHVzaChjaGlsZCk7CgkJCQl2aXNpdGVkW2NoaWxkXSA9IHRydWU7CgkJCQlsZXZlbFtjaGlsZF0gPSBsZXZlbFtwYXJlbnRdKzE7CgkJCQl3YXlzW2NoaWxkXSA9IHdheXNbcGFyZW50XTsKCQkJfQoJCQkKCQkJZWxzZSBpZihsZXZlbFtjaGlsZF0gPT0gbGV2ZWxbcGFyZW50XSArIDEpewoJCQkJd2F5c1tjaGlsZF0gPSB3YXlzW2NoaWxkXSArIHdheXNbcGFyZW50XTsKCQkJfQoJCQkKCQl9CgkJCgkJCgl9CgkKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJaWYodmlzaXRlZFtpXSA9PSB0cnVlKXsKCQkJY291dCA8PCAiTm8gd2F5cyBzaG9ydGVzdCB3YXkgdG8gcmVhY2ggIiA8PCBpIDw8ICIgOiAiIDw8d2F5c1tpXSA8PCBlbmRsOwoJCX0KCX0KCQoJCglyZXR1cm4gMDsKfQ==