#include<cstdio>
using namespace std;
const int maxn=200010;
int head[maxn],nxt[maxn],to[maxn],tt;
int low[maxn],dfn[maxn],index;
int n,m;
bool cut[maxn];
int min(int x,int y)
{
return x>y?y:x;
}
void add(int u,int v)
{
to[++tt]=v;
nxt[tt]=head[u];
head[u]=tt;
}
void tarjan(int u,int fa)
{
dfn[u]=low[u]=++index;
int col=0;
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(!dfn[v])
{
tarjan(v,fa);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]&&u!=fa)
cut[u]=1;
if(u==fa) col++;
}
low[u]=min(low[u],dfn[v]);
}
if(col>=2&&u==fa) cut[u]=1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
int ans=0;
for(int i=1;i<=n;i++) if(dfn[i]==0) tarjan(i,i);
for(int i=1;i<=n;i++) if(cut[i]) ans++;
printf("%d\n",ans);
for(int i=1;i<=n;i++) if(cut[i]) printf("%d ",i);
return 0;
}