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 d[300005];
int parent[300005];
bool vis[300005];
vector<int> an;
vector<int> lev[300005];
vector<int> adj[300005];
map<int, int> mp[300005];
int lm;
void dfs(int node, int pa, int le) {
  lm = max(lm, le);
  vis[node] = true;
  parent[node] = pa;
  lev[le].push_back(node);
  for (int i = 0; i < adj[node].size(); i++) {
    if (!vis[adj[node][i]]) {
      dfs(adj[node][i], node, le + 1);
    }
  }
}
int main() {
  int i, j, k, l, m, n, u, v, t, r, cnt;
  int flag = 0;
  long long ans, sum = 0;
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> d[i];
    if (d[i] == -1) {
      flag = 1;
      continue;
    }
    sum += d[i];
  }
  for (i = 1; i <= m; i++) {
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
    mp[u][v] = i;
    mp[v][u] = i;
  }
  if (sum % 2 != 0) {
    if (flag == 1) {
      for (i = 1; i <= n; i++) {
        if (d[i] == -1) {
          d[i] = 1;
          break;
        }
      }
      for (; i <= n; i++) {
        if (d[i] == -1) {
          d[i] = 0;
        }
      }
    } else {
      cout << "-1" << endl;
      return 0;
    }
  } else {
    for (i = 1; i <= n; i++) {
      if (d[i] == -1) {
        d[i] = 0;
      }
    }
  }
  dfs(1, 0, 0);
  for (l = lm; l > 0; l--) {
    for (i = 0; i < lev[l].size(); i++) {
      if (d[lev[l][i]] == 0) {
        continue;
      } else {
        an.push_back(mp[lev[l][i]][parent[lev[l][i]]]);
        d[parent[lev[l][i]]]++;
        d[parent[lev[l][i]]] %= 2;
      }
    }
  }
  cout << an.size() << endl;
  for (i = 0; i < an.size(); i++) {
    cout << an[i] << " ";
  }
  cout << endl;
}
