output_description: Print the number of the edges that are bridges among the M edges.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M  
      a_1 b_1  
      a_2 b_2
      :  
      a_M b_M
attempt: #include<bits/stdc++.h>
  typedef long long int ll;
  typedef unsigned long long int ull;
  #define BIG_NUM 2000000000
  #define HUGE_NUM 99999999999999999
  #define MOD 1000000007
  #define EPS 0.000000001
  using namespace std;
  
  
  struct Edge{
  	int from,to;
  };
  
  int V,E;
  int boss[55],height[55];
  Edge edge[55];
  
  int get_boss(int id){
  	if(boss[id] == id)return id; //自分が代表なら、自分の値を返す
  	else{
  		return boss[id] = get_boss(boss[id]); //代表でないなら、自分が所属する組織の代表を返しつつ、経路圧縮
  	}
  }
  
  int is_same(int x,int y){
  	return get_boss(x) == get_boss(y);
  }
  
  void unite(int x,int y){
  	int boss_x = get_boss(x);
  	int boss_y = get_boss(y);
  
  	//既に同じグループなら何もしない
  	if(boss_x == boss_y)return;
  
  	//高さが高い方に吸収する
  	if(height[x] > height[y]){
  
  		boss[boss_y] = boss_x;
  
  	}else if(height[x] < height[y]){
  
  		boss[boss_x] = boss_y;
  
  	}else{ //height[x] == height[y]
  
  		boss[boss_y] = boss_x;
  		height[x]++;
  	}
  }
  
  void init(){
  
  	for(int i = 0; i < V; i++){
  		boss[i] = i;
  		height[i] = 0;
  	}
  }
  
  int main(){
  
  	scanf("%d %d",&V,&E);
  
  	for(int i = 0; i < E; i++){
  
  		scanf("%d %d",&edge[i].from,&edge[i].to);
  		edge[i].from--;
  		edge[i].to--;
  	}
  
  	int ans = 0,num_group;
  
  	for(int i = 0; i < E; i++){
  
  		init();
  
  		for(int k = 0; k < E; k++){
  			if(k == i)continue;
  
  			unite(edge[k].from,edge[k].to);
  		}
  
  		num_group = 0;
  
  		for(int k = 0; k < V; k++){
  			if(k == get_boss(k)){
  				num_group++;
  			}
  		}
  		if(num_group != 1)ans++;
  	}
  
  	printf("%d\n",ans);
  
  	return 0;
  }
  
problem_description: Statement
  
  You are given an undirected connected graph with N vertices and M edges that
  does not contain self-loops and double edges.  
  The i-th edge (1 \leq i \leq M) connects Vertex a_i and Vertex b_i.
  
  An edge whose removal disconnects the graph is called a _bridge_.  
  Find the number of the edges that are bridges among the M edges.
samples: [{"input": "7 7\n    1 3\n    2 7\n    3 4\n    4 5\n    4 6\n    5 6\n    6 7", "output": "4\n    \n\nThe figure below shows the given graph:\n\n![570677a9809fd7a5b63bff11e5d9bf79.png](https://img.atcoder.jp/abc075/570677a9809fd7a5b63bff11e5d9bf79.png)\n\nThe edges shown in red are bridges. There are four of them.\n\n* * *"}, {"input": "3 3\n    1 2\n    1 3\n    2 3", "output": "0\n    \n\nIt is possible that there is no bridge.\n\n* * *"}, {"input": "6 5\n    1 2\n    2 3\n    3 4\n    4 5\n    5 6", "output": "5\n    \n\nIt is possible that every edge is a bridge."}]