#include <bits/stdc++.h>
using namespace std;
int n, m, v[300010], t = 0, a[300010], nxt[1000010], to[1000010], cnt = 1,
                     ans[1000010];
bool vis[300010];
void addedge(int U, int V) {
  to[++cnt] = V;
  nxt[cnt] = a[U];
  a[U] = cnt;
}
int dfs(int x) {
  int tmp = 0;
  for (int i = a[x]; i; i = nxt[i])
    if (!vis[to[i]]) {
      vis[to[i]] = 1;
      if (dfs(to[i]) != v[to[i]]) {
        if (v[to[i]] == -1) continue;
        tmp ^= 1, ans[++t] = i / 2;
      }
    }
  return tmp;
}
int main() {
  memset(vis, 0, sizeof(vis));
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &v[i]);
  for (int i = 1; i <= m; i++) {
    int U, V;
    scanf("%d%d", &U, &V);
    addedge(U, V);
    addedge(V, U);
  }
  for (int i = 1; i <= n; i++)
    if ((!vis[i]) && v[i] == -1) {
      vis[i] = 1;
      dfs(i);
    }
  for (int i = 1; i <= n; i++)
    if ((!vis[i]) && v[i] == 1) {
      vis[i] = 1;
      int tmp = dfs(i);
      if (tmp != 1) {
        printf("-1\n");
        return 0;
      }
    }
  printf("%d\n", t);
  sort(ans + 1, ans + t + 1);
  for (int i = 1; i <= t; i++) printf("%d\n", ans[i]);
}
