#include<iostream>
#include<map>
#include<list>
#include<queue>
using namespace std;
template<typename T>
class graph{
map<T,list<T> >l;
public:
void addEdge(int x, int y){
l[x].push_back(y);
l[y].push_back(x);
}
void bfs(T src){
queue<T>q;
map<int, bool>visited;
q.push(src);
visited[src] = true;
while(!q.empty()){
T node = q.front();
q.pop();
cout<<node<<" ";
for(int nbr: l[node]){
if(!visited[nbr]){
q.push(nbr);
//mark tht nbr as visited
visited[nbr] = true;
}
}
}
}
};
int main()
{
graph<int>g;
g.addEdge(0,1);
g.addEdge(1,2);
g.addEdge(2,3);
g.addEdge(3,4);
g.addEdge(4,5);
g.bfs(0);
return 0;}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8bGlzdD4KI2luY2x1ZGU8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBncmFwaHsKbWFwPFQsbGlzdDxUPiA+bDsKcHVibGljOgogICAgdm9pZCBhZGRFZGdlKGludCB4LCBpbnQgeSl7CiAgICBsW3hdLnB1c2hfYmFjayh5KTsKICAgIGxbeV0ucHVzaF9iYWNrKHgpOwogICAgfQoKICAgIHZvaWQgYmZzKFQgc3JjKXsKICAgICAgICBxdWV1ZTxUPnE7CiAgICAgICAgbWFwPGludCwgYm9vbD52aXNpdGVkOwoKICAgICAgICBxLnB1c2goc3JjKTsKICAgICAgICB2aXNpdGVkW3NyY10gPSB0cnVlOwoKICAgICAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICAgICAgVCBub2RlID0gcS5mcm9udCgpOwogICAgICAgICAgICBxLnBvcCgpOwogICAgICAgICAgICBjb3V0PDxub2RlPDwiICI7CiAgICAgICAgICAgIGZvcihpbnQgbmJyOiBsW25vZGVdKXsKICAgICAgICAgICAgICAgIGlmKCF2aXNpdGVkW25icl0pewogICAgICAgICAgICAgICAgICAgIHEucHVzaChuYnIpOwogICAgICAgICAgICAgICAgICAgIC8vbWFyayB0aHQgbmJyIGFzIHZpc2l0ZWQKICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW25icl0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKfTsKaW50IG1haW4oKQp7CmdyYXBoPGludD5nOwpnLmFkZEVkZ2UoMCwxKTsKZy5hZGRFZGdlKDEsMik7CmcuYWRkRWRnZSgyLDMpOwpnLmFkZEVkZ2UoMyw0KTsKZy5hZGRFZGdlKDQsNSk7CmcuYmZzKDApOwpyZXR1cm4gMDt9Cg==