3 2
1 0 1
1 2
2 3
 10 10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 7
8 3
6 4
4 2
9 2
5 10
9 8
10 7
5 1
6 2

2
1
2
 0

#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
vector<int> b;
vector<char> us;
vector<int> A;
map<pair<int, int>, int> U;
int dfs(int w) {
  us[w] = true;
  int r, k;
  (b[w] == 1) ? r = 1 : r = 0;
  for (auto t : g[w])
    if (!us[t]) {
      k = dfs(t);
      if (k % 2) A.push_back(U[{w, t}]);
      r += k;
    }
  return r;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m, k, l, Z = 0;
  cin >> n >> m;
  g.resize(n);
  b.resize(n);
  us.assign(n, false);
  for (int i = 0; i < n; i++) cin >> b[i];
  for (int i = 0; i < m; i++) {
    cin >> k >> l;
    k--;
    l--;
    g[k].push_back(l);
    g[l].push_back(k);
    U[{k, l}] = i;
    U[{l, k}] = i;
  }
  for (int i = 0; i < n; i++)
    if (!us[i] && b[i] == -1) dfs(i);
  for (int i = 0; i < n; i++)
    if (!us[i] && b[i] == 1) {
      if (dfs(i) % 2 == 1) Z = 1;
    }
  if (Z)
    cout << -1;
  else {
    cout << int(A.size()) << '\n';
    sort(A.begin(), A.end());
    ;
    for (int i = 0; i < int(A.size()); i++) cout << A[i] + 1 << '\n';
  }
}
