func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = 1e9 + 7;   const int N = 3e5 + 10;   vector<pair<int, int>> vp[N];   vector<int> v[N];   int pos[N];   int deg[N];   int vis[N];   vector<int> ans;   void dfs(int x, int p = 0, int o = 0) {     if (vis[x]) return;     v[p].push_back(x);     vis[x] = 1;     pos[x] = o;     for (auto &pp : vp[x]) {       int y, oo;       tie(y, oo) = pp;       dfs(y, x, oo);     }   }   int solve(int x) {     int cur = deg[x];     for (auto &y : v[x]) {       cur ^= solve(y);     }     if (cur) ans.push_back(pos[x]);     return cur;   }   int main() {     int n, m;     cin >> n >> m;     int cnt1 = 0, cnt_1 = 0;     for (int i = 1; i <= n; i++) {       cin >> deg[i];       if (deg[i] == 1) cnt1 ^= 1;       if (deg[i] == -1) cnt_1++;     }     if (cnt1 == 1 && cnt_1 == 0) {       puts( -1 );       return 0;     }     for (int i = 1; i <= n; i++) {       if (deg[i] == -1) {         deg[i] = cnt1;         cnt1 = 0;       }     }     for (int i = 1; i <= m; i++) {       int x, y;       cin >> x >> y;       vp[x].push_back({y, i});       vp[y].push_back({x, i});     }     dfs(1);     solve(1);     printf( %d n , ans.size());     for (auto &x : ans) printf( %d n , x);     return 0;   }   