#include <bits/stdc++.h>
using namespace std;
const int N = 300002;
int n, m;
int d[N], p[N], deg[N], p_edge[N];
bool vis[N], vis_edge[N];
vector<pair<int, int> > adj[N];
vector<int> depth[N];
int dfs(int u, int last) {
  vis[u] = 1;
  p[u] = last;
  int h = 0;
  for (int i = 0; i < adj[u].size(); i++) {
    int v = adj[u][i].first;
    int e = adj[u][i].second;
    if (v != last and vis[v] and !vis_edge[e]) {
      deg[u]--;
      deg[v]--;
      vis_edge[e] = 1;
    }
    if (!vis[v]) {
      p_edge[v] = e;
      p[v] = u;
      h = max(h, dfs(v, u));
    }
  }
  depth[h].push_back(u);
  return h + 1;
}
int main(void) {
  scanf("%d%d", &n, &m);
  int sum = 0, root = 1;
  bool flag = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &d[i]);
    if (d[i] != -1) {
      sum += d[i];
    } else {
      flag = 1;
      root = i;
    }
  }
  if (!flag and sum % 2 != 0) {
    printf("-1\n");
    return 0;
  }
  int u, v;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    adj[u].push_back(pair<int, int>(v, i));
    adj[v].push_back(pair<int, int>(u, i));
    deg[u]++;
    deg[v]++;
  }
  int h = dfs(root, root);
  vector<int> ans;
  for (int i = 0; i < h - 1; i++) {
    for (int j = 0; j < depth[i].size(); j++) {
      int u = depth[i][j];
      if (d[u] == -1 or deg[u] % 2 == d[u]) {
        ans.push_back(p_edge[u]);
      } else {
        deg[u]--;
        deg[p[u]]--;
      }
    }
  }
  printf("%d\n", int(ans.size()));
  for (int i = 0; i < ans.size(); i++) {
    printf("%d ", ans[i]);
  }
  printf("\n");
  return 0;
}
