5
void dfs(vector<int> adj[], int node, int parent, vector<int> &tin, vector<int> &low,6
vector<int> &vis, vector<vector<int>> &ans) {8
tin[node] = low[node] = timer;10
for (auto it : adj[node]) {11
if (it == parent) continue;13
dfs(adj, it, node, tin, low, vis, ans);14
low[node] = min(low[node], low[it]);15
if (tin[node] < low[it]) ans.push_back({node, it});17
low[node] = min(low[node], low[it]);21
vector<vector<int>> criticalConnections(int n, vector<vector<int>> &con) {23
for (int i = 0; i < con.size(); i++) {24
adj[con[i][0]].push_back(con[i][1]);25
adj[con[i][1]].push_back(con[i][0]);27
vector<vector<int>> ans;28
vector<int> vis(n, 0), tin(n, 0), low(n, 0);29
dfs(adj, 0, -1, tin, low, vis, ans);