#include <bits/stdc++.h>
using namespace std;
const long long MN = 3e5 + 100;
long long n, m, d[MN], tf, in;
vector<long long> ans;
vector<pair<long long, long long>> adj[MN];
bool mark[MN];
void dfs(long long v) {
  if (mark[v]) return;
  mark[v] = 1;
  long long t_f = 0;
  sort(adj[v].begin(), adj[v].end());
  adj[v].resize(unique(adj[v].begin(), adj[v].end()) - adj[v].begin());
  for (auto i : adj[v]) {
    if (!mark[i.first]) {
      dfs(i.first);
      if (d[i.first] == 1) {
        t_f++;
        ans.push_back(i.second);
      }
    }
  }
  if (d[v] == -1) {
    d[v] = 0;
  }
  if (t_f & 1) {
    d[v] ^= 1;
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    cin >> d[i];
    if (d[i] == -1) {
      in = i;
    }
    if (d[i] == 1) {
      tf++;
    }
  }
  for (long long i = 1; i <= m; i++) {
    long long u, v;
    cin >> u >> v;
    adj[u].push_back({v, i});
    adj[v].push_back({u, i});
  }
  if (tf & 1 && !in) {
    cout << -1;
    return 0;
  }
  if (tf & 1) {
    d[in] = 1;
  }
  dfs(1);
  cout << ans.size() << endl;
  for (long long i : ans) {
    cout << i << "\n";
  }
  return 0;
}
