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 A[maxn];
vector<int> D[maxn];
int visit[maxn];
map<pair<int, int>, int> E;
int dfs(int a) {
  for (int i = 0; i < D[a].size(); i++) {
    if (visit[D[a][i]] == 0) {
      visit[D[a][i]] = 1;
      dfs(D[a][i]);
      if (A[D[a][i]] == 1) {
        E[make_pair(a, D[a][i])] = 2;
        E[make_pair(D[a][i], a)] = 2;
        A[a] = 1 - A[a];
      }
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  long long sum = 0;
  memset(A, 0, sizeof(A));
  memset(visit, 0, sizeof(visit));
  vector<int> K;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &A[i]);
    if (A[i] != -1)
      sum += A[i];
    else
      K.push_back(i);
  }
  if (K.size() == 0 && sum % 2 == 1)
    cout << -1 << endl;
  else {
    if (sum % 2 == 1) {
      A[K[0]] = 1;
      for (int t = 1; t < K.size(); t++) {
        A[K[t]] = 0;
      }
    } else {
      for (int t = 0; t < K.size(); t++) {
        A[K[t]] = 0;
      }
    }
    int from, to;
    vector<pair<int, int> > F;
    for (int ds = 0; ds < m; ds++) {
      scanf("%d%d", &from, &to);
      D[from].push_back(to);
      D[to].push_back(from);
      F.push_back(make_pair(from, to));
    }
    visit[1] = 1;
    dfs(1);
    vector<int> S;
    for (int i = 0; i < F.size(); i++) {
      if (E[F[i]] == 2) S.push_back(i + 1);
    }
    cout << S.size() << endl;
    for (int t = 0; t < S.size(); t++) {
      cout << S[t] << endl;
    }
  }
  return 0;
}
