#include <bits/stdc++.h>
using namespace std;
const int N=100010;
int n,m,sum,dfs_clock;
vector<int> G[N];
int pre[N],low[N],iscut[N];
int dfs(int u,int fa){
int lowu=pre[u]=++dfs_clock;
int child=0;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(!pre[v]){
child++;
int lowv=dfs(v,u);
lowu=min(lowu,lowv);
if(lowv>=pre[u])iscut[u]=true;
}
else if(pre[v]<pre[u] && v!=fa)lowu=min(lowu,pre[v]);
}
if(child==1 && fa<0)iscut[u]=0;
low[u]=lowu;
return lowu;
}
int main(){
scanf("%d%d",&n,&m);
while(m--){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v); G[v].push_back(u);
}
for(int i=1;i<=n;i++)
if(!pre[i])dfs(i,-1);
for(int i=1;i<=n;i++)if(iscut[i])sum++;
printf("%d\n",sum);
for(int i=1;i<=n;i++)
if(iscut[i])printf("%d ",i);
puts("");
return 0;
}