#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
int t;
int a[10005], b[10005], lst[20005], id[10005][2];
vector<int> p;
struct dsu {
  int s[20005];
  void init(int len) {
    for (int i = 1; i <= len; i++) s[i] = i;
  }
  int get(int x) {
    p.emplace_back(x);
    if (s[x] == x)
      return x;
    else
      return s[x] = get(s[x]);
  }
  void update(int x, int y) {
    x = get(x);
    y = get(y);
    if (x != y) {
      p.emplace_back(x);
      s[x] = y;
    }
  }
} s;
vector<int> ans;
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  if (!m) {
    cout << "0\n";
    return 0;
  }
  for (int i = 1; i <= m; i++) {
    cin >> a[i] >> b[i];
  }
  int second = sqrt(m);
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= 1; j++) id[i][j] = ++cnt;
  }
  for (int t = 1; t <= m; t += second) {
    int l = t, r = min(m, t + second - 1);
    s.init(cnt);
    for (int i = 1; i < l; i++) {
      s.update(id[a[i]][1], id[b[i]][0]);
      s.update(id[b[i]][1], id[a[i]][0]);
    }
    for (int i = r + 1; i <= m; i++) {
      s.update(id[a[i]][1], id[b[i]][0]);
      s.update(id[b[i]][1], id[a[i]][0]);
    }
    bool f = 1;
    for (int i = 1; i <= n; i++) {
      if (s.get(id[i][0]) == s.get(id[i][1])) {
        f = 0;
        break;
      }
    }
    if (!f) continue;
    for (int i = 1; i <= cnt; i++) lst[i] = s.s[i];
    for (int i = l; i <= r; i++) {
      p.clear();
      vector<int> tv;
      for (int j = l; j < i; j++) {
        s.update(id[a[j]][1], id[b[j]][0]);
        tv.emplace_back(a[j]);
        s.update(id[b[j]][1], id[a[j]][0]);
        tv.emplace_back(b[j]);
      }
      for (int j = i + 1; j <= r; j++) {
        s.update(id[a[j]][1], id[b[j]][0]);
        tv.emplace_back(a[j]);
        s.update(id[b[j]][1], id[a[j]][0]);
        tv.emplace_back(b[j]);
      }
      f = 1;
      for (auto u : tv) {
        if (s.get(id[u][0]) == s.get(id[u][1])) {
          f = 0;
          break;
        }
      }
      if (f) ans.emplace_back(i);
      for (auto u : p) s.s[u] = lst[u];
    }
  }
  cout << ans.size() << '\n';
  for (auto u : ans) cout << u << ' ';
  return 0;
}
