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;
int n, m, a[N];
bool check() {
  int sum = 0;
  bool flag = 0;
  for (int i = 1; i <= n; ++i) {
    if (a[i] == -1)
      flag = 1;
    else
      sum += a[i];
  }
  if (!flag && (sum & 1)) return 1;
  for (int i = 1; i <= n; ++i)
    if (a[i] == -1) {
      if (sum & 1)
        ++sum, a[i] = 1;
      else
        a[i] = 0;
    }
  return 0;
}
int head[N], cnt;
struct edge {
  int n, t, id;
  edge(int a = 0, int b = 0, int c = 0) : n(a), t(b), id(c) {}
} e[N << 1];
int pa[N];
int getpa(int x) {
  if (pa[x] == x) return x;
  return pa[x] = getpa(pa[x]);
}
void ins(int a, int b, int c) {
  e[cnt] = edge(head[a], b, c);
  head[a] = cnt++;
}
int sum[N];
vector<int> ans;
void dfs(int u, int p) {
  for (int v, i = head[u]; i != -1; i = e[i].n) {
    v = e[i].t;
    if (v == p) continue;
    dfs(v, u);
    a[u] += a[v];
    if (a[v] & 1) ans.push_back(e[i].id);
  }
}
int main() {
  memset(head, -1, sizeof(head));
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  if (check()) {
    puts("-1");
    while (m--) scanf("%*d%*d");
    return 0;
  }
  for (int i = 1; i <= n; ++i) pa[i] = i;
  for (int a, b, i = 1; i <= m; ++i) {
    scanf("%d%d", &a, &b);
    if (getpa(a) == getpa(b)) continue;
    pa[getpa(a)] = getpa(b);
    ins(a, b, i);
    ins(b, a, i);
  }
  dfs(1, 1);
  printf("%d\n", ans.size());
  for (int s = ans.size(), i = 0; i < s; ++i)
    printf("%d%c", ans[i], i == s - 1 ? '\n' : ' ');
  return 0;
}
