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;
void dfs(vector<int>& v, vector<vector<pair<int, int> > >& g, vector<bool>& vis,
         vector<int>& deg, vector<bool>& ing, int cur, int edge, int prev) {
  vis[cur] = true;
  for (__typeof((g[cur]).begin()) u = (g[cur]).begin(); u != (g[cur]).end();
       ++u) {
    if (!vis[(*u).first]) {
      dfs(v, g, vis, deg, ing, (*u).first, (*u).second, cur);
    }
  }
  if (cur != 1 && v[cur] != -1 && (deg[cur] & 1) != v[cur]) {
    ing[edge] = false;
    deg[prev]--;
    deg[cur]--;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int a, b, n, m;
  cin >> n >> m;
  vector<int> v(n + 1);
  vector<int> deg(n + 1, 0);
  vector<bool> ing(m + 1, true);
  vector<bool> vis(n + 1, false);
  vector<vector<pair<int, int> > > g(n + 1);
  for (int i = 0; i < (n); ++i) {
    cin >> v[i + 1];
  }
  for (int i = 0; i < (m); ++i) {
    cin >> a >> b;
    g[a].push_back(make_pair(b, i + 1));
    g[b].push_back(make_pair(a, i + 1));
    deg[a]++;
    deg[b]++;
  }
  int c = 0, k = 0;
  for (int i = 0; i < (n); ++i) {
    if (v[i + 1] == -1) {
      k++;
    } else {
      c += v[i + 1];
    }
  }
  if (k != 0) {
    for (int i = 0; i < (n); ++i) {
      if (v[i + 1] == -1) {
        if (c & 1) {
          v[i + 1] = 1;
          c++;
        } else
          v[i + 1] = 0;
      }
    }
  }
  if (c & 1)
    cout << -1 << "\n";
  else {
    int cnt = 0;
    dfs(v, g, vis, deg, ing, 1, -1, -1);
    for (int i = 0; i < (m); ++i)
      if (ing[i + 1]) cnt++;
    cout << cnt << "\n";
    for (int i = 0; i < (m); ++i) {
      if (ing[i + 1]) cout << i + 1 << "\n";
    }
  }
  return 0;
}
