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 N = 300005;
map<pair<int, int>, int> msp;
vector<int> p[N];
vector<int> ans;
int fa[N], d[N];
int get(int x) {
  if (x == fa[x])
    return x;
  else
    return fa[x] = get(fa[x]);
}
int fl;
void dfs(int nw, int f) {
  if (d[nw] == -1) {
    if (fl)
      d[nw] = 1, fl = 0;
    else
      d[nw] = 0;
  }
  for (auto v : p[nw]) {
    if (v == f) continue;
    dfs(v, nw);
  }
  if (nw != 1) {
    if (d[nw] == 0)
      return;
    else {
      d[f] ^= 1;
      if (nw > f) swap(nw, f);
      ans.push_back(msp[make_pair(nw, f)]);
    }
  }
}
int main() {
  int n, m, i, j;
  scanf("%d%d", &n, &m);
  int sum = 0, cnt = 0;
  for (i = 1; i <= n; i++) {
    scanf("%d", &d[i]), fa[i] = i;
    if (d[i] == -1)
      cnt++;
    else
      sum += d[i];
  }
  if (cnt == 0 && sum % 2 == 1) {
    puts("-1");
    return 0;
  }
  for (i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x > y) swap(x, y);
    msp[make_pair(x, y)] = i;
    if (get(x) != get(y)) {
      int rx = get(x), ry = get(y);
      fa[rx] = ry;
      p[x].push_back(y);
      p[y].push_back(x);
    }
  }
  fl = 0;
  if (sum % 2 == 1) fl = 1;
  dfs(1, 0);
  printf("%d\n", ans.size());
  for (auto v : ans) printf("%d\n", v);
}
