#include<iostream>
#include<vector>
using namespace std;
const int MAXN=1001;
vector<int> g[10001];
int n,m,Intex,ans,dfn[MAXN],low[MAXN];
bool iscp[MAXN];
void find_cutpoint(int u,int fa)
{
int child=0;
dfn[u]=low[u]=++Intex;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(dfn[v]==0)
{
child++;
find_cutpoint(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u])iscp[u]=true;
else low[u]=min(low[u],dfn[v]);
}
}
if(fa<0&&child==1)iscp[u]=false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
find_cutpoint(1,-1);
for(int i=1;i<=n;i++)
{
if(iscp[i])
{
cout<<i<<" ";
ans++;
}
}
cout<<endl<<ans;
return 0;
}