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 sz = 3E5 + 10;
int D[sz];
int F[sz], T[sz];
vector<vector<int> > G;
vector<int> sol;
bool vis[sz];
int dfs(int n, int p) {
  int o = 0;
  for (int j = 0; j < G[n].size(); j++) {
    int c = F[G[n][j]] + T[G[n][j]] - n;
    if (c != p && vis[c] == 0) {
      vis[c] = 1;
      int m = dfs(c, n);
      o += m;
      if (m % 2) sol.push_back(G[n][j]);
    }
  }
  if (D[n] == 1) o++;
  return o;
}
int main() {
  ios::sync_with_stdio(false);
  int N, M;
  cin >> N >> M;
  G.resize(N + 1);
  int root = -1;
  int one = 0;
  for (int i = 1; i <= N; i++) {
    int j;
    cin >> j;
    D[i] = j;
    if (j == -1) root = i;
    if (j == 1) one++;
  }
  for (int i = 1; i <= M; i++) {
    int a, b;
    cin >> a >> b;
    F[i] = a;
    T[i] = b;
    G[a].push_back(i);
    G[b].push_back(i);
  }
  if (one == 0) {
    cout << 0 << endl;
    return 0;
  }
  if (root != -1) {
  } else if (one % 2) {
    cout << -1 << endl;
    return 0;
  } else {
    for (int i = 1; i <= N; i++) {
      if (D[i] == 1) root = i;
    }
  }
  memset(vis, 0, sizeof(vis));
  vis[root] = 1;
  int tmp = dfs(root, -1);
  cout << sol.size() << endl;
  for (int i = 0; i < sol.size(); i++) {
    if (i != 0) cout << ' ';
    cout << sol[i];
  }
  cout << endl;
  return 0;
}
