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 <iostream>
  #include <string>
  #include <vector>
  #include <math.h>
  #include <stdio.h>
  #include <algorithm>
  #include <utility>
  #include <functional>
  #include <map>
  #include <queue>
  #include <list>
  #define rep(i,n) for(int i=0;i<(n);i++)
  #define REP(i,a,b) for(int i=int(a);i<int(b);++i)
  #define crep(i) for(char i='a';i<='z';i++)
  #define psortsecond(A,N) sort(A,A+N,[](const pii &a, const pii &b){return a.second<b.second;});
  #define psortfirst(A,N) sort(A,A+N,[](const pii &a, const pii &b){return a.first<b.first;});
  #define ALL(x) (x).begin(),(x).end()
  int ctoi(const char c){
    if('0' <= c && c <= '9') return (c-'0');
    return -1;
  }
  using namespace std;
  using pii  = pair<int,int>;
  long long gcd(long long a, long long b){return (b == 0 ? a : gcd(b, a%b));}
  long long lcm(long long a, long long b){return a*b/gcd(a,b);}
  typedef long long ll;
  #define MOD 1000000007
  #define EPS 10e-8
  
  ll N,M,A[3000],B[3000],C=0;
  vector<vector<ll>> TEN(57);
  ll touri[57];
  
  void kentou(ll a,ll b,ll t){
    t++;
    touri[a]=1;
    if(a==b){
      C++;
      return;
    }
    rep(i,TEN[a].size()){
      if(touri[TEN[a][i]]==0 && (t!=1 || TEN[a][i]!=b)){
        kentou(TEN[a][i],b,t);
      }
    }
  }
  
  int main(){
    cin >> N >> M;
    rep(i,M){
      cin >> A[i] >> B[i];
      TEN[A[i]].push_back(B[i]);
      TEN[B[i]].push_back(A[i]);
    }
    rep(i,M){
      kentou(A[i],B[i],0);
      rep(j,57){
        touri[j]=0;
      }
    }
    cout << M-C <<  endl;
  }
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."}]