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 = 300001;
int n, m, cnt, head[N], d[N], tmp;
int vis[N], ch[N];
struct xint {
  int to, next, s;
} e[N * 2];
void addedge(int x, int y, int s) {
  e[++cnt] = (xint){y, head[x], s};
  head[x] = cnt;
  e[++cnt] = (xint){x, head[y], s};
  head[y] = cnt;
}
void find(int f, int x) {
  vis[x] = 1;
  if (d[x] == -1) tmp = x;
  for (int i = head[x], y = e[i].to; i; i = e[i].next, y = e[i].to)
    if (y != f)
      if (!vis[y]) find(x, y);
}
int dfs(int f, int x) {
  vis[x] = 2;
  int ss = 0;
  for (int i = head[x], y = e[i].to; i; i = e[i].next, y = e[i].to)
    if (y != f)
      if (vis[y] != 2)
        if (dfs(x, y)) ch[e[i].s] = 1, ss ^= 1;
  if (d[x] < 0 || d[x] == ss) return 0;
  return 1;
}
int ansn, ans[N];
void work(int x) {
  tmp = 0;
  find(0, x);
  if (tmp)
    dfs(0, tmp);
  else if (dfs(0, x)) {
    cout << -1 << endl;
    return;
  }
  for (int i = 1; i <= m; ++i)
    if (ch[i]) ans[++ansn] = i;
  printf("%d\n", ansn);
  for (int i = 1; i <= ansn; ++i) printf("%d ", ans[i]);
  printf("\n");
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%d", &d[i]);
  for (int i = 1; i <= m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    addedge(x, y, i);
  }
  for (int i = 1; i <= n; ++i)
    if (!vis[i]) work(i);
}
