#include <bits/stdc++.h>
using namespace std;
void UNION(const int &x, const int &y, vector<int> &parent) {
  parent[y] = parent[x];
}
int FIND(const int &x, vector<int> &parent) {
  if (x != parent[x]) parent[x] = FIND(parent[x], parent);
  return parent[x];
}
void dfs(const int &i, const int &p, vector<int> &d,
         const vector<vector<pair<int, int> > > &g, vector<int> &ans) {
  for (const auto &j : g[i])
    if (j.first != p) {
      dfs(j.first, i, d, g, ans);
      if (d[j.first] & 1) ans.push_back(j.second), d[i] ^= 1;
    }
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  int sum = 0;
  vector<int> d(n);
  bool flag = false;
  for (int i = 0; i < n; ++i) {
    scanf("%d", &d[i]);
    if (d[i] == -1)
      flag = true;
    else
      sum ^= d[i];
  }
  if (sum and !flag) return printf("%d\n", -1), 0;
  for (int i = 0; i < n; ++i)
    if (d[i] == -1) d[i] = sum, sum = 0;
  vector<int> parent(n);
  for (int i = 0; i < n; ++i) parent[i] = i;
  vector<vector<pair<int, int> > > g(n);
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d %d", &x, &y), --x, --y;
    int kappa = FIND(x, parent);
    int keepo = FIND(y, parent);
    if (kappa != keepo)
      UNION(kappa, keepo, parent), g[x].push_back(make_pair(y, i)),
          g[y].push_back(make_pair(x, i));
  }
  vector<int> ans;
  dfs(0, -1, d, g, ans);
  printf("%d\n", int(ans.size()));
  for (auto &i : ans) printf("%d\n", i + 1);
  return 0;
}
