#include <bits/stdc++.h>
using namespace std;
int n, m, root;
vector<int>e[20000];
int num[20000], low[20000], flag[20000], id;
void dfs(int cur, int father)
{
int child = 0;
id++;
num[cur]=id;
low[cur] = id;
for (int i = 0; i < (int)e[cur].size(); i++)
{
if (num[e[cur][i]] == 0)
{
child++;
dfs(e[cur][i], cur);
low[cur] = min(low[cur], low[e[cur][i]]);
if (cur != root && low[e[cur][i]] >= num[cur]) flag[cur] = true;
if (cur == root && child == 2) flag[cur] = true;
}
else if (e[cur][i] != father)
{
low[cur] = min(low[cur], num[e[cur][i]]);
}
}
return;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int x, y;
cin >> n >> m;
for (register int i = 1; i <= m; i++)
{
cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);
}
for (register int i = 1; i <= n; i++)
if (num[i] == 0)
dfs(i, i);
int cnt = 0;
vector<int>ans;
for(register int i = 1; i <= n; i++)
if (flag[i])
{
cnt++;
ans.push_back(i);
}
cout << cnt << endl;
for (auto i : ans)
cout << i << " ";
cout << endl;
return 0;
}