void dfs(int u,int fa){
if(dfn[u]){return;}
dfn[u]=low[u]=++cnt;int son=0;
for(int to: G[u]){
if(to==fa){continue;}
if(dfn[to]){low[u]=min(low[u],dfn[to]);}
else{
++son;
dfs(to,u);
low[u]=min(low[u],low[to]);
if(low[to]>=dfn[u]){cut.insert(u);}
}
}
if(fa==0 && son<2){cut.erase(u);}
}