题目
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N=50001;
int n , m , u , v , low[N] , dfn[N] , tim=0 , fa[N] , ant=0;
vector<int> mp[N];
void tarjan(int u) {
ant=0;
low[u]=dfn[u]=++tim;
for(auto v:mp[u]) {
if(!dfn[v]) {
fa[v]=u;
tarjan(v);
low[u]=min(low[v],low[u]);
if(low[v]>dfn[u]) {
++ant;
}
} else if(v!=fa[u]) {
low[u]=min(low[u],dfn[v]);
}
}
}
int main() {
while(true) {
cin >> n >> m;
if(n==0 && m==0){
return 0;
}
for(int i=1; i<=m; i++) {
cin >> u >> v;
mp[u].push_back(v);
mp[v].push_back(u);
}
tarjan(1);
cout << ant << endl;
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
memset(mp,0,sizeof(mp));
tim=0;
memset(fa,0,sizeof(fa));
}
return 0;
}