#pragma once
#include <bits/stdc++.h>
usingnamespacestd;structLowLink{intN;vector<vector<int>>G;vector<int>low,ord,articulation;vector<pair<int,int>>bridge;LowLink(intN,vector<vector<int>>&G):N(N),G(G){low.assign(N,-1);ord.assign(N,-1);}voiddfs(intv,inttime,intp=-1){ord[v]=low[v]=time;++time;boolisArticulation=false;intcnt=0;for(inte:G[v]){if(low[e]<0){++cnt;dfs(e,time,v);low[v]=min(low[v],low[e]);if(p!=-1&&ord[v]<=low[e])isArticulation=true;if(ord[v]<low[e])bridge.push_back({v,e});}elseif(p!=e){low[v]=min(low[v],ord[e]);}}if(p==-1&&cnt>=2)isArticulation=true;if(isArticulation)articulation.push_back(v);}voidbuild(){dfs(0,0);}};