#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1e5+5,M=1e5+5,INF=1e9+5;
int n=0,m,u,v;
struct edge
{
int v,ne;
} e[M<<1];
int h[N],cnt=0;
inline void ins(int u,int v)
{
cnt++;
e[cnt].v=v;
e[cnt].ne=h[u];
h[u]=cnt;
cnt++;
e[cnt].v=u;
e[cnt].ne=h[v];
h[v]=cnt;
}
int dfn[N],low[N],dfc=0,iscut[N];
void dfs(int u,int fa)
{
dfn[u]=low[u]=++dfc;
int child=0;
for(int i=h[u]; i; i=e[i].ne)
{
int v=e[i].v;
if(!dfn[v])
{
child++;
dfs(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]) iscut[u]=1;
}
else if(dfn[v]<dfn[u]&&v!=fa) low[u]=min(low[u],dfn[v]);
}
if(fa==0&&child==1) iscut[u]=0;
}
int main()
{
//freopen("D://testdata.in","r",stdin);
cin>>n>>m;
for(int i=1; i<=m; i++)
{
cin>>u>>v;
ins(u,v);
}
for(int i=1; i<=n; i++) if(!dfn[i]) dfs(i,0);
int ans=0;
for(int i=1; i<=n; i++) if(iscut[i]) ans++;
printf("%d
",ans);
for(int i=1; i<=n; i++) if(iscut[i]) printf("%d ",i);
}