#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e4 + 9,M = 2 * 1e5 + 9;
struct egde{
int to,nex;
} e[M];
int ecnt,head[N];
void addegde(int u,int v){
ecnt++;
e[ecnt] = (egde){v,head[u]};
head[u] = ecnt;
}
int n,m,x,y,ans;
int id,num[N],low[N];
bool flag[N];
void dfs(int root,int cur,int father){
int child = 0;
id++;
num[cur] = id;
low[cur] = id;
for(int i = head[cur];i;i = e[i].nex){
int v = e[i].to;
if(!num[v]){
child++;
dfs(root,v,cur);
low[cur] = min(low[cur],low[v]);
if(cur != root && low[i] >= num[cur])
flag[cur] = true;
if(cur == root && child == 2)
flag[cur] = true;
}
else if(v != father)
low[cur] = min(low[cur],num[v]);
}
return;
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1;i <= m;i++){
scanf("%d%d", &x, &y);
addegde(x,y);
addegde(y,x);
}
for(int i = 1;i <= n;i++)
if(!num[i]){
id = 0;
dfs(i,i,i);
}
for(int i = 1;i <= n;i++)
if(flag[i])
ans++;
printf("%d\n",ans);
for(int i = 1;i <= n;i++)
if(flag[i])
printf("%d ",i);
return 0;
}