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;
const int V(300011), E(600011), M(300011);
int h[V], n[E], e[E], s[E], et, vt, v[V], u[M], d[V], g[V], f[V], fe[V];
void ins(int f, int t, int no) {
  n[++et] = h[f];
  h[f] = et;
  e[et] = t;
  s[et] = no;
}
int dfs(int p) {
  v[p] = 1;
  int i, j, r(d[p] != -1 && d[p] != g[p]);
  for (i = h[p]; i; i = n[i])
    if (!v[e[i]]) {
      f[e[i]] = p;
      fe[e[i]] = i;
      r ^= j = dfs(e[i]);
      if (j) u[s[i]] ^= 1;
    }
  return r;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int m, i, j, k;
  cin >> vt >> m;
  for (i = 1; i <= vt; ++i) cin >> d[i];
  if (vt == 1) {
    cout << -d[1] << endl;
    return 0;
  }
  for (i = 1; i <= m; ++i) {
    cin >> j >> k;
    if (j == k) continue;
    g[j] ^= 1;
    g[k] ^= 1;
    ins(j, k, i);
    ins(k, j, i);
    u[i] = 1;
  }
  for (i = 1; i <= vt; ++i)
    if (d[i] != -1) break;
  if (i > vt) {
    cout << 0 << endl;
    return 0;
  }
  if (d[i] != g[i]) {
    u[s[h[i]]] ^= 1;
    g[i] ^= 1;
    g[e[h[i]]] ^= 1;
  }
  if (dfs(i)) {
    for (j = 1; j <= vt; ++j)
      if (d[j] == -1) break;
    if (j > vt) {
      cout << -1 << endl;
      return 0;
    } else
      for (; j; j = f[j]) u[s[fe[j]]] ^= 1;
  }
  for (j = 0, i = 1; i <= m; ++i)
    if (u[i]) ++j;
  cout << j << endl;
  for (i = 1; i <= m; ++i)
    if (u[i]) cout << i << endl;
  return 0;
}
