#include <bits/stdc++.h>
using namespace std;
// ada N node
int N;
// ada M edge
int M;
// apakah node ke-i sudah terkunjungi?
// false jika belum dan true jika sudah
bool terkunjungi[ 1001 ] ;
// representasi graf menggunakan adjacency list
vector< int > adj[ 1001 ] ;
void bfs( int awal) {
// inisiasi sebuah queue kosong
queue< int > qu;
// masukkan node `awal` ke dalam queue
qu.push ( awal) ;
// tandai node `awal` telah dikunjungi
terkunjungi[ awal] = true ;
// selama masih ada node yang bisa dikunjungi
while ( ! qu.empty ( ) ) {
// ambil node sekarang yang berada di depan queue sebagai `now`
int now = qu.front ( ) ;
// buang node tersebut
qu.pop ( ) ;
// memasuki node `now`
cout << "Masuk ke node " << now << "\n " ;
// Periksa seluruh tetangga dari node `now`
for ( auto next: adj[ now] ) {
// Cek apakah node `next` sudah dikunjungi atau belum
if ( ! terkunjungi[ next] ) {
// masukkan node `next` ke dalam queue
qu.push ( next) ;
// tandai node `next` telah dikunjungi
terkunjungi[ next] = true ;
}
}
}
}
int main( ) {
cin >> N >> M;
for ( int i= 1 ; i<= M; i++ ) {
int U,V;
cin >> U >> V;
// menambahkan edge dari U ke V ke dalam adjacency list
adj[ U] .push_back ( V) ;
// menambahkan edge dari V ke U ke dalam adjacency list
adj[ V] .push_back ( U) ;
}
// Solusi menggunakan queue
// kunjungan awal ada di node 1
bfs( 1 ) ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBhZGEgTiBub2RlCmludCBOOwoKLy8gYWRhIE0gZWRnZQppbnQgTTsgCgovLyBhcGFrYWggbm9kZSBrZS1pIHN1ZGFoIHRlcmt1bmp1bmdpPwovLyBmYWxzZSBqaWthIGJlbHVtIGRhbiB0cnVlIGppa2Egc3VkYWggCmJvb2wgdGVya3VuanVuZ2lbMTAwMV07CgovLyByZXByZXNlbnRhc2kgZ3JhZiBtZW5nZ3VuYWthbiBhZGphY2VuY3kgbGlzdAp2ZWN0b3I8aW50PmFkalsxMDAxXTsgCgp2b2lkIGJmcyhpbnQgYXdhbCl7CgoJLy8gaW5pc2lhc2kgc2VidWFoIHF1ZXVlIGtvc29uZwoJcXVldWU8aW50PiBxdTsKCgkvLyBtYXN1a2thbiBub2RlIGBhd2FsYCBrZSBkYWxhbSBxdWV1ZQoJcXUucHVzaChhd2FsKTsKCgkvLyB0YW5kYWkgbm9kZSBgYXdhbGAgdGVsYWggZGlrdW5qdW5naQoJdGVya3VuanVuZ2lbYXdhbF09dHJ1ZTsKCgkvLyBzZWxhbWEgbWFzaWggYWRhIG5vZGUgeWFuZyBiaXNhIGRpa3VuanVuZ2kKCXdoaWxlKCFxdS5lbXB0eSgpKXsKCgkJLy8gYW1iaWwgbm9kZSBzZWthcmFuZyB5YW5nIGJlcmFkYSBkaSBkZXBhbiBxdWV1ZSBzZWJhZ2FpIGBub3dgCgkJaW50IG5vdyA9IHF1LmZyb250KCk7CgoJCS8vIGJ1YW5nIG5vZGUgdGVyc2VidXQKCQlxdS5wb3AoKTsKCgkJLy8gbWVtYXN1a2kgbm9kZSBgbm93YAoJCWNvdXQgPDwgIk1hc3VrIGtlIG5vZGUgIiA8PCBub3cgPDwgIlxuIjsKCgkJLy8gUGVyaWtzYSBzZWx1cnVoIHRldGFuZ2dhIGRhcmkgbm9kZSBgbm93YAoJCWZvcihhdXRvIG5leHQ6YWRqW25vd10peyAKCgkJCS8vIENlayBhcGFrYWggbm9kZSBgbmV4dGAgc3VkYWggZGlrdW5qdW5naSBhdGF1IGJlbHVtCgkJCWlmKCF0ZXJrdW5qdW5naVtuZXh0XSl7IAoKCQkJCS8vIG1hc3Vra2FuIG5vZGUgYG5leHRgIGtlIGRhbGFtIHF1ZXVlCgkJCQlxdS5wdXNoKG5leHQpOwoKCQkJCS8vIHRhbmRhaSBub2RlIGBuZXh0YCB0ZWxhaCBkaWt1bmp1bmdpCgkJCQl0ZXJrdW5qdW5naVtuZXh0XT10cnVlOwoJCQl9CgkJfQoJfQp9CmludCBtYWluKCl7CgljaW4gPj4gTiA+PiBNOwoJZm9yKGludCBpPTE7IGk8PU07IGkrKyl7CgkJaW50IFUsVjsKCQljaW4gPj4gVSA+PiBWOwoKCQkvLyBtZW5hbWJhaGthbiBlZGdlIGRhcmkgVSBrZSBWIGtlIGRhbGFtIGFkamFjZW5jeSBsaXN0CgkJYWRqW1VdLnB1c2hfYmFjayhWKTsKCgkJLy8gbWVuYW1iYWhrYW4gZWRnZSBkYXJpIFYga2UgVSBrZSBkYWxhbSBhZGphY2VuY3kgbGlzdAoJCWFkaltWXS5wdXNoX2JhY2soVSk7Cgl9CgkvLyBTb2x1c2kgbWVuZ2d1bmFrYW4gcXVldWUKCS8vIGt1bmp1bmdhbiBhd2FsIGFkYSBkaSBub2RlIDEKCWJmcygxKTsgCn0=