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 d[300000], d_back[300000];
vector<pair<int, int>> e[300000];
bool used[300000], ans[300000];
bool dfs(int u, bool use) {
  used[u] = true;
  if (d[u] >= 0) use ^= d[u];
  for (auto p : e[u])
    if (!used[p.first]) {
      ans[p.second] ^= use;
      use = dfs(p.first, use);
      ans[p.second] ^= use;
    }
  return use;
}
int main(void) {
  int i, n, m;
  scanf("%d%d", &n, &m);
  for (i = 0; i <= (int)(n)-1; i++) scanf("%d", &d[i]);
  for (i = 0; i <= (int)(m)-1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    e[u].emplace_back(v, i);
    e[v].emplace_back(u, i);
  }
  for (i = 0; i <= (int)(n)-1; i++) d_back[i] = d[i];
  bool use = dfs(0, 0);
  for (i = 0; i <= (int)(n)-1; i++) d[i] = d_back[i];
  if (use) {
    for (i = 0; i <= (int)(n)-1; i++)
      if (d[i] < 0) {
        d[i] = 1;
        use = false;
        break;
      }
    if (use) {
      puts("-1");
      return 0;
    }
    for (i = 0; i <= (int)(m)-1; i++) ans[i] = false;
    for (i = 0; i <= (int)(n)-1; i++) used[i] = false;
    dfs(0, 0);
  }
  int cnt = 0;
  for (i = 0; i <= (int)(m)-1; i++) cnt += ans[i];
  printf("%d\n", cnt);
  for (i = 0; i <= (int)(m)-1; i++)
    if (ans[i]) printf("%d\n", i + 1);
  return 0;
}
