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: const int limit = 50;
  
  int n, m;
  int a[limit], b[limit];
  
  bool graph[limit][limit];
  bool visited[limit];
  
  void dfs(int v){
      visited[v] = true;
      for (int v2=0; v2<n;++v2){
          if (graph[v][v2]==false) continue;
          if (visited[v2]==true) continue;
          dfs(v2);
      }
  }
  
  int main(void){
      cin >> n >> m;
      for (int i=0; i<m; ++i){
          graph[a[i]][b[i]] = graph[b[i]][a[i]] = false;
          for (int j=0; j<n; ++j) visited[j] = false;
          dfs(0);
          bool bridge = false;
          for (j=0; j<n; ++j) if (visited[j] == false) bridge = true;
          if (bridge) ans += 1;
          graph[a[i]][b[i]] = graph[b[i]][a[i]] = true;
          }
      cout << ans << endl;
      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."}]