或许我是第一个MLE的……
#include<bits/stdc++.h>
#define re register
using namespace std;
int n,m,e[20010][20010],root,num[20010],low[20010],flag[20010],index1;
int x,y;
int ans;
void dfs(int cur,int father){
int child=0;
index1++;
num[cur]=index1;
low[cur]=index1;
for(re int i=1;i<=n;i++){
if(e[cur][i]){
if(!num[i]){
child++;
dfs(i,cur);
low[cur]=min(low[cur],low[i]);
if(cur!=root&&low[i]>=num[cur]){
if(!flag[cur]){
flag[cur]=1;
ans++;
}
}
if(cur==root&&child==2){
if(!flag[cur]){
flag[cur]=1;
ans++;
}
}
}
else if(i!=father){
low[cur]=min(low[cur],num[i]);
}
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(re int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
e[x][y]=1;
e[y][x]=1;
}
root=1;
dfs(1,root);
printf("%d\n",ans);
for(re int i=1;i<=n;i++){
if(flag[i]){
printf("%d ",i);
}
}
return 0;
}