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;
int cc, m, n, a[910000], bj, v, str, en, g, bjj[1110000];
struct fhs {
  int str, en;
};
fhs pp[1100000];
vector<pair<int, int> > mp[1100000];
vector<int> ans;
int f[510000];
int find(int x) {
  if (x != f[x]) {
    return f[x] = find(f[x]);
  }
  return x;
}
int dfs(int o) {
  bjj[o] = 1;
  int dq = a[o];
  for (auto x : mp[o]) {
    if (!bjj[x.first]) {
      if (dfs(x.first)) {
        ans.push_back(x.second);
        dq = 1 - dq;
      }
    }
  }
  if (a[o] == -1) {
    dq = 0;
  }
  return dq;
}
int main() {
  cin >> n >> m;
  for (int x = 0; x <= n; x++) {
    f[x] = x;
  }
  for (int x = 1; x <= n; x++) {
    cin >> a[x];
    if (a[x] < 0) {
      bj = 1;
      g = x;
    } else {
      v += a[x];
    }
  }
  if (v % 2 == 0) {
    bj = 1;
  }
  if (bj == 0) {
    cout << -1 << endl;
    return 0;
  }
  if (g == 0) {
    g = 1;
  }
  for (int x = 1; x <= m; x++) {
    cin >> str >> en;
    pp[x].str = str;
    pp[x].en = en;
    pair<int, int> lp;
    lp.first = en;
    lp.second = x;
    mp[str].push_back(lp);
    lp.first = str;
    mp[en].push_back(lp);
  }
  dfs(g);
  cout << ans.size() << endl;
  sort(ans.begin(), ans.end());
  for (int x = 0; x < ans.size(); x++) {
    cout << ans[x] << endl;
  }
}
