int dfn[MAXN],low[MAXN],cnt; void tarjan(int x,int edg) {low[x]=dfn[x]=++cnt;for(int i=f(x);i;i=n(i))if(!dfn[v(i)]){tarjan(v(i),i);low[x]=min(low[x],low[v(i)]);if(low[v(i)]>dfn[x])isbridge[i]=isbridge[i^1]=1;}else if(i!=(edg^1))low[x]=min(low[x],dfn(v(i))); }