#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
int n, m, d[N], b[N];
bool vis[N];
pair<int, int> pre[N];
vector<pair<int, int> > g[N];
vector<int> ans;
void dfs(int x, int fa) {
  vis[x] = 1;
  for (int i = 0; i < g[x].size(); ++i) {
    int y = g[x][i].first, edge = g[x][i].second;
    if (y == fa || vis[y]) continue;
    pre[y] = make_pair(x, edge);
    dfs(y, x);
    if (d[y] == 1) {
      d[y] ^= 1;
      b[edge] ^= 1;
      if (d[x] != -1) d[x] ^= 1;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  int QAQ = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &d[i]);
    if (d[i] == -1) QAQ = i;
  }
  for (int i = 1; i <= m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    g[x].push_back(make_pair(y, i));
    g[y].push_back(make_pair(x, i));
  }
  memset(vis, 0, sizeof vis);
  memset(b, 0, sizeof b);
  dfs(1, 0);
  if (d[1] == 1) {
    if (QAQ == 0) {
      printf("-1");
      return 0;
    } else {
      while (QAQ != 1) b[pre[QAQ].second] ^= 1, QAQ = pre[QAQ].first;
    }
  }
  for (int i = 1; i <= m; ++i)
    if (b[i]) ans.push_back(i);
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); ++i) printf("%d\n", ans[i]);
  return 0;
}
