#include<bits/stdc++.h>
using namespace std;
int n,m,ut,vt,wt,root,dfn[100010],low[100010],cnt;
vector<int> g[100010];
bool iscut[100010];
vector<int> cut;
void tarjan(int u,int fa) {
int son = 0;
dfn[u] = low[u] = ++cnt;
for (int i = 0;i < g[u].size();i ++) {
int v = g[u][i];
if (!dfn[v]) {
++ son;
tarjan(v,u);
low[u] = min(low[u],low[v]);
if (low[v] >= dfn[u] && u != root) iscut[u] = true;
} else if (v != fa) low[u] = min(low[u],dfn[v]);
}
if (u == root && son >= 2) iscut[u] = true;
return;
}
int main() {
scanf("%d%d",&n,&m);
for (int i = 1;i <= m;i ++) {
scanf("%d%d",&ut,&vt);
g[ut].push_back(vt);
g[vt].push_back(ut);
}
for (int i = 1;i <= n;i ++) {
root = i;
if (!dfn[i]) tarjan(i,0);
}
for (int i = 1;i <= n;i ++)
if (iscut[i]) cut.push_back(i);
printf("%d\n",cut.size());
for (int i = 0;i < cut.size();i ++)
printf("%d ",cut[i]);
printf("\n");
return 0;
}