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 dx[9] = {0, 1, -1, 0, 0, -1, -1, 1, 1};
const int dy[9] = {0, 0, 0, -1, 1, -1, 1, -1, 1};
const double pi = acos(-1.0);
const int N = 3e5;
int n, m, d[N + 10], cnt1, cnt0;
bool bo[N + 10];
vector<pair<int, int> > g[N + 10];
vector<int> ans;
void dfs(int x) {
  bo[x] = true;
  for (pair<int, int> temp : g[x]) {
    int y = temp.first, id = temp.second;
    if (!bo[y]) {
      dfs(y);
      if (d[y] == 1) {
        d[x] ^= 1;
        d[y] = 0;
        ans.emplace_back(id);
      }
    }
  }
}
int main() {
  scanf("%d", &n), scanf("%d", &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &d[i]);
    if (d[i] == 1) cnt1++;
    if (d[i] == -1) cnt0++;
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d", &x), scanf("%d", &y);
    g[x].emplace_back(make_pair(y, i)), g[y].emplace_back(make_pair(x, i));
  }
  if ((cnt1 & 1) && cnt0 == 0) {
    puts("-1");
    return 0;
  }
  cnt1 = cnt1 & 1;
  for (int i = 1; i <= n; i++)
    if (d[i] == -1) {
      d[i] = cnt1;
      cnt1 = 0;
    }
  dfs(1);
  printf("%d", ((int)ans.size()));
  puts("");
  for (int x : ans) printf("%d", x), puts("");
  return 0;
}
