2 0
 100000 0
 8 9
1 2
2 3
3 4
4 1
5 6
6 7
7 8
8 5
6 8
 2 1
1 2
 11 9
5 9
8 5
11 3
11 1
3 4
7 11
3 1
11 2
7 2
 7 9
7 3
7 4
1 2
2 3
3 1
3 4
4 5
5 6
6 4
 7 5
5 4
7 3
7 1
6 7
3 1
 7 8
1 2
2 3
3 4
4 1
3 5
5 6
6 7
7 3
 6 9
1 2
2 3
1 4
4 2
5 2
5 3
4 5
6 4
6 5
 7 9
1 2
2 4
4 3
3 1
2 3
4 5
5 6
6 7
7 4
 1 0
 6 7
1 2
2 3
3 1
3 4
4 5
5 6
6 4
 4 5
1 2
2 3
3 4
4 1
1 3
 100000 3
99998 99999
99999 100000
100000 99998

0

 0

 4
1 2 3 4 
 0

 6
3 4 6 7 8 9 
 9
1 2 3 4 5 6 7 8 9 
 3
2 3 5 
 8
1 2 3 4 5 6 7 8 
 0

 4
6 7 8 9 
 0

 6
1 2 3 5 6 7 
 0

 3
1 2 3 

#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int k = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    k = k * 10 + ch - '0';
    ch = getchar();
  }
  return k * f;
}
inline void write(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writeln(int x) {
  write(x);
  puts("");
}
const int N = 1e5 + 10;
int nedge = 0, p[2 * N], nex[2 * N], head[2 * N], n, m;
inline void addedge(int a, int b) {
  p[++nedge] = b;
  nex[nedge] = head[a];
  head[a] = nedge;
}
bool vis[2 * N];
int cnt = 0, ans = 0, anss[N], st[N], top = 0, Cnt = 0, q[2 * N], b[2 * N],
    dfn[N], low[N];
inline int fan(int x) { return (x & 1) ? x + 1 : x - 1; }
inline void tarjan(int x, int fa) {
  dfn[x] = low[x] = ++cnt;
  for (int k = head[x]; k; k = nex[k])
    if (p[k] != fa && !vis[k]) {
      int to = p[k];
      st[++top] = k;
      vis[k] = vis[fan(k)] = 1;
      if (!dfn[to]) {
        tarjan(to, x);
        low[x] = min(low[x], low[to]);
        if (low[to] >= dfn[x]) {
          Cnt++;
          int r, dd = 0, ee = 0;
          do {
            r = st[top--];
            q[++ee] = r;
            if (b[p[r]] != Cnt) b[p[r]] = Cnt, dd++;
            if (b[p[fan(r)]] != Cnt) b[p[fan(r)]] = Cnt, dd++;
          } while (r != k);
          if (ee == dd) {
            for (int i = 1; i <= ee; i++) anss[++ans] = q[i];
          }
        }
      } else
        low[x] = min(low[x], dfn[to]);
    }
}
int main() {
  n = read();
  m = read();
  for (int i = 1; i <= m; i++) {
    int x = read(), y = read();
    addedge(x, y);
    addedge(y, x);
  }
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i, 0);
  writeln(ans);
  sort(anss + 1, anss + ans + 1);
  for (int i = 1; i <= ans; i++) {
    if (anss[i] & 1) anss[i]++;
    anss[i] >>= 1;
    write(anss[i]), putchar(' ');
  }
  return 0;
}
