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;
long long int power(long long int a, long long int b, long long int m) {
  long long int pp = (b == 0) ? 1 : power(a, b >> 1, m);
  pp = (pp * pp) % m;
  if (b & 1) pp = (pp * a) % m;
  return pp;
}
long long int d[300005];
long long int deg[300005] = {0};
bool vis[300005] = {0};
long long int error[300005];
map<pair<long long int, long long int>, long long int> mm;
vector<long long int> graph[300005];
long long int edges[300005] = {0};
long long int sz;
void dfs1(long long int u) {
  vis[u] = 1;
  error[u] = (d[u] == deg[u] % 2) ? 0 : 1;
  for (long long int v : graph[u]) {
    if (!vis[v]) {
      dfs1(v);
      error[u] += error[v];
    }
  }
}
void dfs2(long long int u) {
  vis[u] = 1;
  for (long long int v : graph[u]) {
    if (!vis[v]) {
      dfs2(v);
      if (error[v] & 1) {
        deg[u]--;
        deg[v]--;
        edges[mm[make_pair(u, v)]] = 1;
        sz--;
      }
    }
  }
}
void dfs3(long long int u) {
  vis[u] = 1;
  for (long long int v : graph[u]) {
    if (!vis[v]) {
      dfs3(v);
      if (d[v] != deg[v] % 2) {
        edges[mm[make_pair(u, v)]] = 1;
        sz--;
        deg[u]--;
        deg[v]--;
      }
    }
  }
}
signed main() {
  long long int n, m, u, v;
  scanf("%lld", &(n));
  scanf("%lld", &(m));
  sz = m;
  long long int ind = 0;
  for (long long int i = 1; i < n + 1; i++) {
    scanf("%lld", &(d[i]));
    if (d[i] == -1) ind = i;
  }
  for (long long int i = 1; i <= m; i++) {
    scanf("%lld", &(u));
    scanf("%lld", &(v));
    graph[u].emplace_back(v);
    graph[v].emplace_back(u);
    mm.insert(make_pair(make_pair(u, v), i));
    mm.insert(make_pair(make_pair(v, u), i));
    deg[u]++;
    deg[v]++;
  }
  if (ind == 0) {
    long long int ind1 = 0, c = 0;
    for (long long int i = 1; i <= n; i++) {
      if (d[i] != deg[i] % 2) {
        ind1 = i;
        c++;
      }
    }
    if (c & 1)
      puts("-1");
    else {
      dfs1(ind1);
      for (long long int i = 0; i < n + 1; i++) vis[i] = 0;
      dfs2(ind1);
      printf("%lld ", (sz));
      printf("\n");
      for (long long int i = 1; i <= m; i++)
        if (!edges[i]) printf("%lld ", (i));
    }
  } else {
    dfs3(ind);
    printf("%lld ", (sz));
    printf("\n");
    for (long long int i = 1; i <= m; i++)
      if (!edges[i]) printf("%lld ", (i));
  }
  return 0;
}
