#include < iostream >
using   namespace  std;
int  bridge[N][ 2 ];
int  col[N],low[N],dep[N],iscut[N],nb;
int  dfs( int  u, int  fa, int  depth)
{
    col[u]
= 1 ;
    dep[u]
= low[u] = depth;
    
int  tol = 0 ;
    
int  tofa = 0 ; // 判断u,v之间是否有两条以上边
     int  i,v;
    
for (i = 0 ;i < list[u].size();i ++ )
    {
        v
= list[u][i];
        
if (col[v] == 0 )
        {
            tol
++ ;
            dfs(v,u,depth
+ 1 );
            low[u]
= min(low[u],low[v]);
            
/* 求割点
            if(u==root&&col>1||x!=root&&low[v]>=dep[u])
                  iscut[u]=1;
            
*/
            
/* 求桥
            if(low[v]>dep[u])
            {
                bridge[++nb][0]=u;
                bridge[nb][1]=v;
            }
            
*/
        }
        
else
        {
            
if (v != fa || tofa)
                low[u]
= min(low[u],dep[v]);
            
else
                tofa
= 1 ;
        }
    }
    
return   0 ;
}
int  main()
{
    
    root
= 1 ;
    dfs(root,
- 1 , 1 );
    
}