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 mod = 1e9 + 7;
const double eps = 1e-6;
const int inf = 0x3f3f3f3f;
const int N = 3e5 + 10;
int n, m, v, u, tot;
int a[N], c[N], ans[N];
int s, p;
bool vis[N];
vector<pair<int, int> > g[N], gg[N];
void dfs(int x) {
  for (int i = 0; i < g[x].size(); i++) {
    int y = g[x][i].first, id = g[x][i].second;
    if (vis[y]) continue;
    gg[x].push_back(pair<int, int>(y, id));
    gg[y].push_back(pair<int, int>(x, id));
    vis[y] = 1;
    dfs(y);
  }
}
void f(int x, int fa) {
  if (a[x] == 1) c[x]++;
  for (int i = 0; i < gg[x].size(); i++) {
    int y = gg[x][i].first, id = gg[x][i].second;
    if (y == fa) continue;
    f(y, x);
    if ((s - c[y]) % 2) ans[++tot] = id;
    c[x] += c[y];
  }
}
int main() {
  cin >> n >> m;
  int p = -1;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    if (a[i] == 1) s++;
    if (a[i] == -1) p = i;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    g[u].push_back(pair<int, int>(v, i));
    g[v].push_back(pair<int, int>(u, i));
  }
  if ((s % 2) && p == -1) {
    puts("-1");
    return 0;
  }
  if (s % 2) {
    s++;
    a[p] = 1;
  }
  vis[1] = 1;
  dfs(1);
  f(1, 0);
  sort(ans + 1, ans + 1 + tot);
  cout << tot << endl;
  for (int i = 1; i <= tot; i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
