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 INF = 1e9;
const long long int INFF = 1e17;
const double EPS = 1e-9;
const long long int MOD = 1e9 + 7;
const int N = 3e5 + 10;
vector<vector<int> > g(N);
int n, m, d[N], ans[N];
map<pair<int, int>, int> inc;
bool vis[N], use[N];
void dfs(int v, int par) {
  vis[v] = 1;
  for (auto u : g[v])
    if (!vis[u]) dfs(u, v);
  if (par != -1) {
    if (ans[v] && !d[v] || !ans[v] && d[v]) {
      ans[v] = !ans[v];
      ans[par] = !ans[par];
      use[inc[make_pair(v, par)] = inc[make_pair(par, v)]] = 1;
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  int sum = 0, cnt = 0;
  for (int i = (0); i < (n); ++i) {
    scanf("%d", &d[i]);
    if (d[i] != -1)
      sum += d[i];
    else
      cnt++;
  }
  if (sum & 1 && !cnt) {
    puts("-1");
    return 0;
  }
  if (sum & 1) {
    for (int i = (0); i < (n); ++i)
      if (d[i] == -1) {
        d[i] = 1;
        break;
      }
  }
  for (int i = (0); i < (n); ++i)
    if (d[i] == -1) d[i] = 0;
  for (int i = (0); i < (m); ++i) {
    int t1, t2;
    scanf("%d %d", &t1, &t2);
    t1--, t2--;
    g[t1].push_back(t2);
    g[t2].push_back(t1);
    inc[make_pair(t1, t2)] = inc[make_pair(t2, t1)] = i;
  }
  for (int i = (0); i < (n); ++i) ans[i] = 0, vis[i] = 0;
  for (int i = (0); i < (m); ++i) use[i] = 0;
  dfs(0, -1);
  vector<int> ret;
  for (int i = (0); i < (m); ++i)
    if (!use[i]) ret.push_back(i + 1);
  printf("%d\n", (int)ret.size());
  for (auto u : ret) printf("%d ", u);
  puts("");
  return 0;
}
