#include <bits/stdc++.h>
using namespace std;
const int MAX = 3e5 + 5;
int val[MAX];
vector<int> adj[MAX];
int ans[MAX];
int a[MAX];
int b[MAX];
int req[MAX];
int vis[MAX];
vector<int> fin;
void dfs(int s, int p) {
  vis[s] = 1;
  int res = val[s];
  if (res == -1) {
    res = 0;
  }
  for (int i = 0; i < adj[s].size(); i++) {
    int u = adj[s][i];
    int v = a[u] ^ s ^ b[u];
    if (!vis[v]) {
      dfs(v, u);
      if (req[v]) {
        ans[u] = 1;
        res ^= 1;
      }
    }
  }
  req[s] = res;
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  int there = 0;
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &val[i]);
    if (val[i] == -1) {
      there = i;
    }
    if (val[i] == 1) {
      cnt++;
    }
  }
  if (cnt % 2) {
    if (!there) {
      printf("-1\n");
      return 0;
    } else {
      val[there] = 1;
    }
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &a[i], &b[i]);
    adj[a[i]].push_back(i);
    adj[b[i]].push_back(i);
  }
  dfs(1, 0);
  for (int i = 1; i <= m; i++) {
    if (ans[i]) {
      fin.push_back(i);
    }
  }
  printf("%d\n", (int)fin.size());
  for (int i = 0; i < fin.size(); i++) {
    printf("%d\n", fin[i]);
  }
  return 0;
}
