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;
const double pi = acos(-1.0);
const double eps = 1e-12;
const int MOD = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 3e5 + 4;
const int maxm = 1e6 + 4;
inline long long rule(long long x) { return (x %= MOD) += x < 0 ? MOD : 0; }
struct Edge {
  int to, id;
};
vector<Edge> G[maxn];
int inter[maxn], edge[maxn], deg[maxn], from[maxn], n, m, d[maxn];
bool tag[maxn];
vector<int> ans;
int stac[maxn], idx = 0;
bool dfs(int u, int ancestor) {
  if (d[u] == 1 && ancestor != u) {
    d[u]--;
    for (int i = 0; i < idx; ++i) ans.push_back(stac[i]);
    return true;
  }
  for (int& i = inter[u]; i < G[u].size(); ++i) {
    Edge e = G[u][i];
    if (tag[e.id]) continue;
    tag[e.id] = true;
    stac[idx++] = e.id;
    if (dfs(e.to, ancestor)) return true;
    idx--;
  }
  return false;
}
int main() {
  int ik, i, j, k, kase;
  scanf("%d%d", &n, &m);
  bool ok = false;
  int cnt = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &d[i]);
    if (d[i] == -1) ok = true;
    if (d[i] == 1) cnt++;
  }
  if (!ok && (cnt & 1)) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back({v, i});
    G[v].push_back({u, i});
  }
  if (ok) {
    queue<int> q;
    stack<int> s;
    for (int i = 1; i <= n; ++i)
      if (d[i] == -1) {
        q.push(i);
        edge[i] = -1;
        tag[i] = true;
      }
    while (q.size()) {
      int u = q.front();
      q.pop();
      s.push(u);
      for (auto e : G[u])
        if (!tag[e.to]) {
          tag[e.to] = true;
          edge[e.to] = e.id;
          from[e.to] = u;
          q.push(e.to);
        }
    }
    while (s.size()) {
      int u = s.top();
      s.pop();
      if (d[u] == -1) continue;
      if (deg[u] % 2 != d[u]) {
        ans.push_back(edge[u]);
        deg[from[u]]++;
      }
    }
    printf("%d\n", ans.size());
    sort(ans.begin(), ans.end());
    for (int i = 0; i < ans.size(); ++i) printf("%d\n", ans[i]);
    return 0;
  }
  for (int i = 1; i <= n; ++i)
    if (d[i]) {
      idx = 0;
      dfs(i, i);
      d[i]--;
    }
  printf("%d\n", ans.size());
  sort(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); ++i) printf("%d\n", ans[i]);
  return 0;
}
