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 a[303030];
vector<pair<long long, long long> > g[303030];
bool used[303030];
vector<int> res;
int dfs(int v, int pedge) {
  used[v] = true;
  int cnt = a[v];
  for (pair<long long, long long> p : g[v]) {
    if (used[p.first]) continue;
    cnt += dfs(p.first, p.second);
  }
  if (cnt % 2) {
    res.push_back(pedge);
  }
  return cnt % 2;
}
int main() {
  scanf("%d%d", &n, &m);
  for (long long i = (long long)(0); i < (long long)(n); i++)
    scanf("%d", a + i);
  for (long long i = (long long)(0); i < (long long)(m); i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    g[u].push_back(pair<long long, long long>(v, i));
    g[v].push_back(pair<long long, long long>(u, i));
  }
  bool ok = false;
  int cnt = 0;
  for (long long i = (long long)(0); i < (long long)(n); i++) {
    if (a[i] == -1) ok = true;
    if (a[i] == 1) cnt++;
  }
  if (cnt % 2) {
    if (!ok) {
      printf("-1\n");
      return 0;
    }
    for (long long i = (long long)(0); i < (long long)(n); i++) {
      if (a[i] == -1) {
        a[i] = 1;
        break;
      }
    }
  }
  for (long long i = (long long)(0); i < (long long)(n); i++)
    if (a[i] == -1) a[i] = 0;
  memset(used, 0, sizeof(used));
  dfs(0, -1);
  sort((res).begin(), (res).end());
  printf("%d\n", (int)res.size());
  for (long long i = (long long)(0); i < (long long)(res.size()); i++)
    printf("%d\n", res[i] + 1);
  return 0;
}
