Tim khop va cau
#include<bits/stdc++.h>
using namespace std;
int _time,low[10001],num[10001],m,n,u,v,cntjoint,bridge;
vector<int>adj[10001];
bool f[10001];
void DFS(int u,int pa){
num[u]=low[u]=++_time;
int child=0;
for(int v:adj[u]){
if(v==pa)continue;
if(!num[v]){
child++;
DFS(v,u);
low[u]=min(low[u],low[v]);
if(pa!=-1&&low[v]>=num[u])f[u]=1;
if(low[v]==num[v])bridge++;
}
else low[u]=min(low[u],num[v]);
}
if(pa==-1)f[u]=(child>1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1;i<=n;i++)if(!num[i])DFS(i,-1);
for(int i=1;i<=n;i++)cntjoint+=(f[i]);
cout<<cntjoint<<" "<<bridge;
return 0;
}