func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 3000 * 100 + 5;   vector<pair<int, int> > adj[N];   pair<int, int> edge[N];   short d[N];   bool mark[N], edg[N], c[N];   int bad[N], par[N], m, n;   void findd(int a, int e, int b) {     while (a != b) {       edg[e] = 1;       if (a == edge[e].first)         a = edge[e].second;       else         a = edge[e].first;       e = par[a];     }     return;   }   void DFS2(int v, int parr) {     mark[v] = 1;     par[v] = parr;     int s = adj[v].size();     int temp = -1, temp2 = 0;     if (c[v]) temp = v;     for (int i = 0; i < s; i++) {       int u = adj[v][i].first;       int w = adj[v][i].second;       if (!mark[u]) {         DFS2(u, w);         if (bad[u] != -1) {           if (temp == -1) {             temp = bad[u];             temp2 = par[bad[u]];           } else {             findd(temp, temp2, v);             findd(bad[u], par[bad[u]], v);             temp = -1;           }         }       }     }     bad[v] = temp;     return;   }   void DFS(int v) {     mark[v] = 1;     int s = adj[v].size();     for (int i = 0; i < s; i++) {       int u = adj[v][i].first;       int w = adj[v][i].second;       if (!mark[u]) {         DFS(u);         if (c[u]) {           c[v] = 1 - c[v];           edg[w] = 1;         }       }     }     return;   }   void pp() {     int t = 0;     for (int i = 0; i < m; i++) {       if (!edg[i]) t++;     }     printf( %d n , t);     for (int i = 0; i < m; i++) {       if (!edg[i]) printf( %d n , i + 1);     }     return;   }   int main() {     int t = -1, x, y, k = 0;     scanf( %d %d , &n, &m);     for (int i = 0; i < n; i++) {       scanf( %d , &d[i]);       if (d[i] == -1) t = i;     }     for (int i = 0; i < m; i++) {       scanf( %d %d , &x, &y);       adj[--x].push_back(make_pair(--y, i));       adj[y].push_back(make_pair(x, i));       edge[i] = make_pair(x, y);     }     for (int i = 0; i < n; i++) {       int s = adj[i].size();       if (d[i] == 0 && s % 2) {         k++;         c[i] = 1;       }       if (d[i] == 1 && s % 2 == 0) {         k++;         c[i] = 1;       }     }     if (t != -1) {       DFS(t);       pp();     } else {       t = 0;       if (k % 2 == 1) {         cout <<  -1 ;         return 0;       }       DFS2(0, m);       pp();     }   }   