#include <bits/stdc++.h>
using namespace std;
const int C = 500001;
vector<vector<int> > gr(C), E(C);
int ij[C], ji[C], a, b, n, m;
int s[C], sE[C], low[C], pre[C], nV[C], nE[C], par[C], cor[C], corn;
bool ch[C], chE[C];
int main() {
  int i, j, is = 1, iE = 0, iV = 1, ip = 2, k, e, vn, en;
  scanf("%d %d", &n, &m);
  for (int z = 0; z < m; z++)
    scanf("%d %d", &a, &b), gr[a].push_back(b), gr[b].push_back(a),
        E[a].push_back(z), E[b].push_back(z), ij[a]++, ij[b]++;
  for (i = 1; i <= n; i++) ji[i] = ij[i];
  for (j = 1; j <= n; j++) {
    if (ch[j] == 0) {
      s[0] = j, ch[j] = 1;
      low[j] = pre[j] = 1, iV = 1, iE = 0, ip = 2, is = 1;
      while (is > 0) {
        a = s[is - 1];
        if (ij[a] > 0) k = gr[a][ij[a] - 1], e = E[a][ij[a] - 1];
        if (ij[a] > 0 && ch[gr[a][ij[a] - 1]] == 1) {
          if (chE[e] == 0) {
            chE[e] = 1;
            sE[iE] = e, iE++;
          }
          if (k != par[a]) low[a] = min(low[a], pre[k]);
          ij[a]--;
        } else if (ij[a] > 0 && ch[gr[a][ij[a] - 1]] == 0) {
          ch[k] = 1, chE[e] = 1;
          par[k] = a;
          nV[k] = iV, nE[k] = iE, iV++;
          sE[iE] = e, iE++;
          s[is] = k, low[k] = pre[k] = ip, is++, ip++;
          ij[a]--;
        } else {
          if (low[par[a]] > low[a]) low[par[a]] = low[a];
          if (low[a] >= pre[par[a]]) {
            vn = iV - nV[a] + 1, en = iE - nE[a];
            if (en == vn) {
              for (i = nE[a]; i < iE; i++) cor[sE[i]] = 1, corn++;
            }
            iV = nV[a], iE = nE[a];
          }
          is--;
        }
      }
    }
  }
  printf("%d\n", corn);
  for (i = 0; i < m; i++)
    if (cor[i] == 1) printf("%d ", i + 1);
  return 0;
}
