#include <bits/stdc++.h>
using namespace std;
map<pair<int, int>, int> idx;
void biconnected_components(vector<vector<int>> &graph) {
  int N = graph.size();
  vector<int> num(N), low(N), art(N), stk;
  vector<vector<pair<int, int>>> bcc;
  vector<set<int>> bccv;
  int bccnum = 0;
  vector<vector<int>> comps;
  stack<pair<int, int>> s;
  function<void(int, int, int &)> dfs = [&](int u, int p, int &t) {
    num[u] = low[u] = ++t;
    stk.push_back(u);
    for (int v : graph[u])
      if (v != p) {
        if (!num[v]) {
          s.emplace(v, u);
          dfs(v, u, t);
          low[u] = min(low[u], low[v]);
          if (low[v] >= num[u]) {
            art[u] = (num[u] > 1 || num[v] > 2);
            comps.push_back({u});
            while (comps.back().back() != v) {
              comps.back().push_back(stk.back()), stk.pop_back();
            }
            bcc.push_back(vector<pair<int, int>>());
            bccv.push_back(set<int>());
            while (1) {
              auto p = s.top();
              s.pop();
              bcc[bccnum].push_back(p);
              bccv[bccnum].insert(p.first);
              bccv[bccnum].insert(p.second);
              if (p.first == v && p.second == u) break;
            }
            ++bccnum;
          }
        } else if (num[v] < num[u]) {
          low[u] = min(low[u], num[v]);
          s.emplace(v, u);
        }
      }
  };
  int t;
  for (int i = 0; i < N; i++)
    if (!num[i]) dfs(i, -1, t = 0);
  set<int> res;
  for (int i = 0; i < bcc.size(); i++) {
    if (bcc[i].size() == bccv[i].size()) {
      for (auto &x : bcc[i]) res.insert(idx[x]);
    }
  }
  cout << res.size() << '\n';
  for (auto &x : res) cout << x + 1 << ' ';
  if (res.size()) cout << '\n';
}
vector<vector<int>> graph;
int main() {
  int N, M;
  scanf("%d %d", &N, &M);
  graph.assign(N, vector<int>());
  for (int i = 0; i < M; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    u--;
    v--;
    graph[u].push_back(v);
    graph[v].push_back(u);
    idx[pair<int, int>(u, v)] = i;
    idx[pair<int, int>(v, u)] = i;
  }
  biconnected_components(graph);
  return 0;
}
