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;
int n, m;
int d[300005];
int vis[300005];
int state[300005];
int fa[300005][2];
struct node {
  int v, id;
};
vector<node> e[300005];
int ans;
void dfs(int u, int ff) {
  vis[u] = 1;
  int len = e[u].size();
  for (int i = 0; i < len; i++) {
    int v = e[u][i].v;
    int id = e[u][i].id;
    if (vis[v] == 0) {
      fa[v][0] = u;
      fa[v][1] = id;
      dfs(v, u);
    }
  }
  if (d[u] == 1 && fa[u][0] != 0) {
    d[u] ^= 1;
    d[fa[u][0]] ^= 1;
    state[fa[u][1]] ^= 1;
  }
}
int main() {
  while (~scanf("%d%d", &n, &m)) {
    ans = 0;
    memset(vis, 0, sizeof(vis));
    memset(state, 0, sizeof(state));
    memset(fa, 0, sizeof(fa));
    for (int i = 0; i <= 300000; i++) e[i].clear();
    int sp = 0;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &d[i]);
      if (d[i] == -1) sp = i;
    }
    for (int i = 1; i <= m; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      node tp1;
      tp1.v = v;
      tp1.id = i;
      e[u].push_back(tp1);
      node tp2;
      tp2.v = u;
      tp2.id = i;
      e[v].push_back(tp2);
    }
    dfs(1, 0);
    if (d[1] == 1 && sp == 0) {
      printf("-1\n");
      return 0;
    } else if (d[1] == 1) {
      int cur = sp;
      while (fa[cur][0] != 0) {
        state[fa[cur][1]] ^= 1;
        cur = fa[cur][0];
      }
    }
    for (int i = 1; i <= m; i++)
      if (state[i] == 1) ans++;
    printf("%d\n", ans);
    for (int i = 1; i <= m; i++)
      if (state[i] == 1) printf("%d\n", i);
  }
}
