func_code_string: #include <bits/stdc++.h>   using namespace std;   long long t, n, m, u, v, q, k;   const int N = 3e5 + 500;   const int LN = 20;   const int SN = 331;   const long long mod = 1e9 + 7;   const long long INF = 1LL << 57;   long long arr[N], brr[N];   string str, ss;   vector<int> adj[N];   vector<int> idx[N];   int d[N];   int actuald[N];   bool can[N];   bool vis[N];   void dfs(int v, int p) {     if (d[v] == -1) d[v] = 0;     vis[v] = true;     for (int i = 0; i < adj[v].size(); ++i) {       int u = adj[v][i];       if (u == p || vis[u]) continue;       dfs(u, v);       if (actuald[u] != d[u]) {         can[idx[v][i]] = true;         actuald[v]++;         actuald[u]++;         actuald[v] %= 2;         actuald[u] %= 2;       }     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n >> m;     int has = -1, sum = 0;     for (int i = 1; i <= n; ++i) {       cin >> d[i];       if (d[i] == -1)         has = i;       else         sum += d[i];     }     for (int i = 1; i <= m; ++i) {       cin >> u >> v;       adj[u].push_back(v);       adj[v].push_back(u);       idx[u].push_back(i);       idx[v].push_back(i);     }     if (sum % 2 == 1 && has == -1) {       cout << -1 <<   n ;       return 0;     }     if (sum % 2 == 1) d[has] = 1;     dfs(1, 0);     sum = 0;     for (int i = 1; i <= m; ++i) {       sum += can[i];     }     cout << sum <<   n ;     for (int i = 1; i <= m; ++i) {       if (can[i]) cout << i <<    ;     }     cout <<   n ;   }   