#include <bits/stdc++.h>
using namespace std;
typedef long long int ll ;
int main( ) {
int n ;
cout << "Number of nodes (vertices) in the graph: " ;
cin >> n ;
int m ;
cout << "Number of edges in the graph: " ;
cin >> m ;
//array of vectors to store adjacency list
vector < int > G[ n+ 5 ] ;
int i = 1 ;
while ( i<= m) {
int x,y;
cout << "Take the graph node and edges as input: " << endl;
cin >> x>> y;
//Graph is undirected
G[ x] .push_back ( y) ;
G[ y] .push_back ( x) ;
i++ ;
}
//Start BFS from node 1
int source = 1 ;
//Visited array (0 = not visited, 1 = visited)
int visited[ n+ 5 ] = { 0 } ;
//Level array (stores shortest distance from source
int level[ n+ 5 ] = { 0 } ;
//created a queue for bfs
queue < int > q ;
q.push ( source) ;
visited[ source] = 1 ;
level[ source] = 0 ;
while ( ! q.empty ( ) ) {
int removed = q.front ( ) ;
cout << removed<< " " ;
cout << level[ removed] << "\n " ;
q.pop ( ) ;
for ( auto u : G[ removed] ) {
if ( visited[ u] == 0 ) {
q.push ( u) ;
visited[ u] = 1 ;
level[ u] = level[ removed] + 1 ;
}
}
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsIDsgCgppbnQgbWFpbigpIHsKICAgIAogICAgCiAgICBpbnQgbiA7CiAgICBjb3V0PDwiTnVtYmVyIG9mIG5vZGVzICh2ZXJ0aWNlcykgaW4gdGhlIGdyYXBoOiAiOwogICAgY2luPj4gbiA7IAogICAgaW50IG0gOwogICAgY291dDw8Ik51bWJlciBvZiBlZGdlcyBpbiB0aGUgZ3JhcGg6ICI7CiAgICBjaW4+PiBtIDsKICAgIAogICAgCiAgICAvL2FycmF5IG9mIHZlY3RvcnMgdG8gc3RvcmUgYWRqYWNlbmN5IGxpc3QKICAgIHZlY3RvciA8aW50PiBHW24rNV0gOyAKICAgIAogICAgaW50IGkgPSAxIDsgCiAgICB3aGlsZShpPD1tKXsKICAgICAgICAKICAgICAgICBpbnQgeCx5OwogICAgICAgIGNvdXQ8PCJUYWtlIHRoZSBncmFwaCBub2RlIGFuZCBlZGdlcyBhcyBpbnB1dDogIjw8ZW5kbDsKICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgCiAgICAgICAgLy9HcmFwaCBpcyB1bmRpcmVjdGVkCiAgICAgICAgR1t4XS5wdXNoX2JhY2soeSk7CiAgICAgICAgR1t5XS5wdXNoX2JhY2soeCk7CiAgICAgICAgCiAgICAgICAgaSsrOwogICAgfQogICAgCiAgICAvL1N0YXJ0IEJGUyBmcm9tIG5vZGUgMQogICAgaW50IHNvdXJjZSA9IDEgOyAKICAgIC8vVmlzaXRlZCBhcnJheSAoMCA9IG5vdCB2aXNpdGVkLCAxID0gdmlzaXRlZCkKICAgIGludCB2aXNpdGVkW24rNV0gPSB7MH07CiAgICAvL0xldmVsIGFycmF5IChzdG9yZXMgc2hvcnRlc3QgZGlzdGFuY2UgZnJvbSBzb3VyY2UKICAgIAogICAgaW50IGxldmVsW24rNV0gPSB7MH0gOyAKICAgIC8vY3JlYXRlZCBhIHF1ZXVlIGZvciBiZnMKICAgIHF1ZXVlIDxpbnQ+IHEgOyAKICAgIAogICAgcS5wdXNoKHNvdXJjZSk7CiAgICB2aXNpdGVkW3NvdXJjZV0gPSAxIDsgCiAgICBsZXZlbFtzb3VyY2VdID0gMCA7IAogICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgIAogICAgICAgIGludCByZW1vdmVkID0gcS5mcm9udCgpOwogICAgICAgIAogICAgICAgIGNvdXQ8PHJlbW92ZWQ8PCIgIjsKICAgICAgICBjb3V0PDxsZXZlbFtyZW1vdmVkXTw8IlxuIjsgCiAgICAgICAgcS5wb3AoKTsKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICBmb3IoYXV0byB1IDogR1tyZW1vdmVkXSl7CiAgICAgICAgICAgIGlmKHZpc2l0ZWRbdV09PTApIHsgCiAgICAgICAgICAgIHEucHVzaCh1KTsgCiAgICAgICAgICAgIHZpc2l0ZWRbdV0gPSAxOwogICAgICAgICAgICBsZXZlbFt1XSA9IGxldmVsW3JlbW92ZWRdICsgMSA7IAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICB9CiAgICAKICAgIHJldHVybiAwIDsgCn0=