struct Edge { int src, dest; }; class Graph { public: vector> adjList; Graph(vector const &edges, int n) { adjList.resize(n); for (auto &edge : edges) { adjList[edge.src].push_back(edge.dest); adjList[edge.dest].push_back(edge.src); } } }; void DFS(Graph const &graph, int v, vector &discovered) { discovered[v] = true; cout << v << " "; for (int u : graph.adjList[v]) { if (!discovered[u]) { DFS(graph, u, discovered); } } }