直接贴模版了
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,m,head[N],tot;
int cut[N],dfn[N],low[N],tim,rt;
struct node{
int to,nxt;
}edge[N*2];
void add(int x,int y){
edge[++tot].to=y;
edge[tot].nxt=head[x];
head[x]=tot;
}
void tarjan(int x){
dfn[x]=low[x]=++tim;int child=0;
for(int i=head[x];i;i=edge[i].nxt){
int y=edge[i].to;
if(!dfn[y]){
tarjan(y);
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
child++;
if(child>1||x!=rt) cut[x]=1;
}
}
else low[x]=min(low[x],dfn[y]);
}
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++){int x=read(),y=read();add(x,y),add(y,x);}
for(rt=1;rt<=n;rt++) if(!dfn[rt]) tarjan(rt);
int ans=0;
for(int i=1;i<=n;i++) if(cut[i]) ans++;
cout<<ans<<endl;
for(int i=1;i<=n;i++) if(cut[i]) cout<<i<<" ";
return 0;
}