#include <bits/stdc++.h>
using namespace std;
class Solution {
private:
void dfs(int node, vector<int> adj[], int vis[], vector<int> &ls) {
vis[node] = 1;
// traverse all its neighbours
for(auto it : adj[node]) {
// if the neighbour is not visited
if(!vis[it]) {
dfs(it, adj, vis, ls);
}
}
ls.push_back(node);
}
void dfs_iter(int node, vector<int> adj[], int vis[], vector<int> &ls) {
stack<int> s;
s.push(node);
vis[node]=1;
while(!s.empty()){
int top = s.top();
if(vis[top]){
ls.push_back(top);
s.pop();
}
for(auto x: adj[top]){
if(!vis[x]){
vis[x]=1;
s.push(x);
}
}
}
}
public:
// Function to return a list containing the DFS traversal of the graph.
vector<int> dfsOfGraph(int V, vector<int> adj[]) {
int vis[V] = {0};
int start = 0;
// create a list to store dfs
vector<int> ls;
// call dfs for starting node
// dfs(start, adj, vis, ls);
dfs_iter(start, adj, vis, ls);
return ls;
}
};
void addEdge(vector <int> adj[], int u, int v) {
adj[u].push_back(v);
adj[v].push_back(u);
}
void printAns(vector <int> &ans) {
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << " ";
}
}
int main()
{
vector <int> adj[7];
addEdge(adj, 0, 2);
addEdge(adj, 2, 4);
addEdge(adj, 0, 1);
addEdge(adj, 0, 3);
addEdge(adj, 5, 3);
addEdge(adj, 1, 6);
Solution obj;
vector <int> ans = obj.dfsOfGraph(7, adj);
printAns(ans);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBTb2x1dGlvbiB7CiAgcHJpdmF0ZTogCiAgICB2b2lkIGRmcyhpbnQgbm9kZSwgdmVjdG9yPGludD4gYWRqW10sIGludCB2aXNbXSwgdmVjdG9yPGludD4gJmxzKSB7CiAgICAgICAgdmlzW25vZGVdID0gMTsgCiAgICAgICAgLy8gdHJhdmVyc2UgYWxsIGl0cyBuZWlnaGJvdXJzCiAgICAgICAgZm9yKGF1dG8gaXQgOiBhZGpbbm9kZV0pIHsKICAgICAgICAgICAgLy8gaWYgdGhlIG5laWdoYm91ciBpcyBub3QgdmlzaXRlZAogICAgICAgICAgICBpZighdmlzW2l0XSkgewogICAgICAgICAgICAgICAgZGZzKGl0LCBhZGosIHZpcywgbHMpOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBscy5wdXNoX2JhY2sobm9kZSk7IAogICAgfQogICAgCiAgICB2b2lkIGRmc19pdGVyKGludCBub2RlLCB2ZWN0b3I8aW50PiBhZGpbXSwgaW50IHZpc1tdLCB2ZWN0b3I8aW50PiAmbHMpIHsKICAgICAgICAgc3RhY2s8aW50PiBzOwogICAgICAgICBzLnB1c2gobm9kZSk7CiAgICAgICAgIHZpc1tub2RlXT0xOwogICAgICAgICB3aGlsZSghcy5lbXB0eSgpKXsKICAgICAgICAgCWludCB0b3AgPSBzLnRvcCgpOwogICAgICAgIAlpZih2aXNbdG9wXSl7CiAgICAgICAgCQlscy5wdXNoX2JhY2sodG9wKTsKICAgICAgICAJCXMucG9wKCk7CiAgICAgICAgCX0KICAgICAgICAgCWZvcihhdXRvIHg6IGFkalt0b3BdKXsKICAgICAgICAgCQlpZighdmlzW3hdKXsKICAgICAgICAgCQkJdmlzW3hdPTE7CiAgICAgICAgIAkJCXMucHVzaCh4KTsKICAgICAgICAgCQl9CiAgICAgICAgIAl9CiAgICAgICAgIAkKICAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIAogICAgCiAgcHVibGljOgogICAgLy8gRnVuY3Rpb24gdG8gcmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBERlMgdHJhdmVyc2FsIG9mIHRoZSBncmFwaC4KICAgIHZlY3RvcjxpbnQ+IGRmc09mR3JhcGgoaW50IFYsIHZlY3RvcjxpbnQ+IGFkaltdKSB7CiAgICAgICAgaW50IHZpc1tWXSA9IHswfTsgCiAgICAgICAgaW50IHN0YXJ0ID0gMDsKICAgICAgICAvLyBjcmVhdGUgYSBsaXN0IHRvIHN0b3JlIGRmcwogICAgICAgIHZlY3RvcjxpbnQ+IGxzOyAKICAgICAgICAvLyBjYWxsIGRmcyBmb3Igc3RhcnRpbmcgbm9kZQogICAgICAgIC8vIGRmcyhzdGFydCwgYWRqLCB2aXMsIGxzKTsgCiAgICAgICAgZGZzX2l0ZXIoc3RhcnQsIGFkaiwgdmlzLCBscyk7IAogICAgICAgIHJldHVybiBsczsgCiAgICB9Cn07Cgp2b2lkIGFkZEVkZ2UodmVjdG9yIDxpbnQ+IGFkaltdLCBpbnQgdSwgaW50IHYpIHsKICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwp9Cgp2b2lkIHByaW50QW5zKHZlY3RvciA8aW50PiAmYW5zKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFucy5zaXplKCk7IGkrKykgewogICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8ICIgIjsKICAgIH0KfQoKaW50IG1haW4oKSAKewogICAgdmVjdG9yIDxpbnQ+IGFkals3XTsKICAgIAogICAgYWRkRWRnZShhZGosIDAsIDIpOwogICAgYWRkRWRnZShhZGosIDIsIDQpOwogICAgYWRkRWRnZShhZGosIDAsIDEpOwogICAgYWRkRWRnZShhZGosIDAsIDMpOwogICAgYWRkRWRnZShhZGosIDUsIDMpOwogICAgYWRkRWRnZShhZGosIDEsIDYpOwoKICAgIFNvbHV0aW9uIG9iajsKICAgIHZlY3RvciA8aW50PiBhbnMgPSBvYmouZGZzT2ZHcmFwaCg3LCBhZGopOwogICAgcHJpbnRBbnMoYW5zKTsKCiAgICByZXR1cm4gMDsKfQ==