import java.util.* ;
public class Main {
public static void main
( String [ ] args
) { Scanner sc
= new Scanner
( System .
in ) ;
int n = sc.nextInt ( ) ;
int m = sc.nextInt ( ) ;
List
< Integer
> [ ] G
= new List [ n
+ 1 ] ; for ( int i = 0 ; i <= n; i++ ) {
G[ i] = new ArrayList<> ( ) ;
}
for ( int i = 0 ; i < m; i++ ) {
int u = sc.nextInt ( ) ;
int v = sc.nextInt ( ) ;
G[ u] .add ( v) ;
G[ v] .add ( u) ;
}
int source = 1 ;
Queue< Integer> q = new LinkedList<> ( ) ;
q.add ( source) ;
int [ ] used = new int [ n + 1 ] ;
used[ source] = 1 ;
int [ ] lvl = new int [ n + 1 ] ;
lvl[ source] = 0 ;
int [ ] ways = new int [ n + 1 ] ;
ways[ source] = 1 ;
while ( ! q.isEmpty ( ) ) {
int v = q.poll ( ) ;
for ( int u : G[ v] ) {
if ( used[ u] == 0 ) {
q.add ( u) ;
used[ u] = 1 ;
lvl[ u] = lvl[ v] + 1 ;
ways[ u] = ways[ v] ;
} else if ( lvl[ v] + 1 == lvl[ u] ) {
ways[ u] += ways[ v] ;
}
}
}
for ( int i = 1 ; i <= n; i++ ) {
System .
out .
println ( "Number of shortest paths from source-node " + source
+ " to node " + i
+ " = " + ways
[ i
] ) ; }
sc.close ( ) ;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFNjYW5uZXIgc2MgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwoKICAgICAgICBpbnQgbiA9IHNjLm5leHRJbnQoKTsKICAgICAgICBpbnQgbSA9IHNjLm5leHRJbnQoKTsKCiAgICAgICAgTGlzdDxJbnRlZ2VyPltdIEcgPSBuZXcgTGlzdFtuICsgMV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIEdbaV0gPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgICAgIGludCB1ID0gc2MubmV4dEludCgpOwogICAgICAgICAgICBpbnQgdiA9IHNjLm5leHRJbnQoKTsKICAgICAgICAgICAgR1t1XS5hZGQodik7CiAgICAgICAgICAgIEdbdl0uYWRkKHUpOwogICAgICAgIH0KCiAgICAgICAgaW50IHNvdXJjZSA9IDE7CiAgICAgICAgUXVldWU8SW50ZWdlcj4gcSA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKICAgICAgICBxLmFkZChzb3VyY2UpOwoKICAgICAgICBpbnRbXSB1c2VkID0gbmV3IGludFtuICsgMV07CiAgICAgICAgdXNlZFtzb3VyY2VdID0gMTsKCiAgICAgICAgaW50W10gbHZsID0gbmV3IGludFtuICsgMV07CiAgICAgICAgbHZsW3NvdXJjZV0gPSAwOwoKICAgICAgICBpbnRbXSB3YXlzID0gbmV3IGludFtuICsgMV07CiAgICAgICAgd2F5c1tzb3VyY2VdID0gMTsKCiAgICAgICAgd2hpbGUgKCFxLmlzRW1wdHkoKSkgewogICAgICAgICAgICBpbnQgdiA9IHEucG9sbCgpOwoKICAgICAgICAgICAgZm9yIChpbnQgdSA6IEdbdl0pIHsKICAgICAgICAgICAgICAgIGlmICh1c2VkW3VdID09IDApIHsKICAgICAgICAgICAgICAgICAgICBxLmFkZCh1KTsKICAgICAgICAgICAgICAgICAgICB1c2VkW3VdID0gMTsKICAgICAgICAgICAgICAgICAgICBsdmxbdV0gPSBsdmxbdl0gKyAxOwogICAgICAgICAgICAgICAgICAgIHdheXNbdV0gPSB3YXlzW3ZdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsdmxbdl0gKyAxID09IGx2bFt1XSkgewogICAgICAgICAgICAgICAgICAgIHdheXNbdV0gKz0gd2F5c1t2XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIG9mIHNob3J0ZXN0IHBhdGhzIGZyb20gc291cmNlLW5vZGUgIiArIHNvdXJjZSArICIgdG8gbm9kZSAiICsgaSArICIgPSAiICsgd2F5c1tpXSk7CiAgICAgICAgfQoKICAgICAgICBzYy5jbG9zZSgpOwogICAgfQp9Cg==