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 int maxn = 300000 + 5;
int d[maxn], n, m;
int to[maxn * 2], head[maxn], nex[maxn * 2], tol;
void insert(int u, int v) {
  ++tol, to[tol] = v, nex[tol] = head[u], head[u] = tol;
  ++tol, to[tol] = u, nex[tol] = head[v], head[v] = tol;
}
int p, ans[maxn * 2], vis[maxn], cnt;
int dfs(int u) {
  vis[u] = 1;
  for (int i = head[u]; i; i = nex[i]) {
    if (!vis[to[i]]) {
      if (dfs(to[i])) {
        ans[i] = 1;
        cnt++;
        if (d[u] != 2) {
          d[u] ^= 1;
        }
      }
    }
  }
  return d[u];
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1, x; i <= n; i++) {
    cin >> x;
    if (x == -1) p = i;
    if (x == -1)
      d[i] = 2;
    else
      d[i] = x;
  }
  for (int i = 1, u, v; i <= m; i++) {
    cin >> u >> v;
    insert(u, v);
  }
  if (p)
    dfs(p);
  else if (dfs(1) & 1) {
    cout << -1 << "\n";
    return 0;
  }
  cout << cnt << "\n";
  for (int i = 1; i <= tol; i += 2)
    if (ans[i] || ans[i + 1]) cout << (i + 1) / 2 << ' ';
}
