#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 dfs( int awal) {
// inisiasi sebuah stack kosong
stack< int > st;
// masukkan node `awal` ke dalam stack
st.push ( awal) ;
// tandai node `awal` telah dikunjungi
terkunjungi[ awal] = true ;
// selama masih ada node yang bisa dikunjungi
while ( ! st.empty ( ) ) {
// ambil node sekarang yang berada di atas stack sebagai `now`
int now = st.top ( ) ;
// buang node tersebut
st.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 stack
st.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 stack
// kunjungan awal ada di node 1
dfs( 1 ) ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBhZGEgTiBub2RlCmludCBOOwoKLy8gYWRhIE0gZWRnZQppbnQgTTsgCgovLyBhcGFrYWggbm9kZSBrZS1pIHN1ZGFoIHRlcmt1bmp1bmdpPwovLyBmYWxzZSBqaWthIGJlbHVtIGRhbiB0cnVlIGppa2Egc3VkYWggCmJvb2wgdGVya3VuanVuZ2lbMTAwMV07CgovLyByZXByZXNlbnRhc2kgZ3JhZiBtZW5nZ3VuYWthbiBhZGphY2VuY3kgbGlzdAp2ZWN0b3I8aW50PmFkalsxMDAxXTsgCgp2b2lkIGRmcyhpbnQgYXdhbCl7CgoJLy8gaW5pc2lhc2kgc2VidWFoIHN0YWNrIGtvc29uZwoJc3RhY2s8aW50PiBzdDsKCgkvLyBtYXN1a2thbiBub2RlIGBhd2FsYCBrZSBkYWxhbSBzdGFjawoJc3QucHVzaChhd2FsKTsKCgkvLyB0YW5kYWkgbm9kZSBgYXdhbGAgdGVsYWggZGlrdW5qdW5naQoJdGVya3VuanVuZ2lbYXdhbF09dHJ1ZTsKCgkvLyBzZWxhbWEgbWFzaWggYWRhIG5vZGUgeWFuZyBiaXNhIGRpa3VuanVuZ2kKCXdoaWxlKCFzdC5lbXB0eSgpKXsKCgkJLy8gYW1iaWwgbm9kZSBzZWthcmFuZyB5YW5nIGJlcmFkYSBkaSBhdGFzIHN0YWNrIHNlYmFnYWkgYG5vd2AKCQlpbnQgbm93ID0gc3QudG9wKCk7CgoJCS8vIGJ1YW5nIG5vZGUgdGVyc2VidXQKCQlzdC5wb3AoKTsKCgkJLy8gbWVtYXN1a2kgbm9kZSBgbm93YAoJCWNvdXQgPDwgIk1hc3VrIGtlIG5vZGUgIiA8PCBub3cgPDwgIlxuIjsKCgkJLy8gUGVyaWtzYSBzZWx1cnVoIHRldGFuZ2dhIGRhcmkgbm9kZSBgbm93YAoJCWZvcihhdXRvIG5leHQ6YWRqW25vd10peyAKCgkJCS8vIENlayBhcGFrYWggbm9kZSBgbmV4dGAgc3VkYWggZGlrdW5qdW5naSBhdGF1IGJlbHVtCgkJCWlmKCF0ZXJrdW5qdW5naVtuZXh0XSl7IAoKCQkJCS8vIG1hc3Vra2FuIG5vZGUgYG5leHRgIGtlIGRhbGFtIHN0YWNrCgkJCQlzdC5wdXNoKG5leHQpOwoKCQkJCS8vIHRhbmRhaSBub2RlIGBuZXh0YCB0ZWxhaCBkaWt1bmp1bmdpCgkJCQl0ZXJrdW5qdW5naVtuZXh0XT10cnVlOwoJCQl9CgkJfQoJfQp9CmludCBtYWluKCl7CgljaW4gPj4gTiA+PiBNOwoJZm9yKGludCBpPTE7IGk8PU07IGkrKyl7CgkJaW50IFUsVjsKCQljaW4gPj4gVSA+PiBWOwoKCQkvLyBtZW5hbWJhaGthbiBlZGdlIGRhcmkgVSBrZSBWIGtlIGRhbGFtIGFkamFjZW5jeSBsaXN0CgkJYWRqW1VdLnB1c2hfYmFjayhWKTsKCgkJLy8gbWVuYW1iYWhrYW4gZWRnZSBkYXJpIFYga2UgVSBrZSBkYWxhbSBhZGphY2VuY3kgbGlzdAoJCWFkaltWXS5wdXNoX2JhY2soVSk7Cgl9CgkvLyBTb2x1c2kgbWVuZ2d1bmFrYW4gc3RhY2sKCS8vIGt1bmp1bmdhbiBhd2FsIGFkYSBkaSBub2RlIDEKCWRmcygxKTsgCn0=